Generated by Cython 0.29.21

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: scheduler.c

+0001: import asyncio
  __pyx_t_1 = __Pyx_patch_asyncio(__Pyx_Import(__pyx_n_s_asyncio, 0, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_asyncio, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0002: from collections import defaultdict, deque
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_defaultdict);
  __Pyx_GIVEREF(__pyx_n_s_defaultdict);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_defaultdict);
  __Pyx_INCREF(__pyx_n_s_deque);
  __Pyx_GIVEREF(__pyx_n_s_deque);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_deque);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_defaultdict, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_deque); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_deque, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0003: 
+0004: from collections.abc import Mapping, Set
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Mapping);
  __Pyx_GIVEREF(__pyx_n_s_Mapping);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Mapping);
  __Pyx_INCREF(__pyx_n_s_Set);
  __Pyx_GIVEREF(__pyx_n_s_Set);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Set);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Mapping); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Mapping, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Set, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0005: from contextlib import suppress
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_suppress);
  __Pyx_GIVEREF(__pyx_n_s_suppress);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_suppress);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_contextlib, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_suppress); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_suppress, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0006: from datetime import timedelta
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_timedelta);
  __Pyx_GIVEREF(__pyx_n_s_timedelta);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_timedelta);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_datetime, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_timedelta, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0007: from functools import partial
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_partial);
  __Pyx_GIVEREF(__pyx_n_s_partial);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_partial);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_partial); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_partial, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0008: import inspect
  __pyx_t_2 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, 0, 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_inspect, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0009: import itertools
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_itertools, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_itertools, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0010: import json
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_json, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_json, __pyx_t_2) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0011: import logging
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_logging, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_logging, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0012: import math
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_math, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_math, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0013: from numbers import Number
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Number);
  __Pyx_GIVEREF(__pyx_n_s_Number);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Number);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numbers, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Number); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Number, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0014: import operator
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_operator, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_operator, __pyx_t_1) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0015: import os
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0016: import sys
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0017: import random
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0018: import warnings
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_warnings, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0019: import weakref
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_weakref, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_weakref, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0020: import psutil
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_psutil, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_psutil, __pyx_t_1) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0021: import sortedcontainers
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sortedcontainers, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sortedcontainers, __pyx_t_1) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0022: 
+0023: from tlz import (
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_tlz, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_merge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_merge, __pyx_t_1) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pluck); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pluck, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_merge_sorted); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_merge_sorted, __pyx_t_1) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_first); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_first, __pyx_t_1) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_merge_with); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_merge_with, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_valmap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_valmap, __pyx_t_1) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_second); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_second, __pyx_t_1) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_compose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_compose, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_groupby); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_groupby, __pyx_t_1) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_concat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_concat, __pyx_t_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0024:     merge,
  __pyx_t_1 = PyList_New(10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_merge);
  __Pyx_GIVEREF(__pyx_n_s_merge);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_merge);
  __Pyx_INCREF(__pyx_n_s_pluck);
  __Pyx_GIVEREF(__pyx_n_s_pluck);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_pluck);
  __Pyx_INCREF(__pyx_n_s_merge_sorted);
  __Pyx_GIVEREF(__pyx_n_s_merge_sorted);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_merge_sorted);
  __Pyx_INCREF(__pyx_n_s_first);
  __Pyx_GIVEREF(__pyx_n_s_first);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_first);
  __Pyx_INCREF(__pyx_n_s_merge_with);
  __Pyx_GIVEREF(__pyx_n_s_merge_with);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_merge_with);
  __Pyx_INCREF(__pyx_n_s_valmap);
  __Pyx_GIVEREF(__pyx_n_s_valmap);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_valmap);
  __Pyx_INCREF(__pyx_n_s_second);
  __Pyx_GIVEREF(__pyx_n_s_second);
  PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_second);
  __Pyx_INCREF(__pyx_n_s_compose);
  __Pyx_GIVEREF(__pyx_n_s_compose);
  PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_compose);
  __Pyx_INCREF(__pyx_n_s_groupby);
  __Pyx_GIVEREF(__pyx_n_s_groupby);
  PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_s_groupby);
  __Pyx_INCREF(__pyx_n_s_concat);
  __Pyx_GIVEREF(__pyx_n_s_concat);
  PyList_SET_ITEM(__pyx_t_1, 9, __pyx_n_s_concat);
 0025:     pluck,
 0026:     merge_sorted,
 0027:     first,
 0028:     merge_with,
 0029:     valmap,
 0030:     second,
 0031:     compose,
 0032:     groupby,
 0033:     concat,
 0034: )
+0035: from tornado.ioloop import IOLoop, PeriodicCallback
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_IOLoop);
  __Pyx_GIVEREF(__pyx_n_s_IOLoop);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_IOLoop);
  __Pyx_INCREF(__pyx_n_s_PeriodicCallback);
  __Pyx_GIVEREF(__pyx_n_s_PeriodicCallback);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_PeriodicCallback);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_tornado_ioloop, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_IOLoop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IOLoop, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_PeriodicCallback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PeriodicCallback, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0036: 
+0037: import dask
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_dask, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dask, __pyx_t_1) < 0) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0038: 
+0039: from . import profile
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_profile);
  __Pyx_GIVEREF(__pyx_n_s_profile);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_profile);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s__50, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_profile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_profile, __pyx_t_1) < 0) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0040: from .batched import BatchedSend
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_BatchedSend);
  __Pyx_GIVEREF(__pyx_n_s_BatchedSend);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_BatchedSend);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_batched, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BatchedSend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BatchedSend, __pyx_t_2) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0041: from .comm import (
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_comm, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_normalize_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_address, __pyx_t_1) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_resolve_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_resolve_address, __pyx_t_1) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_address_host, __pyx_t_1) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_unparse_host_port); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unparse_host_port, __pyx_t_1) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0042:     normalize_address,
  __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_normalize_address);
  __Pyx_GIVEREF(__pyx_n_s_normalize_address);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_normalize_address);
  __Pyx_INCREF(__pyx_n_s_resolve_address);
  __Pyx_GIVEREF(__pyx_n_s_resolve_address);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_resolve_address);
  __Pyx_INCREF(__pyx_n_s_get_address_host);
  __Pyx_GIVEREF(__pyx_n_s_get_address_host);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_get_address_host);
  __Pyx_INCREF(__pyx_n_s_unparse_host_port);
  __Pyx_GIVEREF(__pyx_n_s_unparse_host_port);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_unparse_host_port);
 0043:     resolve_address,
 0044:     get_address_host,
 0045:     unparse_host_port,
 0046: )
+0047: from .comm.addressing import addresses_from_user_args
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_addresses_from_user_args);
  __Pyx_GIVEREF(__pyx_n_s_addresses_from_user_args);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_addresses_from_user_args);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_comm_addressing, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_addresses_from_user_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_addresses_from_user_args, __pyx_t_2) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0048: from .core import rpc, send_recv, clean_exception, CommClosedError, Status
  __pyx_t_1 = PyList_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_rpc);
  __Pyx_GIVEREF(__pyx_n_s_rpc);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_rpc);
  __Pyx_INCREF(__pyx_n_s_send_recv);
  __Pyx_GIVEREF(__pyx_n_s_send_recv);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_send_recv);
  __Pyx_INCREF(__pyx_n_s_clean_exception);
  __Pyx_GIVEREF(__pyx_n_s_clean_exception);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_clean_exception);
  __Pyx_INCREF(__pyx_n_s_CommClosedError);
  __Pyx_GIVEREF(__pyx_n_s_CommClosedError);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_CommClosedError);
  __Pyx_INCREF(__pyx_n_s_Status);
  __Pyx_GIVEREF(__pyx_n_s_Status);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_Status);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_core, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_rpc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rpc, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_send_recv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_recv, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_clean_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clean_exception, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CommClosedError, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Status, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0049: from .diagnostics.plugin import SchedulerPlugin
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_SchedulerPlugin);
  __Pyx_GIVEREF(__pyx_n_s_SchedulerPlugin);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_SchedulerPlugin);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_diagnostics_plugin, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_SchedulerPlugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SchedulerPlugin, __pyx_t_2) < 0) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0050: 
+0051: from .http import get_handlers
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_get_handlers);
  __Pyx_GIVEREF(__pyx_n_s_get_handlers);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_handlers);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_http, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_handlers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_handlers, __pyx_t_1) < 0) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0052: from .metrics import time
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_time);
  __Pyx_GIVEREF(__pyx_n_s_time);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_time);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_metrics, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_2) < 0) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0053: from .node import ServerNode
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_ServerNode);
  __Pyx_GIVEREF(__pyx_n_s_ServerNode);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_ServerNode);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_node, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ServerNode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ServerNode, __pyx_t_1) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0054: from . import preloading
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_preloading);
  __Pyx_GIVEREF(__pyx_n_s_preloading);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_preloading);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s__50, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_preloading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_preloading, __pyx_t_2) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0055: from .proctitle import setproctitle
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_setproctitle);
  __Pyx_GIVEREF(__pyx_n_s_setproctitle);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_setproctitle);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_proctitle, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_setproctitle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setproctitle, __pyx_t_1) < 0) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0056: from .security import Security
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Security);
  __Pyx_GIVEREF(__pyx_n_s_Security);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Security);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_security, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Security); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Security, __pyx_t_2) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0057: from .utils import (
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_utils, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_All); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_All, __pyx_t_1) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_fileno_limit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_fileno_limit, __pyx_t_1) < 0) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_log_errors, __pyx_t_1) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_key_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_key_split, __pyx_t_1) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_validate_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_key, __pyx_t_1) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_no_default); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_no_default, __pyx_t_1) < 0) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_timedelta, __pyx_t_1) < 0) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_parse_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_bytes, __pyx_t_1) < 0) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_shutting_down); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shutting_down, __pyx_t_1) < 0) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_key_split_group); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_key_split_group, __pyx_t_1) < 0) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_empty_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_empty_context, __pyx_t_1) < 0) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_tmpfile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tmpfile, __pyx_t_1) < 0) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_format_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_format_bytes, __pyx_t_1) < 0) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_format_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_format_time, __pyx_t_1) < 0) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_TimeoutError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TimeoutError, __pyx_t_1) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0058:     All,
  __pyx_t_1 = PyList_New(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_All);
  __Pyx_GIVEREF(__pyx_n_s_All);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_All);
  __Pyx_INCREF(__pyx_n_s_get_fileno_limit);
  __Pyx_GIVEREF(__pyx_n_s_get_fileno_limit);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_get_fileno_limit);
  __Pyx_INCREF(__pyx_n_s_log_errors);
  __Pyx_GIVEREF(__pyx_n_s_log_errors);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_log_errors);
  __Pyx_INCREF(__pyx_n_s_key_split);
  __Pyx_GIVEREF(__pyx_n_s_key_split);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_key_split);
  __Pyx_INCREF(__pyx_n_s_validate_key);
  __Pyx_GIVEREF(__pyx_n_s_validate_key);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_validate_key);
  __Pyx_INCREF(__pyx_n_s_no_default);
  __Pyx_GIVEREF(__pyx_n_s_no_default);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_no_default);
  __Pyx_INCREF(__pyx_n_s_parse_timedelta);
  __Pyx_GIVEREF(__pyx_n_s_parse_timedelta);
  PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_parse_timedelta);
  __Pyx_INCREF(__pyx_n_s_parse_bytes);
  __Pyx_GIVEREF(__pyx_n_s_parse_bytes);
  PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_parse_bytes);
  __Pyx_INCREF(__pyx_n_s_shutting_down);
  __Pyx_GIVEREF(__pyx_n_s_shutting_down);
  PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_s_shutting_down);
  __Pyx_INCREF(__pyx_n_s_key_split_group);
  __Pyx_GIVEREF(__pyx_n_s_key_split_group);
  PyList_SET_ITEM(__pyx_t_1, 9, __pyx_n_s_key_split_group);
  __Pyx_INCREF(__pyx_n_s_empty_context);
  __Pyx_GIVEREF(__pyx_n_s_empty_context);
  PyList_SET_ITEM(__pyx_t_1, 10, __pyx_n_s_empty_context);
  __Pyx_INCREF(__pyx_n_s_tmpfile);
  __Pyx_GIVEREF(__pyx_n_s_tmpfile);
  PyList_SET_ITEM(__pyx_t_1, 11, __pyx_n_s_tmpfile);
  __Pyx_INCREF(__pyx_n_s_format_bytes);
  __Pyx_GIVEREF(__pyx_n_s_format_bytes);
  PyList_SET_ITEM(__pyx_t_1, 12, __pyx_n_s_format_bytes);
  __Pyx_INCREF(__pyx_n_s_format_time);
  __Pyx_GIVEREF(__pyx_n_s_format_time);
  PyList_SET_ITEM(__pyx_t_1, 13, __pyx_n_s_format_time);
  __Pyx_INCREF(__pyx_n_s_TimeoutError);
  __Pyx_GIVEREF(__pyx_n_s_TimeoutError);
  PyList_SET_ITEM(__pyx_t_1, 14, __pyx_n_s_TimeoutError);
 0059:     get_fileno_limit,
 0060:     log_errors,
 0061:     key_split,
 0062:     validate_key,
 0063:     no_default,
 0064:     parse_timedelta,
 0065:     parse_bytes,
 0066:     shutting_down,
 0067:     key_split_group,
 0068:     empty_context,
 0069:     tmpfile,
 0070:     format_bytes,
 0071:     format_time,
 0072:     TimeoutError,
 0073: )
+0074: from .utils_comm import scatter_to_workers, gather_from_workers, retry_operation
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_scatter_to_workers);
  __Pyx_GIVEREF(__pyx_n_s_scatter_to_workers);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_scatter_to_workers);
  __Pyx_INCREF(__pyx_n_s_gather_from_workers);
  __Pyx_GIVEREF(__pyx_n_s_gather_from_workers);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_gather_from_workers);
  __Pyx_INCREF(__pyx_n_s_retry_operation);
  __Pyx_GIVEREF(__pyx_n_s_retry_operation);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_retry_operation);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_utils_comm, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_scatter_to_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_scatter_to_workers, __pyx_t_2) < 0) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_gather_from_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gather_from_workers, __pyx_t_2) < 0) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_retry_operation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_retry_operation, __pyx_t_2) < 0) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0075: from .utils_perf import enable_gc_diagnosis, disable_gc_diagnosis
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_enable_gc_diagnosis);
  __Pyx_GIVEREF(__pyx_n_s_enable_gc_diagnosis);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_enable_gc_diagnosis);
  __Pyx_INCREF(__pyx_n_s_disable_gc_diagnosis);
  __Pyx_GIVEREF(__pyx_n_s_disable_gc_diagnosis);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_disable_gc_diagnosis);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_utils_perf, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_enable_gc_diagnosis); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_enable_gc_diagnosis, __pyx_t_1) < 0) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_disable_gc_diagnosis); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_disable_gc_diagnosis, __pyx_t_1) < 0) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0076: from . import versions as version_module
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_versions);
  __Pyx_GIVEREF(__pyx_n_s_versions);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_versions);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s__50, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_versions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_version_module, __pyx_t_2) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0077: 
+0078: from .publish import PublishExtension
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_PublishExtension);
  __Pyx_GIVEREF(__pyx_n_s_PublishExtension);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PublishExtension);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_publish, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PublishExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PublishExtension, __pyx_t_1) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0079: from .queues import QueueExtension
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_QueueExtension);
  __Pyx_GIVEREF(__pyx_n_s_QueueExtension);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_QueueExtension);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_queues, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_QueueExtension); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_QueueExtension, __pyx_t_2) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0080: from .semaphore import SemaphoreExtension
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_SemaphoreExtension);
  __Pyx_GIVEREF(__pyx_n_s_SemaphoreExtension);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_SemaphoreExtension);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_semaphore, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_SemaphoreExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SemaphoreExtension, __pyx_t_1) < 0) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0081: from .recreate_exceptions import ReplayExceptionScheduler
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_ReplayExceptionScheduler);
  __Pyx_GIVEREF(__pyx_n_s_ReplayExceptionScheduler);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ReplayExceptionScheduler);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_recreate_exceptions, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ReplayExceptionScheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplayExceptionScheduler, __pyx_t_2) < 0) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0082: from .lock import LockExtension
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_LockExtension);
  __Pyx_GIVEREF(__pyx_n_s_LockExtension);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_LockExtension);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_lock_2, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_LockExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LockExtension, __pyx_t_1) < 0) __PYX_ERR(0, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0083: from .event import EventExtension
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_EventExtension);
  __Pyx_GIVEREF(__pyx_n_s_EventExtension);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_EventExtension);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_event, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_EventExtension); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EventExtension, __pyx_t_2) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0084: from .pubsub import PubSubSchedulerExtension
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_PubSubSchedulerExtension);
  __Pyx_GIVEREF(__pyx_n_s_PubSubSchedulerExtension);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PubSubSchedulerExtension);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pubsub, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PubSubSchedulerExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PubSubSchedulerExtension, __pyx_t_1) < 0) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0085: from .stealing import WorkStealing
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_WorkStealing);
  __Pyx_GIVEREF(__pyx_n_s_WorkStealing);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_WorkStealing);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_stealing, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_WorkStealing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WorkStealing, __pyx_t_2) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0086: from .variable import VariableExtension
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_VariableExtension);
  __Pyx_GIVEREF(__pyx_n_s_VariableExtension);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_VariableExtension);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_variable, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_VariableExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VariableExtension, __pyx_t_1) < 0) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0087: from .protocol.highlevelgraph import highlevelgraph_unpack
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_highlevelgraph_unpack);
  __Pyx_GIVEREF(__pyx_n_s_highlevelgraph_unpack);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_highlevelgraph_unpack);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_protocol_highlevelgraph, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_highlevelgraph_unpack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_highlevelgraph_unpack, __pyx_t_2) < 0) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0088: 
+0089: try:
  {
    /*try:*/ {
    }
  }
 0090:     from cython import compiled
 0091: except ImportError:
 0092:     compiled = False
 0093: 
+0094: if compiled:
  __pyx_t_6 = (1 != 0);
  if (__pyx_t_6) {
    goto __pyx_L8;
  }
 0095:     from cython import (
 0096:         bint,
 0097:         cast,
 0098:         ccall,
 0099:         cclass,
 0100:         cfunc,
 0101:         declare,
 0102:         double,
 0103:         exceptval,
 0104:         final,
 0105:         inline,
 0106:         nogil,
 0107:         Py_hash_t,
 0108:         Py_ssize_t,
 0109:     )
 0110: else:
+0111:     from ctypes import (
  /*else*/ {
/* … */
    __pyx_t_2 = __Pyx_Import(__pyx_n_s_ctypes, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_c_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_double, __pyx_t_1) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_c_ssize_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_Py_hash_t, __pyx_t_1) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_c_ssize_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_Py_ssize_t, __pyx_t_1) < 0) __PYX_ERR(0, 114, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0112:         c_double as double,
    __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_c_double);
    __Pyx_GIVEREF(__pyx_n_s_c_double);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_c_double);
    __Pyx_INCREF(__pyx_n_s_c_ssize_t);
    __Pyx_GIVEREF(__pyx_n_s_c_ssize_t);
    PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_c_ssize_t);
    __Pyx_INCREF(__pyx_n_s_c_ssize_t);
    __Pyx_GIVEREF(__pyx_n_s_c_ssize_t);
    PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_c_ssize_t);
 0113:         c_ssize_t as Py_hash_t,
 0114:         c_ssize_t as Py_ssize_t,
 0115:     )
 0116: 
+0117:     bint = bool
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_bint, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 117, __pyx_L1_error)
 0118: 
+0119:     def cast(T, v, *a, **k):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_1cast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_1cast = {"cast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_1cast, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_1cast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_T = 0;
  PyObject *__pyx_v_v = 0;
  CYTHON_UNUSED PyObject *__pyx_v_a = 0;
  CYTHON_UNUSED PyObject *__pyx_v_k = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cast (wrapper)", 0);
  __pyx_v_k = PyDict_New(); if (unlikely(!__pyx_v_k)) return NULL;
  __Pyx_GOTREF(__pyx_v_k);
  if (PyTuple_GET_SIZE(__pyx_args) > 2) {
    __pyx_v_a = PyTuple_GetSlice(__pyx_args, 2, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_a)) {
      __Pyx_DECREF(__pyx_v_k); __pyx_v_k = 0;
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_a);
  } else {
    __pyx_v_a = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_T,&__pyx_n_s_v,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_T)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cast", 0, 2, 2, 1); __PYX_ERR(0, 119, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 2) ? pos_args : 2;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_k, values, used_pos_args, "cast") < 0)) __PYX_ERR(0, 119, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_T = values[0];
    __pyx_v_v = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cast", 0, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 119, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_a); __pyx_v_a = 0;
  __Pyx_DECREF(__pyx_v_k); __pyx_v_k = 0;
  __Pyx_AddTraceback("distributed.scheduler.cast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_cast(__pyx_self, __pyx_v_T, __pyx_v_v, __pyx_v_a, __pyx_v_k);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_cast(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_T, PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_k) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cast", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__95 = PyTuple_Pack(4, __pyx_n_s_T, __pyx_n_s_v, __pyx_n_s_a, __pyx_n_s_k); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__95);
  __Pyx_GIVEREF(__pyx_tuple__95);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_1cast, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_cast, __pyx_t_2) < 0) __PYX_ERR(0, 119, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__96 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_cast, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__96)) __PYX_ERR(0, 119, __pyx_L1_error)
+0120:         return v
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_v);
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;
 0121: 
+0122:     def ccall(func):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_3ccall(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_3ccall = {"ccall", (PyCFunction)__pyx_pw_11distributed_9scheduler_3ccall, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_3ccall(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ccall (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_2ccall(__pyx_self, ((PyObject *)__pyx_v_func));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_2ccall(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ccall", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__97 = PyTuple_Pack(1, __pyx_n_s_func); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__97);
  __Pyx_GIVEREF(__pyx_tuple__97);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_3ccall, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_ccall, __pyx_t_2) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__98 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_ccall, 122, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__98)) __PYX_ERR(0, 122, __pyx_L1_error)
+0123:         return func
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_func);
  __pyx_r = __pyx_v_func;
  goto __pyx_L0;
 0124: 
+0125:     def cclass(cls):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_5cclass(PyObject *__pyx_self, PyObject *__pyx_v_cls); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_5cclass = {"cclass", (PyCFunction)__pyx_pw_11distributed_9scheduler_5cclass, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_5cclass(PyObject *__pyx_self, PyObject *__pyx_v_cls) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cclass (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_4cclass(__pyx_self, ((PyObject *)__pyx_v_cls));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_4cclass(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cclass", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__99 = PyTuple_Pack(1, __pyx_n_s_cls); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(0, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__99);
  __Pyx_GIVEREF(__pyx_tuple__99);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_5cclass, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_cclass, __pyx_t_2) < 0) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__100 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_cclass, 125, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__100)) __PYX_ERR(0, 125, __pyx_L1_error)
+0126:         return cls
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_cls);
  __pyx_r = __pyx_v_cls;
  goto __pyx_L0;
 0127: 
+0128:     def cfunc(func):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_7cfunc(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_7cfunc = {"cfunc", (PyCFunction)__pyx_pw_11distributed_9scheduler_7cfunc, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_7cfunc(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cfunc (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_6cfunc(__pyx_self, ((PyObject *)__pyx_v_func));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_6cfunc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cfunc", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__101 = PyTuple_Pack(1, __pyx_n_s_func); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__101);
  __Pyx_GIVEREF(__pyx_tuple__101);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_7cfunc, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_cfunc, __pyx_t_2) < 0) __PYX_ERR(0, 128, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_cfunc, 128, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) __PYX_ERR(0, 128, __pyx_L1_error)
+0129:         return func
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_func);
  __pyx_r = __pyx_v_func;
  goto __pyx_L0;
 0130: 
+0131:     def declare(*a, **k):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9declare(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9declare = {"declare", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9declare, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9declare(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_a = 0;
  CYTHON_UNUSED PyObject *__pyx_v_k = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("declare (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "declare", 1))) return NULL;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_a = __pyx_args;
  __pyx_r = __pyx_pf_11distributed_9scheduler_8declare(__pyx_self, __pyx_v_a, __pyx_v_k);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_8declare(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_k) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("declare", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.declare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__103 = PyTuple_Pack(2, __pyx_n_s_a, __pyx_n_s_k); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__103);
  __Pyx_GIVEREF(__pyx_tuple__103);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_9declare, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_declare, __pyx_t_2) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__104 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_declare, 131, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__104)) __PYX_ERR(0, 131, __pyx_L1_error)
+0132:         if len(a) == 2:
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_a); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 132, __pyx_L1_error)
  __pyx_t_2 = ((__pyx_t_1 == 2) != 0);
  if (__pyx_t_2) {
/* … */
  }
+0133:             return a[1]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_a, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 0134:         else:
+0135:             pass
  /*else*/ {
  }
 0136: 
+0137:     def exceptval(*a, **k):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11exceptval(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_11exceptval = {"exceptval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_11exceptval, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_11exceptval(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_a = 0;
  CYTHON_UNUSED PyObject *__pyx_v_k = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exceptval (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "exceptval", 1))) return NULL;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_a = __pyx_args;
  __pyx_r = __pyx_pf_11distributed_9scheduler_10exceptval(__pyx_self, __pyx_v_a, __pyx_v_k);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_10exceptval(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_k) {
  PyObject *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exceptval", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.exceptval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__105 = PyTuple_Pack(4, __pyx_n_s_a, __pyx_n_s_k, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__105);
  __Pyx_GIVEREF(__pyx_tuple__105);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_11exceptval, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_exceptval, __pyx_t_2) < 0) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__105, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_exceptval, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(0, 137, __pyx_L1_error)
+0138:         def wrapper(func):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9exceptval_1wrapper(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9exceptval_1wrapper = {"wrapper", (PyCFunction)__pyx_pw_11distributed_9scheduler_9exceptval_1wrapper, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9exceptval_1wrapper(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wrapper (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9exceptval_wrapper(__pyx_self, ((PyObject *)__pyx_v_func));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9exceptval_wrapper(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wrapper", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_n_s_func); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9exceptval_1wrapper, 0, __pyx_n_s_exceptval_locals_wrapper, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_wrapper = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_wrapper, 138, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 138, __pyx_L1_error)
+0139:             return func
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_func);
  __pyx_r = __pyx_v_func;
  goto __pyx_L0;
 0140: 
+0141:         return wrapper
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;
 0142: 
+0143:     def final(cls):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_13final(PyObject *__pyx_self, PyObject *__pyx_v_cls); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_13final = {"final", (PyCFunction)__pyx_pw_11distributed_9scheduler_13final, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_13final(PyObject *__pyx_self, PyObject *__pyx_v_cls) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("final (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_12final(__pyx_self, ((PyObject *)__pyx_v_cls));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_12final(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("final", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__107 = PyTuple_Pack(1, __pyx_n_s_cls); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__107);
  __Pyx_GIVEREF(__pyx_tuple__107);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_13final, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_final, __pyx_t_2) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_final, 143, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) __PYX_ERR(0, 143, __pyx_L1_error)
+0144:         return cls
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_cls);
  __pyx_r = __pyx_v_cls;
  goto __pyx_L0;
 0145: 
+0146:     def inline(func):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15inline(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15inline = {"inline", (PyCFunction)__pyx_pw_11distributed_9scheduler_15inline, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15inline(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inline (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14inline(__pyx_self, ((PyObject *)__pyx_v_func));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14inline(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inline", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__109 = PyTuple_Pack(1, __pyx_n_s_func); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(0, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__109);
  __Pyx_GIVEREF(__pyx_tuple__109);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_15inline, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_inline, __pyx_t_2) < 0) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__110 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_inline, 146, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__110)) __PYX_ERR(0, 146, __pyx_L1_error)
+0147:         return func
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_func);
  __pyx_r = __pyx_v_func;
  goto __pyx_L0;
 0148: 
+0149:     def nogil(func):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_17nogil(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_17nogil = {"nogil", (PyCFunction)__pyx_pw_11distributed_9scheduler_17nogil, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_17nogil(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nogil (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_16nogil(__pyx_self, ((PyObject *)__pyx_v_func));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_16nogil(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nogil", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__111 = PyTuple_Pack(1, __pyx_n_s_func); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__111);
  __Pyx_GIVEREF(__pyx_tuple__111);
/* … */
    __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_17nogil, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_nogil, __pyx_t_2) < 0) __PYX_ERR(0, 149, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L8:;
  __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_nogil, 149, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) __PYX_ERR(0, 149, __pyx_L1_error)
+0150:         return func
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_func);
  __pyx_r = __pyx_v_func;
  goto __pyx_L0;
 0151: 
 0152: 
+0153: if sys.version_info < (3, 8):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_tuple__113, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L9;
  }
/* … */
  __pyx_tuple__113 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_8); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__113);
  __Pyx_GIVEREF(__pyx_tuple__113);
+0154:     try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L15_try_end;
      __pyx_L10_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L1_error;
      __pyx_L11_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      __pyx_L15_try_end:;
    }
+0155:         import pickle5 as pickle
        __pyx_t_2 = __Pyx_Import(__pyx_n_s_pickle5, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickle, __pyx_t_2) < 0) __PYX_ERR(0, 155, __pyx_L10_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0156:     except ImportError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_7) {
        __Pyx_AddTraceback("distributed.scheduler", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 156, __pyx_L12_except_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_8);
+0157:         import pickle
        __pyx_t_9 = __Pyx_Import(__pyx_n_s_pickle, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 157, __pyx_L12_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickle, __pyx_t_9) < 0) __PYX_ERR(0, 157, __pyx_L12_except_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L11_exception_handled;
      }
      goto __pyx_L12_except_error;
      __pyx_L12_except_error:;
 0158: else:
+0159:     import pickle
  /*else*/ {
    __pyx_t_8 = __Pyx_Import(__pyx_n_s_pickle, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickle, __pyx_t_8) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __pyx_L9:;
 0160: 
 0161: 
+0162: logger = logging.getLogger(__name__)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_getLogger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_name_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_2) < 0) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0163: 
 0164: 
+0165: LOG_PDB = dask.config.get("distributed.admin.pdb-on-err")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__114, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOG_PDB, __pyx_t_8) < 0) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_tuple__114 = PyTuple_Pack(1, __pyx_kp_u_distributed_admin_pdb_on_err); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__114);
  __Pyx_GIVEREF(__pyx_tuple__114);
 0166: DEFAULT_DATA_SIZE = declare(
+0167:     Py_ssize_t, parse_bytes(dask.config.get("distributed.scheduler.default-data-size"))
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_parse_bytes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__115, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_11distributed_9scheduler_DEFAULT_DATA_SIZE = __pyx_t_10;
/* … */
  __pyx_tuple__115 = PyTuple_Pack(1, __pyx_kp_u_distributed_scheduler_default_da); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__115);
  __Pyx_GIVEREF(__pyx_tuple__115);
 0168: )
 0169: UNKNOWN_TASK_DURATION = declare(
 0170:     double,
+0171:     parse_timedelta(dask.config.get("distributed.scheduler.unknown-task-duration")),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__116, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_11distributed_9scheduler_UNKNOWN_TASK_DURATION = __pyx_t_11;
/* … */
  __pyx_tuple__116 = PyTuple_Pack(1, __pyx_kp_u_distributed_scheduler_unknown_ta); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__116);
  __Pyx_GIVEREF(__pyx_tuple__116);
 0172: )
 0173: 
+0174: DEFAULT_EXTENSIONS = [
  __pyx_t_16 = PyList_New(8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_16, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_16, 1, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_16, 2, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_16, 3, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_12);
  PyList_SET_ITEM(__pyx_t_16, 4, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_13);
  PyList_SET_ITEM(__pyx_t_16, 5, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_14);
  PyList_SET_ITEM(__pyx_t_16, 6, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_15);
  PyList_SET_ITEM(__pyx_t_16, 7, __pyx_t_15);
  __pyx_t_1 = 0;
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_t_9 = 0;
  __pyx_t_12 = 0;
  __pyx_t_13 = 0;
  __pyx_t_14 = 0;
  __pyx_t_15 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT_EXTENSIONS, __pyx_t_16) < 0) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+0175:     LockExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_LockExtension); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+0176:     PublishExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_PublishExtension); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
+0177:     ReplayExceptionScheduler,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplayExceptionScheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0178:     QueueExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_QueueExtension); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
+0179:     VariableExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_VariableExtension); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
+0180:     PubSubSchedulerExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PubSubSchedulerExtension); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
+0181:     SemaphoreExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_SemaphoreExtension); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
+0182:     EventExtension,
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_EventExtension); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
 0183: ]
 0184: 
+0185: ALL_TASK_STATES = declare(
  __pyx_t_16 = PySet_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PySet_Add(__pyx_t_16, __pyx_n_u_released) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  if (PySet_Add(__pyx_t_16, __pyx_n_u_waiting) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  if (PySet_Add(__pyx_t_16, __pyx_kp_u_no_worker) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  if (PySet_Add(__pyx_t_16, __pyx_n_u_processing_2) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  if (PySet_Add(__pyx_t_16, __pyx_n_u_erred) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  if (PySet_Add(__pyx_t_16, __pyx_n_u_memory_2) < 0) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_11distributed_9scheduler_ALL_TASK_STATES);
  __Pyx_DECREF_SET(__pyx_v_11distributed_9scheduler_ALL_TASK_STATES, ((PyObject*)__pyx_t_16));
  __Pyx_GIVEREF(__pyx_t_16);
  __pyx_t_16 = 0;
 0186:     set, {"released", "waiting", "no-worker", "processing", "erred", "memory"}
 0187: )
+0188: globals()["ALL_TASK_STATES"] = ALL_TASK_STATES
  __pyx_t_16 = __Pyx_Globals(); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (unlikely(PyObject_SetItem(__pyx_t_16, __pyx_n_u_ALL_TASK_STATES, __pyx_v_11distributed_9scheduler_ALL_TASK_STATES) < 0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 0189: 
 0190: 
 0191: @final
 0192: @cclass
+0193: class ClientState:
struct __pyx_obj_11distributed_9scheduler_ClientState {
  PyObject_HEAD
  PyObject *_client_key;
  Py_hash_t _hash;
  PyObject *_wants_what;
  double _last_seen;
  PyObject *_versions;
};

 0194:     """
 0195:     A simple object holding information about a client.
 0196: 
 0197:     .. attribute:: client_key: str
 0198: 
 0199:        A unique identifier for this client.  This is generally an opaque
 0200:        string generated by the client itself.
 0201: 
 0202:     .. attribute:: wants_what: {TaskState}
 0203: 
 0204:        A set of tasks this client wants kept in memory, so that it can
 0205:        download its result when desired.  This is the reverse mapping of
 0206:        :class:`TaskState.who_wants`.
 0207: 
 0208:        Tasks are typically removed from this set when the corresponding
 0209:        object in the client's space (for example a ``Future`` or a Dask
 0210:        collection) gets garbage-collected.
 0211: 
 0212:     """
 0213: 
 0214:     _client_key: str
 0215:     _hash: Py_hash_t
 0216:     _wants_what: set
 0217:     _last_seen: double
 0218:     _versions: dict
 0219: 
+0220:     __slots__ = ("_client_key", "_hash", "_wants_what", "_last_seen", "_versions")
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11distributed_9scheduler_ClientState->tp_dict, __pyx_n_s_slots, __pyx_tuple__117) < 0) __PYX_ERR(0, 220, __pyx_L1_error)
  PyType_Modified(__pyx_ptype_11distributed_9scheduler_ClientState);
/* … */
  __pyx_tuple__117 = PyTuple_Pack(5, __pyx_n_u_client_key, __pyx_n_u_hash, __pyx_n_u_wants_what_2, __pyx_n_u_last_seen_3, __pyx_n_u_versions_2); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(0, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__117);
  __Pyx_GIVEREF(__pyx_tuple__117);
 0221: 
+0222:     def __init__(self, client: str, versions: dict = None):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_11ClientState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_11ClientState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_versions = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_client,&__pyx_n_s_versions,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject*)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_versions);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 222, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_client = ((PyObject*)values[0]);
    __pyx_v_versions = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 222, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.ClientState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_client), (&PyUnicode_Type), 1, "client", 1))) __PYX_ERR(0, 222, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_versions), (&PyDict_Type), 1, "versions", 1))) __PYX_ERR(0, 222, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState___init__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self), __pyx_v_client, __pyx_v_versions);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_11ClientState___init__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self, PyObject *__pyx_v_client, PyObject *__pyx_v_versions) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.ClientState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0223:         self._client_key = client
  __Pyx_INCREF(__pyx_v_client);
  __Pyx_GIVEREF(__pyx_v_client);
  __Pyx_GOTREF(__pyx_v_self->_client_key);
  __Pyx_DECREF(__pyx_v_self->_client_key);
  __pyx_v_self->_client_key = __pyx_v_client;
+0224:         self._hash = hash(client)
  __pyx_t_1 = PyObject_Hash(__pyx_v_client); if (unlikely(__pyx_t_1 == ((Py_hash_t)-1))) __PYX_ERR(0, 224, __pyx_L1_error)
  __pyx_v_self->_hash = __pyx_t_1;
+0225:         self._wants_what = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_wants_what);
  __Pyx_DECREF(__pyx_v_self->_wants_what);
  __pyx_v_self->_wants_what = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0226:         self._last_seen = time()
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_self->_last_seen = __pyx_t_5;
+0227:         self._versions = versions or {}
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_versions); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 227, __pyx_L1_error)
  if (!__pyx_t_6) {
  } else {
    __Pyx_INCREF(__pyx_v_versions);
    __pyx_t_2 = __pyx_v_versions;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_versions);
  __Pyx_DECREF(__pyx_v_self->_versions);
  __pyx_v_self->_versions = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 0228: 
+0229:     def __hash__(self):
/* Python wrapper */
static Py_hash_t __pyx_pw_11distributed_9scheduler_11ClientState_3__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_11distributed_9scheduler_11ClientState_3__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_2__hash__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_hash_t __pyx_pf_11distributed_9scheduler_11ClientState_2__hash__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0230:         return self._hash
  __pyx_r = __pyx_v_self->_hash;
  goto __pyx_L0;
 0231: 
+0232:     def __eq__(self, other):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_4__eq__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self), ((PyObject *)__pyx_v_other));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_4__eq__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self, PyObject *__pyx_v_other) {
  PyTypeObject *__pyx_v_typ_self = 0;
  PyTypeObject *__pyx_v_typ_other = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_other_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.ClientState.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_typ_self);
  __Pyx_XDECREF(__pyx_v_typ_other);
  __Pyx_XDECREF((PyObject *)__pyx_v_other_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0233:         typ_self: type = type(self)
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_typ_self = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+0234:         typ_other: type = type(other)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_other)));
  __pyx_v_typ_other = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_other)));
+0235:         if typ_self == typ_other:
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_typ_self), ((PyObject *)__pyx_v_typ_other), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0236:             other_cs: ClientState = other
    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 236, __pyx_L1_error)
    __pyx_t_1 = __pyx_v_other;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_other_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1);
    __pyx_t_1 = 0;
+0237:             return self._client_key == other_cs._client_key
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->_client_key, __pyx_v_other_cs->_client_key, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 237, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 0238:         else:
+0239:             return False
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }
 0240: 
+0241:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_7__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_6__repr__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_6__repr__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.ClientState.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0242:         return "<Client '%s'>" % self._client_key
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Client_s, __pyx_v_self->_client_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0243: 
+0244:     def __str__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_9__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_9__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_8__str__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_8__str__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0245:         return self._client_key
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_client_key);
  __pyx_r = __pyx_v_self->_client_key;
  goto __pyx_L0;
 0246: 
 0247:     @property
+0248:     def client_key(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_10client_key_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_10client_key_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_10client_key___get__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_10client_key___get__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0249:         return self._client_key
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_client_key);
  __pyx_r = __pyx_v_self->_client_key;
  goto __pyx_L0;
 0250: 
 0251:     @property
+0252:     def wants_what(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_10wants_what_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_10wants_what_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_10wants_what___get__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_10wants_what___get__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0253:         return self._wants_what
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_wants_what);
  __pyx_r = __pyx_v_self->_wants_what;
  goto __pyx_L0;
 0254: 
 0255:     @property
+0256:     def last_seen(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_9last_seen_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_9last_seen_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_9last_seen___get__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_9last_seen___get__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.ClientState.last_seen.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0257:         return self._last_seen
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_last_seen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0258: 
 0259:     @property
+0260:     def versions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_8versions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11ClientState_8versions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11ClientState_8versions___get__(((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11ClientState_8versions___get__(struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0261:         return self._versions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_versions);
  __pyx_r = __pyx_v_self->_versions;
  goto __pyx_L0;
 0262: 
 0263: 
 0264: @final
 0265: @cclass
+0266: class WorkerState:
struct __pyx_obj_11distributed_9scheduler_WorkerState {
  PyObject_HEAD
  struct __pyx_vtabstruct_11distributed_9scheduler_WorkerState *__pyx_vtab;
  PyObject *_actors;
  PyObject *_address;
  double _bandwidth;
  PyObject *_executing;
  PyObject *_extra;
  PyObject *_has_what;
  Py_hash_t _hash;
  double _last_seen;
  PyObject *_local_directory;
  Py_ssize_t _memory_limit;
  PyObject *_metrics;
  PyObject *_name;
  PyObject *_nanny;
  Py_ssize_t _nbytes;
  Py_ssize_t _nthreads;
  double _occupancy;
  Py_ssize_t _pid;
  PyObject *_processing;
  PyObject *_resources;
  PyObject *_services;
  PyObject *_status;
  double _time_delay;
  PyObject *_used_resources;
  PyObject *_versions;
};
/* … */
struct __pyx_vtabstruct_11distributed_9scheduler_WorkerState {
  PyObject *(*clean)(struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
  PyObject *(*identity)(struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_11distributed_9scheduler_WorkerState *__pyx_vtabptr_11distributed_9scheduler_WorkerState;
static PyObject *__pyx_f_11distributed_9scheduler_11WorkerState_clean(struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
static PyObject *__pyx_f_11distributed_9scheduler_11WorkerState_identity(struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);

 0267:     """
 0268:     A simple object holding information about a worker.
 0269: 
 0270:     .. attribute:: address: str
 0271: 
 0272:        This worker's unique key.  This can be its connected address
 0273:        (such as ``'tcp://127.0.0.1:8891'``) or an alias (such as ``'alice'``).
 0274: 
 0275:     .. attribute:: processing: {TaskState: cost}
 0276: 
 0277:        A dictionary of tasks that have been submitted to this worker.
 0278:        Each task state is asssociated with the expected cost in seconds
 0279:        of running that task, summing both the task's expected computation
 0280:        time and the expected communication time of its result.
 0281: 
 0282:        Multiple tasks may be submitted to a worker in advance and the worker
 0283:        will run them eventually, depending on its execution resources
 0284:        (but see :doc:`work-stealing`).
 0285: 
 0286:        All the tasks here are in the "processing" state.
 0287: 
 0288:        This attribute is kept in sync with :attr:`TaskState.processing_on`.
 0289: 
 0290:     .. attribute:: executing: {TaskState: duration}
 0291: 
 0292:        A dictionary of tasks that are currently being run on this worker.
 0293:        Each task state is asssociated with the duration in seconds which
 0294:        the task has been running.
 0295: 
 0296:     .. attribute:: has_what: {TaskState}
 0297: 
 0298:        The set of tasks which currently reside on this worker.
 0299:        All the tasks here are in the "memory" state.
 0300: 
 0301:        This is the reverse mapping of :class:`TaskState.who_has`.
 0302: 
 0303:     .. attribute:: nbytes: int
 0304: 
 0305:        The total memory size, in bytes, used by the tasks this worker
 0306:        holds in memory (i.e. the tasks in this worker's :attr:`has_what`).
 0307: 
 0308:     .. attribute:: nthreads: int
 0309: 
 0310:        The number of CPU threads made available on this worker.
 0311: 
 0312:     .. attribute:: resources: {str: Number}
 0313: 
 0314:        The available resources on this worker like ``{'gpu': 2}``.
 0315:        These are abstract quantities that constrain certain tasks from
 0316:        running at the same time on this worker.
 0317: 
 0318:     .. attribute:: used_resources: {str: Number}
 0319: 
 0320:        The sum of each resource used by all tasks allocated to this worker.
 0321:        The numbers in this dictionary can only be less or equal than
 0322:        those in this worker's :attr:`resources`.
 0323: 
 0324:     .. attribute:: occupancy: double
 0325: 
 0326:        The total expected runtime, in seconds, of all tasks currently
 0327:        processing on this worker.  This is the sum of all the costs in
 0328:        this worker's :attr:`processing` dictionary.
 0329: 
 0330:     .. attribute:: status: str
 0331: 
 0332:        The current status of the worker, either ``'running'`` or ``'closed'``
 0333: 
 0334:     .. attribute:: nanny: str
 0335: 
 0336:        Address of the associated Nanny, if present
 0337: 
 0338:     .. attribute:: last_seen: Py_ssize_t
 0339: 
 0340:        The last time we received a heartbeat from this worker, in local
 0341:        scheduler time.
 0342: 
 0343:     .. attribute:: actors: {TaskState}
 0344: 
 0345:        A set of all TaskStates on this worker that are actors.  This only
 0346:        includes those actors whose state actually lives on this worker, not
 0347:        actors to which this worker has a reference.
 0348: 
 0349:     """
 0350: 
 0351:     # XXX need a state field to signal active/removed?
 0352: 
 0353:     _actors: set
 0354:     _address: str
 0355:     _bandwidth: double
 0356:     _executing: dict
 0357:     _extra: dict
 0358:     _has_what: set
 0359:     _hash: Py_hash_t
 0360:     _last_seen: double
 0361:     _local_directory: str
 0362:     _memory_limit: Py_ssize_t
 0363:     _metrics: dict
 0364:     _name: object
 0365:     _nanny: str
 0366:     _nbytes: Py_ssize_t
 0367:     _nthreads: Py_ssize_t
 0368:     _occupancy: double
 0369:     _pid: Py_ssize_t
 0370:     _processing: dict
 0371:     _resources: dict
 0372:     _services: dict
 0373:     _status: Status
 0374:     _time_delay: double
 0375:     _used_resources: dict
 0376:     _versions: dict
 0377: 
 0378:     __slots__ = (
+0379:         "_actors",
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11distributed_9scheduler_WorkerState->tp_dict, __pyx_n_s_slots, __pyx_tuple__118) < 0) __PYX_ERR(0, 378, __pyx_L1_error)
  PyType_Modified(__pyx_ptype_11distributed_9scheduler_WorkerState);
/* … */
  __pyx_tuple__118 = PyTuple_Pack(24, __pyx_n_u_actors_2, __pyx_n_u_address_2, __pyx_n_u_bandwidth_2, __pyx_n_u_extra_2, __pyx_n_u_executing_2, __pyx_n_u_has_what_2, __pyx_n_u_hash, __pyx_n_u_last_seen_3, __pyx_n_u_local_directory_2, __pyx_n_u_memory_limit_2, __pyx_n_u_metrics_2, __pyx_n_u_name_4, __pyx_n_u_nanny_2, __pyx_n_u_nbytes_2, __pyx_n_u_nthreads_2, __pyx_n_u_occupancy_2, __pyx_n_u_pid_2, __pyx_n_u_processing_3, __pyx_n_u_resources_2, __pyx_n_u_services_2, __pyx_n_u_status_2, __pyx_n_u_time_delay, __pyx_n_u_used_resources_2, __pyx_n_u_versions_2); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__118);
  __Pyx_GIVEREF(__pyx_tuple__118);
 0380:         "_address",
 0381:         "_bandwidth",
 0382:         "_extra",
 0383:         "_executing",
 0384:         "_has_what",
 0385:         "_hash",
 0386:         "_last_seen",
 0387:         "_local_directory",
 0388:         "_memory_limit",
 0389:         "_metrics",
 0390:         "_name",
 0391:         "_nanny",
 0392:         "_nbytes",
 0393:         "_nthreads",
 0394:         "_occupancy",
 0395:         "_pid",
 0396:         "_processing",
 0397:         "_resources",
 0398:         "_services",
 0399:         "_status",
 0400:         "_time_delay",
 0401:         "_used_resources",
 0402:         "_versions",
 0403:     )
 0404: 
+0405:     def __init__(
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_11WorkerState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_11WorkerState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  Py_ssize_t __pyx_v_pid;
  PyObject *__pyx_v_name = 0;
  Py_ssize_t __pyx_v_nthreads;
  Py_ssize_t __pyx_v_memory_limit;
  PyObject *__pyx_v_local_directory = 0;
  PyObject *__pyx_v_services = 0;
  PyObject *__pyx_v_versions = 0;
  PyObject *__pyx_v_nanny = 0;
  PyObject *__pyx_v_extra = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_pid,&__pyx_n_s_name,&__pyx_n_s_nthreads,&__pyx_n_s_memory_limit,&__pyx_n_s_local_directory,&__pyx_n_s_services,&__pyx_n_s_versions,&__pyx_n_s_nanny,&__pyx_n_s_extra,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_11WorkerState___init__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, PyObject *__pyx_v_address, Py_ssize_t __pyx_v_pid, PyObject *__pyx_v_name, Py_ssize_t __pyx_v_nthreads, Py_ssize_t __pyx_v_memory_limit, PyObject *__pyx_v_local_directory, PyObject *__pyx_v_services, PyObject *__pyx_v_versions, PyObject *__pyx_v_nanny, PyObject *__pyx_v_extra) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0406:         self,
+0407:         address: str = None,
    values[0] = ((PyObject*)Py_None);
 0408:         pid: Py_ssize_t = 0,
+0409:         name: object = None,
    values[2] = ((PyObject *)Py_None);
 0410:         nthreads: Py_ssize_t = 0,
 0411:         memory_limit: Py_ssize_t = 0,
+0412:         local_directory: str = None,
    values[5] = ((PyObject*)Py_None);
+0413:         services: dict = None,
    values[6] = ((PyObject*)Py_None);
+0414:         versions: dict = None,
    values[7] = ((PyObject*)Py_None);
+0415:         nanny: str = None,
    values[8] = ((PyObject*)Py_None);
+0416:         extra: dict = None,
    values[9] = ((PyObject*)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pid);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nthreads);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory_limit);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_directory);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_services);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_versions);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nanny);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extra);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 405, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = ((PyObject*)values[0]);
    if (values[1]) {
      __pyx_v_pid = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_pid == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error)
    } else {
      __pyx_v_pid = ((Py_ssize_t)0);
    }
    __pyx_v_name = values[2];
    if (values[3]) {
      __pyx_v_nthreads = __Pyx_PyIndex_AsSsize_t(values[3]); if (unlikely((__pyx_v_nthreads == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 410, __pyx_L3_error)
    } else {
      __pyx_v_nthreads = ((Py_ssize_t)0);
    }
    if (values[4]) {
      __pyx_v_memory_limit = __Pyx_PyIndex_AsSsize_t(values[4]); if (unlikely((__pyx_v_memory_limit == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 411, __pyx_L3_error)
    } else {
      __pyx_v_memory_limit = ((Py_ssize_t)0);
    }
    __pyx_v_local_directory = ((PyObject*)values[5]);
    __pyx_v_services = ((PyObject*)values[6]);
    __pyx_v_versions = ((PyObject*)values[7]);
    __pyx_v_nanny = ((PyObject*)values[8]);
    __pyx_v_extra = ((PyObject*)values[9]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 405, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_address), (&PyUnicode_Type), 1, "address", 1))) __PYX_ERR(0, 407, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_local_directory), (&PyUnicode_Type), 1, "local_directory", 1))) __PYX_ERR(0, 412, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_services), (&PyDict_Type), 1, "services", 1))) __PYX_ERR(0, 413, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_versions), (&PyDict_Type), 1, "versions", 1))) __PYX_ERR(0, 414, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nanny), (&PyUnicode_Type), 1, "nanny", 1))) __PYX_ERR(0, 415, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_extra), (&PyDict_Type), 1, "extra", 1))) __PYX_ERR(0, 416, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState___init__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self), __pyx_v_address, __pyx_v_pid, __pyx_v_name, __pyx_v_nthreads, __pyx_v_memory_limit, __pyx_v_local_directory, __pyx_v_services, __pyx_v_versions, __pyx_v_nanny, __pyx_v_extra);
 0417:     ):
+0418:         self._address = address
  __Pyx_INCREF(__pyx_v_address);
  __Pyx_GIVEREF(__pyx_v_address);
  __Pyx_GOTREF(__pyx_v_self->_address);
  __Pyx_DECREF(__pyx_v_self->_address);
  __pyx_v_self->_address = __pyx_v_address;
+0419:         self._pid = pid
  __pyx_v_self->_pid = __pyx_v_pid;
+0420:         self._name = name
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  __Pyx_GOTREF(__pyx_v_self->_name);
  __Pyx_DECREF(__pyx_v_self->_name);
  __pyx_v_self->_name = __pyx_v_name;
+0421:         self._nthreads = nthreads
  __pyx_v_self->_nthreads = __pyx_v_nthreads;
+0422:         self._memory_limit = memory_limit
  __pyx_v_self->_memory_limit = __pyx_v_memory_limit;
+0423:         self._local_directory = local_directory
  __Pyx_INCREF(__pyx_v_local_directory);
  __Pyx_GIVEREF(__pyx_v_local_directory);
  __Pyx_GOTREF(__pyx_v_self->_local_directory);
  __Pyx_DECREF(__pyx_v_self->_local_directory);
  __pyx_v_self->_local_directory = __pyx_v_local_directory;
+0424:         self._services = services or {}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_services); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 424, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_services);
    __pyx_t_1 = __pyx_v_services;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_services);
  __Pyx_DECREF(__pyx_v_self->_services);
  __pyx_v_self->_services = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0425:         self._versions = versions or {}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_versions); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 425, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_versions);
    __pyx_t_1 = __pyx_v_versions;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L5_bool_binop_done:;
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_versions);
  __Pyx_DECREF(__pyx_v_self->_versions);
  __pyx_v_self->_versions = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0426:         self._nanny = nanny
  __Pyx_INCREF(__pyx_v_nanny);
  __Pyx_GIVEREF(__pyx_v_nanny);
  __Pyx_GOTREF(__pyx_v_self->_nanny);
  __Pyx_DECREF(__pyx_v_self->_nanny);
  __pyx_v_self->_nanny = __pyx_v_nanny;
 0427: 
+0428:         self._hash = hash(address)
  __pyx_t_4 = PyObject_Hash(__pyx_v_address); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(0, 428, __pyx_L1_error)
  __pyx_v_self->_hash = __pyx_t_4;
+0429:         self._status = Status.running
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_running); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_status);
  __Pyx_DECREF(__pyx_v_self->_status);
  __pyx_v_self->_status = __pyx_t_3;
  __pyx_t_3 = 0;
+0430:         self._nbytes = 0
  __pyx_v_self->_nbytes = 0;
+0431:         self._occupancy = 0
  __pyx_v_self->_occupancy = 0.0;
+0432:         self._metrics = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_metrics);
  __Pyx_DECREF(__pyx_v_self->_metrics);
  __pyx_v_self->_metrics = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0433:         self._last_seen = 0
  __pyx_v_self->_last_seen = 0.0;
+0434:         self._time_delay = 0
  __pyx_v_self->_time_delay = 0.0;
+0435:         self._bandwidth = float(
  __pyx_t_8 = __Pyx_PyObject_AsDouble(__pyx_t_3); if (unlikely(__pyx_t_8 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_self->_bandwidth = __pyx_t_8;
+0436:             parse_bytes(dask.config.get("distributed.scheduler.bandwidth"))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parse_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_dask); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_config); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_kp_u_distributed_scheduler_bandwidth) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_u_distributed_scheduler_bandwidth);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0437:         )
 0438: 
+0439:         self._actors = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_actors);
  __Pyx_DECREF(__pyx_v_self->_actors);
  __pyx_v_self->_actors = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0440:         self._has_what = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_has_what);
  __Pyx_DECREF(__pyx_v_self->_has_what);
  __pyx_v_self->_has_what = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0441:         self._processing = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_processing);
  __Pyx_DECREF(__pyx_v_self->_processing);
  __pyx_v_self->_processing = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0442:         self._executing = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_executing);
  __Pyx_DECREF(__pyx_v_self->_executing);
  __pyx_v_self->_executing = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0443:         self._resources = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_resources);
  __Pyx_DECREF(__pyx_v_self->_resources);
  __pyx_v_self->_resources = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0444:         self._used_resources = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_used_resources);
  __Pyx_DECREF(__pyx_v_self->_used_resources);
  __pyx_v_self->_used_resources = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 0445: 
+0446:         self._extra = extra or {}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 446, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_extra);
    __pyx_t_3 = __pyx_v_extra;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_L7_bool_binop_done:;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_extra);
  __Pyx_DECREF(__pyx_v_self->_extra);
  __pyx_v_self->_extra = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 0447: 
+0448:     def __hash__(self):
/* Python wrapper */
static Py_hash_t __pyx_pw_11distributed_9scheduler_11WorkerState_3__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_11distributed_9scheduler_11WorkerState_3__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_2__hash__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_hash_t __pyx_pf_11distributed_9scheduler_11WorkerState_2__hash__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0449:         return self._hash
  __pyx_r = __pyx_v_self->_hash;
  goto __pyx_L0;
 0450: 
+0451:     def __eq__(self, other):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_4__eq__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self), ((PyObject *)__pyx_v_other));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_4__eq__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, PyObject *__pyx_v_other) {
  PyTypeObject *__pyx_v_typ_self = 0;
  PyTypeObject *__pyx_v_typ_other = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_other_ws = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_typ_self);
  __Pyx_XDECREF(__pyx_v_typ_other);
  __Pyx_XDECREF((PyObject *)__pyx_v_other_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0452:         typ_self: type = type(self)
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_typ_self = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+0453:         typ_other: type = type(other)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_other)));
  __pyx_v_typ_other = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_other)));
+0454:         if typ_self == typ_other:
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_typ_self), ((PyObject *)__pyx_v_typ_other), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 454, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0455:             other_ws: WorkerState = other
    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 455, __pyx_L1_error)
    __pyx_t_1 = __pyx_v_other;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_other_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
    __pyx_t_1 = 0;
+0456:             return self._address == other_ws._address
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->_address, __pyx_v_other_ws->_address, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 456, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 0457:         else:
+0458:             return False
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }
 0459: 
 0460:     @property
+0461:     def actors(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6actors_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6actors_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6actors___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_6actors___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0462:         return self._actors
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_actors);
  __pyx_r = __pyx_v_self->_actors;
  goto __pyx_L0;
 0463: 
 0464:     @property
+0465:     def address(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7address_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7address_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_7address___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_7address___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0466:         return self._address
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_address);
  __pyx_r = __pyx_v_self->_address;
  goto __pyx_L0;
 0467: 
 0468:     @property
+0469:     def bandwidth(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9bandwidth_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9bandwidth_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9bandwidth___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_9bandwidth___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.bandwidth.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0470:         return self._bandwidth
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_bandwidth); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0471: 
 0472:     @property
+0473:     def executing(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9executing_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9executing_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9executing___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_9executing___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0474:         return self._executing
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_executing);
  __pyx_r = __pyx_v_self->_executing;
  goto __pyx_L0;
 0475: 
 0476:     @property
+0477:     def extra(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5extra_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5extra_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_5extra___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_5extra___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0478:         return self._extra
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_extra);
  __pyx_r = __pyx_v_self->_extra;
  goto __pyx_L0;
 0479: 
 0480:     @property
+0481:     def has_what(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8has_what_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8has_what_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_8has_what___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_8has_what___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0482:         return self._has_what
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_has_what);
  __pyx_r = __pyx_v_self->_has_what;
  goto __pyx_L0;
 0483: 
 0484:     @property
+0485:     def host(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_4host_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_4host_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_4host___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_4host___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.host.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0486:         return get_address_host(self.address)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0487: 
 0488:     @property
+0489:     def last_seen(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9last_seen_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9last_seen_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9last_seen___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_9last_seen___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.last_seen.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0490:         return self._last_seen
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_last_seen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0491: 
 0492:     @property
+0493:     def local_directory(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_15local_directory_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_15local_directory_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_15local_directory___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_15local_directory___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0494:         return self._local_directory
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_local_directory);
  __pyx_r = __pyx_v_self->_local_directory;
  goto __pyx_L0;
 0495: 
 0496:     @property
+0497:     def memory_limit(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_12memory_limit_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_12memory_limit_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_12memory_limit___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_12memory_limit___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.memory_limit.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0498:         return self._memory_limit
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_memory_limit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0499: 
 0500:     @property
+0501:     def metrics(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7metrics_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7metrics_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_7metrics___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_7metrics___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0502:         return self._metrics
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_metrics);
  __pyx_r = __pyx_v_self->_metrics;
  goto __pyx_L0;
 0503: 
 0504:     @property
+0505:     def name(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_4name___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_4name___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0506:         return self._name
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_name);
  __pyx_r = __pyx_v_self->_name;
  goto __pyx_L0;
 0507: 
 0508:     @property
+0509:     def nanny(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5nanny_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_5nanny_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_5nanny___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_5nanny___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0510:         return self._nanny
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_nanny);
  __pyx_r = __pyx_v_self->_nanny;
  goto __pyx_L0;
 0511: 
 0512:     @property
+0513:     def nbytes(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6nbytes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6nbytes___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_6nbytes___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0514:         return self._nbytes
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nbytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0515: 
 0516:     @nbytes.setter
+0517:     def nbytes(self, v: Py_ssize_t):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_11WorkerState_6nbytes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_11WorkerState_6nbytes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v) {
  Py_ssize_t __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_v); {
    __pyx_v_v = __Pyx_PyIndex_AsSsize_t(__pyx_arg_v); if (unlikely((__pyx_v_v == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 517, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.nbytes.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6nbytes_2__set__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self), ((Py_ssize_t)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_11WorkerState_6nbytes_2__set__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, Py_ssize_t __pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0518:         self._nbytes = v
  __pyx_v_self->_nbytes = __pyx_v_v;
 0519: 
 0520:     @property
+0521:     def nthreads(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8nthreads_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8nthreads_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_8nthreads___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_8nthreads___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.nthreads.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0522:         return self._nthreads
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nthreads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0523: 
 0524:     @property
+0525:     def occupancy(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9occupancy_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9occupancy_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9occupancy___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_9occupancy___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.occupancy.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0526:         return self._occupancy
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_occupancy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0527: 
 0528:     @occupancy.setter
+0529:     def occupancy(self, v: double):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_11WorkerState_9occupancy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_11WorkerState_9occupancy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v) {
  double __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_v); {
    __pyx_v_v = __pyx_PyFloat_AsDouble(__pyx_arg_v); if (unlikely((__pyx_v_v == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.occupancy.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9occupancy_2__set__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self), ((double)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_11WorkerState_9occupancy_2__set__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, double __pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0530:         self._occupancy = v
  __pyx_v_self->_occupancy = __pyx_v_v;
 0531: 
 0532:     @property
+0533:     def pid(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_3pid_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_3pid_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_3pid___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_3pid___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.pid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0534:         return self._pid
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_pid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0535: 
 0536:     @property
+0537:     def processing(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_10processing_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_10processing_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_10processing___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_10processing___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0538:         return self._processing
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_processing);
  __pyx_r = __pyx_v_self->_processing;
  goto __pyx_L0;
 0539: 
 0540:     @property
+0541:     def resources(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9resources_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9resources_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_9resources___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_9resources___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0542:         return self._resources
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_resources);
  __pyx_r = __pyx_v_self->_resources;
  goto __pyx_L0;
 0543: 
 0544:     @property
+0545:     def services(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8services_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8services_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_8services___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_8services___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0546:         return self._services
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_services);
  __pyx_r = __pyx_v_self->_services;
  goto __pyx_L0;
 0547: 
 0548:     @property
+0549:     def status(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6status_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6status_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6status___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_6status___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0550:         return self._status
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_status);
  __pyx_r = __pyx_v_self->_status;
  goto __pyx_L0;
 0551: 
 0552:     @status.setter
+0553:     def status(self, new_status):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_11WorkerState_6status_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_new_status); /*proto*/
static int __pyx_pw_11distributed_9scheduler_11WorkerState_6status_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_new_status) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6status_2__set__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self), ((PyObject *)__pyx_v_new_status));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_11WorkerState_6status_2__set__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, PyObject *__pyx_v_new_status) {
  PyObject *__pyx_v_corresponding_enum_variants = NULL;
  PyObject *__pyx_7genexpr__pyx_v_s = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.status.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_corresponding_enum_variants);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_s);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0554:         if isinstance(new_status, Status):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_new_status, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 554, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+0555:             self._status = new_status
    __Pyx_INCREF(__pyx_v_new_status);
    __Pyx_GIVEREF(__pyx_v_new_status);
    __Pyx_GOTREF(__pyx_v_self->_status);
    __Pyx_DECREF(__pyx_v_self->_status);
    __pyx_v_self->_status = __pyx_v_new_status;
+0556:         elif isinstance(new_status, str) or new_status is None:
  __pyx_t_2 = PyUnicode_Check(__pyx_v_new_status); 
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_new_status == Py_None);
  __pyx_t_2 = (__pyx_t_4 != 0);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (likely(__pyx_t_3)) {
/* … */
    goto __pyx_L3;
  }
+0557:             corresponding_enum_variants = [s for s in Status if s.value == new_status]
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
        __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
        __pyx_t_8 = NULL;
      } else {
        __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 557, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 557, __pyx_L8_error)
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      for (;;) {
        if (likely(!__pyx_t_8)) {
          if (likely(PyList_CheckExact(__pyx_t_6))) {
            if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 557, __pyx_L8_error)
            #else
            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            #endif
          } else {
            if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 557, __pyx_L8_error)
            #else
            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            #endif
          }
        } else {
          __pyx_t_5 = __pyx_t_8(__pyx_t_6);
          if (unlikely(!__pyx_t_5)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 557, __pyx_L8_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_5);
        }
        __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_s, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_7genexpr__pyx_v_s, __pyx_n_s_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_status, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 557, __pyx_L8_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 557, __pyx_L8_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (__pyx_t_3) {
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_7genexpr__pyx_v_s))) __PYX_ERR(0, 557, __pyx_L8_error)
        }
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_s); __pyx_7genexpr__pyx_v_s = 0;
      goto __pyx_L12_exit_scope;
      __pyx_L8_error:;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_s); __pyx_7genexpr__pyx_v_s = 0;
      goto __pyx_L1_error;
      __pyx_L12_exit_scope:;
    } /* exit inner scope */
    __pyx_v_corresponding_enum_variants = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+0558:             assert len(corresponding_enum_variants) == 1
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = PyList_GET_SIZE(__pyx_v_corresponding_enum_variants); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 558, __pyx_L1_error)
      if (unlikely(!((__pyx_t_7 == 1) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 558, __pyx_L1_error)
      }
    }
    #endif
+0559:             self._status = corresponding_enum_variants[0]
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_corresponding_enum_variants, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->_status);
    __Pyx_DECREF(__pyx_v_self->_status);
    __pyx_v_self->_status = __pyx_t_1;
    __pyx_t_1 = 0;
 0560:         else:
+0561:             raise TypeError(f"expected Status or str, got {new_status}")
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_new_status, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_expected_Status_or_str_got, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 561, __pyx_L1_error)
  }
  __pyx_L3:;
 0562: 
 0563:     @property
+0564:     def time_delay(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_10time_delay_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_10time_delay_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_10time_delay___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_10time_delay___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.time_delay.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0565:         return self._time_delay
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_time_delay); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0566: 
 0567:     @property
+0568:     def used_resources(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_14used_resources_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_14used_resources_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_14used_resources___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_14used_resources___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0569:         return self._used_resources
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_used_resources);
  __pyx_r = __pyx_v_self->_used_resources;
  goto __pyx_L0;
 0570: 
 0571:     @property
+0572:     def versions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8versions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_8versions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_8versions___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_8versions___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0573:         return self._versions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_versions);
  __pyx_r = __pyx_v_self->_versions;
  goto __pyx_L0;
 0574: 
 0575:     @ccall
+0576:     def clean(self):
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7clean(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_11WorkerState_clean(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_8genexpr1__pyx_v_ts = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_cost = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_8genexpr2__pyx_v_ts = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_duration = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clean", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.clean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr1__pyx_v_ts);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_cost);
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr2__pyx_v_ts);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7clean(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11distributed_9scheduler_11WorkerState_6clean[] = " Return a version of this object that is appropriate for serialization ";
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_7clean(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clean (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6clean(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_6clean(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clean", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_11WorkerState_clean(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.clean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0577:         """ Return a version of this object that is appropriate for serialization """
+0578:         ws: WorkerState = WorkerState(
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11distributed_9scheduler_WorkerState), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
  __pyx_t_2 = 0;
+0579:             address=self._address,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_address, __pyx_v_self->_address) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
+0580:             pid=self._pid,
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_pid); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pid, __pyx_t_2) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0581:             name=self._name,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_v_self->_name) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
+0582:             nthreads=self._nthreads,
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_nthreads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nthreads, __pyx_t_2) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0583:             memory_limit=self._memory_limit,
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_memory_limit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_memory_limit, __pyx_t_2) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0584:             local_directory=self._local_directory,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_local_directory, __pyx_v_self->_local_directory) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
+0585:             services=self._services,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_services, __pyx_v_self->_services) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
+0586:             nanny=self._nanny,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nanny, __pyx_v_self->_nanny) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
+0587:             extra=self._extra,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_extra, __pyx_v_self->_extra) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
 0588:         )
 0589:         ts: TaskState
+0590:         ws._processing = {ts._key: cost for ts, cost in self._processing.items()}
  { /* enter inner scope */
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 590, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = 0;
    if (unlikely(__pyx_v_self->_processing == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 590, __pyx_L5_error)
    }
    __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_self->_processing, 1, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 590, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_6;
    __pyx_t_6 = 0;
    while (1) {
      __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, &__pyx_t_7, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_8 == 0)) break;
      if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 590, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 590, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
      __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_cost, __pyx_t_7);
      __pyx_t_7 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_8genexpr1__pyx_v_ts->_key, (PyObject*)__pyx_8genexpr1__pyx_v_cost))) __PYX_ERR(0, 590, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_cost); __pyx_8genexpr1__pyx_v_cost = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr1__pyx_v_ts); __pyx_8genexpr1__pyx_v_ts = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_cost); __pyx_8genexpr1__pyx_v_cost = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr1__pyx_v_ts); __pyx_8genexpr1__pyx_v_ts = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_ws->_processing);
  __Pyx_DECREF(__pyx_v_ws->_processing);
  __pyx_v_ws->_processing = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0591:         ws._executing = {ts._key: duration for ts, duration in self._executing.items()}
  { /* enter inner scope */
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 591, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = 0;
    if (unlikely(__pyx_v_self->_executing == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 591, __pyx_L11_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_self->_executing, 1, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 591, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_4, &__pyx_t_7, &__pyx_t_6, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_8 == 0)) break;
      if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 591, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 591, __pyx_L11_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_7));
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_duration, __pyx_t_6);
      __pyx_t_6 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_8genexpr2__pyx_v_ts->_key, (PyObject*)__pyx_8genexpr2__pyx_v_duration))) __PYX_ERR(0, 591, __pyx_L11_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_duration); __pyx_8genexpr2__pyx_v_duration = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr2__pyx_v_ts); __pyx_8genexpr2__pyx_v_ts = 0;
    goto __pyx_L14_exit_scope;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_duration); __pyx_8genexpr2__pyx_v_duration = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr2__pyx_v_ts); __pyx_8genexpr2__pyx_v_ts = 0;
    goto __pyx_L1_error;
    __pyx_L14_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_ws->_executing);
  __Pyx_DECREF(__pyx_v_ws->_executing);
  __pyx_v_ws->_executing = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0592:         return ws
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_ws));
  __pyx_r = ((PyObject *)__pyx_v_ws);
  goto __pyx_L0;
 0593: 
+0594:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_9__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_8__repr__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_8__repr__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0595:         return "<Worker %r, name: %s, memory: %d, processing: %d>" % (
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Worker);
  __pyx_t_2 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_Worker);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Worker);
/* … */
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 9, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+0596:             self._address,
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_self->_address), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_name_2);
  __pyx_t_2 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_name_2);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_name_2);
+0597:             self._name,
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_v_self->_name), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_memory);
  __pyx_t_2 += 10;
  __Pyx_GIVEREF(__pyx_kp_u_memory);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_memory);
+0598:             len(self._has_what),
  __pyx_t_4 = __pyx_v_self->_has_what;
  __Pyx_INCREF(__pyx_t_4);
  if (unlikely(__pyx_t_4 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 598, __pyx_L1_error)
  }
  __pyx_t_5 = PySet_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_5, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_processing);
  __pyx_t_2 += 14;
  __Pyx_GIVEREF(__pyx_kp_u_processing);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u_processing);
+0599:             len(self._processing),
  __pyx_t_4 = __pyx_v_self->_processing;
  __Pyx_INCREF(__pyx_t_4);
  if (unlikely(__pyx_t_4 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 599, __pyx_L1_error)
  }
  __pyx_t_5 = PyDict_Size(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 599, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_5, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__3);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__3);
  PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_kp_u__3);
 0600:         )
 0601: 
 0602:     @ccall
 0603:     @exceptval(check=False)
+0604:     def identity(self) -> dict:
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_11identity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_11WorkerState_identity(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("identity", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.identity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_11identity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_11identity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("identity (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_10identity(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_10identity(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("identity", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_11WorkerState_identity(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.identity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0605:         return {
  __Pyx_XDECREF(__pyx_r);
+0606:             "type": "Worker",
  __pyx_t_2 = __Pyx_PyDict_NewPresized(12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_type, __pyx_n_u_Worker_2) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0607:             "id": self._name,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_id, __pyx_v_self->_name) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0608:             "host": self.host,
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_host); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_host, __pyx_t_3) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0609:             "resources": self._resources,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_resources, __pyx_v_self->_resources) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0610:             "local_directory": self._local_directory,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_local_directory, __pyx_v_self->_local_directory) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0611:             "name": self._name,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_name, __pyx_v_self->_name) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0612:             "nthreads": self._nthreads,
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_nthreads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_nthreads, __pyx_t_3) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0613:             "memory_limit": self._memory_limit,
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_memory_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_memory_limit, __pyx_t_3) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0614:             "last_seen": self._last_seen,
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->_last_seen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_last_seen, __pyx_t_3) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0615:             "services": self._services,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_services, __pyx_v_self->_services) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0616:             "metrics": self._metrics,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_metrics, __pyx_v_self->_metrics) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
+0617:             "nanny": self._nanny,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_nanny, __pyx_v_self->_nanny) < 0) __PYX_ERR(0, 606, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
+0618:             **self._extra,
  if (unlikely(__pyx_v_self->_extra == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 618, __pyx_L1_error)
  }
  if (unlikely(PyDict_Update(__pyx_t_1, __pyx_v_self->_extra) < 0)) {
    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseMappingExpectedError(__pyx_v_self->_extra);
    __PYX_ERR(0, 618, __pyx_L1_error)
  }
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0619:         }
 0620: 
 0621:     @property
+0622:     def ncores(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6ncores_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_11WorkerState_6ncores_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_11WorkerState_6ncores___get__(((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_11WorkerState_6ncores___get__(struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.WorkerState.ncores.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0623:         warnings.warn("WorkerState.ncores has moved to WorkerState.nthreads")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_warnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_WorkerState_ncores_has_moved_to) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_WorkerState_ncores_has_moved_to);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0624:         return self._nthreads
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nthreads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0625: 
 0626: 
 0627: @final
 0628: @cclass
+0629: class TaskPrefix:
struct __pyx_obj_11distributed_9scheduler_TaskPrefix {
  PyObject_HEAD
  PyObject *_name;
  PyObject *_all_durations;
  double _duration_average;
  Py_ssize_t _suspicious;
  PyObject *_groups;
};

 0630:     """Collection tracking all tasks within a group
 0631: 
 0632:     Keys often have a structure like ``("x-123", 0)``
 0633:     A group takes the first section, like ``"x"``
 0634: 
 0635:     .. attribute:: name: str
 0636: 
 0637:        The name of a group of tasks.
 0638:        For a task like ``("x-123", 0)`` this is the text ``"x"``
 0639: 
 0640:     .. attribute:: states: Dict[str, int]
 0641: 
 0642:        The number of tasks in each state,
 0643:        like ``{"memory": 10, "processing": 3, "released": 4, ...}``
 0644: 
 0645:     .. attribute:: duration_average: float
 0646: 
 0647:        An exponentially weighted moving average duration of all tasks with this prefix
 0648: 
 0649:     .. attribute:: suspicious: int
 0650: 
 0651:        Numbers of times a task was marked as suspicious with this prefix
 0652: 
 0653: 
 0654:     See Also
 0655:     --------
 0656:     TaskGroup
 0657:     """
 0658: 
 0659:     _name: str
 0660:     _all_durations: object
 0661:     _duration_average: double
 0662:     _suspicious: Py_ssize_t
 0663:     _groups: list
 0664: 
+0665:     def __init__(self, name: str):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_10TaskPrefix_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_10TaskPrefix_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 665, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 665, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 1, "name", 1))) __PYX_ERR(0, 665, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix___init__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self), __pyx_v_name);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_10TaskPrefix___init__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_task_durations = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_task_durations);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0666:         self._name = name
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  __Pyx_GOTREF(__pyx_v_self->_name);
  __Pyx_DECREF(__pyx_v_self->_name);
  __pyx_v_self->_name = __pyx_v_name;
+0667:         self._groups = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_groups);
  __Pyx_DECREF(__pyx_v_self->_groups);
  __pyx_v_self->_groups = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0668: 
 0669:         # store timings for each prefix-action
+0670:         self._all_durations = defaultdict(float)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)(&PyFloat_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyFloat_Type)));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_all_durations);
  __Pyx_DECREF(__pyx_v_self->_all_durations);
  __pyx_v_self->_all_durations = __pyx_t_1;
  __pyx_t_1 = 0;
 0671: 
+0672:         task_durations = dask.config.get("distributed.scheduler.default-task-durations")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_default_ta) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_default_ta);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_task_durations = __pyx_t_1;
  __pyx_t_1 = 0;
+0673:         if self._name in task_durations:
  __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_v_self->_name, __pyx_v_task_durations, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 673, __pyx_L1_error)
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+0674:             self._duration_average = parse_timedelta(task_durations[self._name])
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_task_durations, __pyx_v_self->_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 674, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_self->_duration_average = __pyx_t_7;
 0675:         else:
+0676:             self._duration_average = -1
  /*else*/ {
    __pyx_v_self->_duration_average = -1.0;
  }
  __pyx_L3:;
+0677:         self._suspicious = 0
  __pyx_v_self->_suspicious = 0;
 0678: 
 0679:     @property
+0680:     def name(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_4name___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_4name___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0681:         return self._name
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_name);
  __pyx_r = __pyx_v_self->_name;
  goto __pyx_L0;
 0682: 
 0683:     @property
+0684:     def all_durations(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_13all_durations_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_13all_durations_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_13all_durations___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_13all_durations___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0685:         return self._all_durations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_all_durations);
  __pyx_r = __pyx_v_self->_all_durations;
  goto __pyx_L0;
 0686: 
 0687:     @property
+0688:     def duration_average(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_16duration_average_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_16duration_average_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_16duration_average___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_16duration_average___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.duration_average.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0689:         return self._duration_average
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_duration_average); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0690: 
 0691:     @property
+0692:     def suspicious(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_10suspicious_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_10suspicious_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_10suspicious___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_10suspicious___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.suspicious.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0693:         return self._suspicious
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_suspicious); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0694: 
 0695:     @property
+0696:     def groups(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6groups_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6groups_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_6groups___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_6groups___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0697:         return self._groups
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_groups);
  __pyx_r = __pyx_v_self->_groups;
  goto __pyx_L0;
 0698: 
 0699:     @property
+0700:     def states(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6states_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6states_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_6states___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_6states___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_8genexpr3__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.states.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr3__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0701:         tg: TaskGroup
+0702:         return merge_with(sum, [tg._states for tg in self._groups])
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_merge_with); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 702, __pyx_L5_error)
    }
    __pyx_t_4 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
    for (;;) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 702, __pyx_L5_error)
      #else
      __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 702, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 702, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_6));
      __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_8genexpr3__pyx_v_tg->_states))) __PYX_ERR(0, 702, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr3__pyx_v_tg); __pyx_8genexpr3__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr3__pyx_v_tg); __pyx_8genexpr3__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_builtin_sum, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_builtin_sum, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_builtin_sum);
    __Pyx_GIVEREF(__pyx_builtin_sum);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_builtin_sum);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0703: 
 0704:     @property
+0705:     def active(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6active_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_6active_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_6active___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_6active___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_8genexpr4__pyx_v_tg = NULL;
  PyObject *__pyx_8genexpr5__pyx_v_k = NULL;
  PyObject *__pyx_8genexpr5__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.active.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr4__pyx_v_tg);
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k);
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0706:         tg: TaskGroup
+0707:         return [
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
+0708:             tg
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_8genexpr4__pyx_v_tg))) __PYX_ERR(0, 707, __pyx_L5_error)
+0709:             for tg in self._groups
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 709, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 709, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 709, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_4));
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr4__pyx_v_tg); __pyx_8genexpr4__pyx_v_tg = 0;
    goto __pyx_L16_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr4__pyx_v_tg); __pyx_8genexpr4__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L16_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+0710:             if any([v != 0 for k, v in tg._states.items() if k != "forgotten"])
      { /* enter inner scope */
        __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = 0;
        if (unlikely(__pyx_8genexpr4__pyx_v_tg->_states == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
          __PYX_ERR(0, 710, __pyx_L11_error)
        }
        __pyx_t_9 = __Pyx_dict_iterator(__pyx_8genexpr4__pyx_v_tg->_states, 1, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 710, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_XDECREF(__pyx_t_5);
        __pyx_t_5 = __pyx_t_9;
        __pyx_t_9 = 0;
        while (1) {
          __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_7, &__pyx_t_6, &__pyx_t_9, &__pyx_t_10, NULL, __pyx_t_8);
          if (unlikely(__pyx_t_11 == 0)) break;
          if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 710, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_k, __pyx_t_9);
          __pyx_t_9 = 0;
          __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_v, __pyx_t_10);
          __pyx_t_10 = 0;
          __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_8genexpr5__pyx_v_k, __pyx_n_u_forgotten, Py_NE)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 710, __pyx_L11_error)
          if (__pyx_t_12) {
            __pyx_t_10 = __Pyx_PyInt_NeObjC(__pyx_8genexpr5__pyx_v_v, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 710, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_10);
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 710, __pyx_L11_error)
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k); __pyx_8genexpr5__pyx_v_k = 0;
        __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v); __pyx_8genexpr5__pyx_v_v = 0;
        goto __pyx_L15_exit_scope;
        __pyx_L11_error:;
        __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k); __pyx_8genexpr5__pyx_v_k = 0;
        __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v); __pyx_8genexpr5__pyx_v_v = 0;
        goto __pyx_L5_error;
        __pyx_L15_exit_scope:;
      } /* exit inner scope */
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 710, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_12) {
/* … */
      }
 0711:         ]
 0712: 
 0713:     @property
+0714:     def active_states(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_13active_states_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_13active_states_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_13active_states___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_13active_states___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_8genexpr6__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.active_states.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr6__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0715:         tg: TaskGroup
+0716:         return merge_with(sum, [tg._states for tg in self.active])
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_merge_with); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 716, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_active); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 716, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 716, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 716, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 716, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_7(__pyx_t_5);
        if (unlikely(!__pyx_t_4)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 716, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 716, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_4));
      __pyx_t_4 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_8genexpr6__pyx_v_tg->_states))) __PYX_ERR(0, 716, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr6__pyx_v_tg); __pyx_8genexpr6__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr6__pyx_v_tg); __pyx_8genexpr6__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_builtin_sum, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_builtin_sum, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_builtin_sum);
    __Pyx_GIVEREF(__pyx_builtin_sum);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_8, __pyx_builtin_sum);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_8, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0717: 
+0718:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_3__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_2__repr__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_10TaskPrefix_8__repr___2generator25(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_2__repr__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct____repr__(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct____repr__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 718, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self;
};

+0719:         return (
  __Pyx_XDECREF(__pyx_r);
 0720:             "<"
+0721:             + self._name
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u__5, __pyx_cur_scope->__pyx_v_self->_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+0722:             + ": "
  __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_t_1, __pyx_kp_u__4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0723:             + ", ".join(
  __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0724:                 "%s: %d" % (k, v) for (k, v) in sorted(self.states.items()) if v
static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_8__repr___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_1_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_1_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_1_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 724, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_10TaskPrefix_8__repr___2generator25, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 724, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_10TaskPrefix_8__repr___2generator25(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 724, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 724, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self), __pyx_n_s_states); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_5 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 724, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 724, __pyx_L1_error)
  }
  __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 724, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 724, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 724, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_v); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 724, __pyx_L1_error)
    if (__pyx_t_9) {
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_cur_scope->__pyx_v_k), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_kp_u__4);
      __pyx_t_10 += 2;
      __Pyx_GIVEREF(__pyx_kp_u__4);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__4);
      __pyx_t_3 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_cur_scope->__pyx_v_v), __pyx_n_u_d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 724, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_10TaskPrefix_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_1_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct____repr__ *__pyx_outer_scope;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
};

 0725:             )
+0726:             + ">"
  __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_t_3, __pyx_kp_u__3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0727:         )
 0728: 
 0729:     @property
+0730:     def nbytes_in_memory(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_16nbytes_in_memory_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_16nbytes_in_memory_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_16nbytes_in_memory___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_16nbytes_in_memory___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_8genexpr8__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.nbytes_in_memory.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr8__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0731:         tg: TaskGroup
+0732:         return sum([tg._nbytes_in_memory for tg in self._groups])
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 732, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 732, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 732, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr8__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_8genexpr8__pyx_v_tg->_nbytes_in_memory); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 732, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr8__pyx_v_tg); __pyx_8genexpr8__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr8__pyx_v_tg); __pyx_8genexpr8__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0733: 
 0734:     @property
+0735:     def nbytes_total(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_12nbytes_total_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_12nbytes_total_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_12nbytes_total___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_12nbytes_total___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_8genexpr9__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.nbytes_total.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_8genexpr9__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0736:         tg: TaskGroup
+0737:         return sum([tg._nbytes_total for tg in self._groups])
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 737, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 737, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 737, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_8genexpr9__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_8genexpr9__pyx_v_tg->_nbytes_total); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 737, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr9__pyx_v_tg); __pyx_8genexpr9__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_8genexpr9__pyx_v_tg); __pyx_8genexpr9__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0738: 
+0739:     def __len__(self):
/* Python wrapper */
static Py_ssize_t __pyx_pw_11distributed_9scheduler_10TaskPrefix_5__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_11distributed_9scheduler_10TaskPrefix_5__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_4__len__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_11distributed_9scheduler_10TaskPrefix_4__len__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0740:         return sum(map(len, self._groups))
  __pyx_t_1 = __Pyx_GetBuiltinName(__pyx_n_s_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_self->_groups);
  __Pyx_GIVEREF(__pyx_v_self->_groups);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->_groups);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 740, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 0741: 
 0742:     @property
+0743:     def duration(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_8duration_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_8duration_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_8duration___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_8duration___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_9genexpr10__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.duration.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr10__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0744:         tg: TaskGroup
+0745:         return sum([tg._duration for tg in self._groups])
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 745, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 745, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 745, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 745, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr10__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyFloat_FromDouble(__pyx_9genexpr10__pyx_v_tg->_duration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 745, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 745, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr10__pyx_v_tg); __pyx_9genexpr10__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr10__pyx_v_tg); __pyx_9genexpr10__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0746: 
 0747:     @property
+0748:     def types(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_5types_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_10TaskPrefix_5types_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_10TaskPrefix_5types___get__(((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_10TaskPrefix_5types___get__(struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_9genexpr11__pyx_v_tg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.TaskPrefix.types.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr11__pyx_v_tg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0749:         tg: TaskGroup
+0750:         return set().union(*[tg._types for tg in self._groups])
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 750, __pyx_L5_error)
    }
    __pyx_t_3 = __pyx_v_self->_groups; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
    for (;;) {
      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 750, __pyx_L5_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 750, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 750, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr11__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_5));
      __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr11__pyx_v_tg->_types))) __PYX_ERR(0, 750, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr11__pyx_v_tg); __pyx_9genexpr11__pyx_v_tg = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr11__pyx_v_tg); __pyx_9genexpr11__pyx_v_tg = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_3 = PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0751: 
 0752: 
 0753: @final
 0754: @cclass
+0755: class TaskGroup:
struct __pyx_obj_11distributed_9scheduler_TaskGroup {
  PyObject_HEAD
  struct __pyx_vtabstruct_11distributed_9scheduler_TaskGroup *__pyx_vtab;
  PyObject *_name;
  struct __pyx_obj_11distributed_9scheduler_TaskPrefix *_prefix;
  PyObject *_states;
  PyObject *_dependencies;
  Py_ssize_t _nbytes_total;
  Py_ssize_t _nbytes_in_memory;
  double _duration;
  PyObject *_types;
};
/* … */
struct __pyx_vtabstruct_11distributed_9scheduler_TaskGroup {
  PyObject *(*add)(struct __pyx_obj_11distributed_9scheduler_TaskGroup *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_11distributed_9scheduler_TaskGroup *__pyx_vtabptr_11distributed_9scheduler_TaskGroup;
static PyObject *__pyx_f_11distributed_9scheduler_9TaskGroup_add(struct __pyx_obj_11distributed_9scheduler_TaskGroup *, PyObject *, int __pyx_skip_dispatch);

 0756:     """Collection tracking all tasks within a group
 0757: 
 0758:     Keys often have a structure like ``("x-123", 0)``
 0759:     A group takes the first section, like ``"x-123"``
 0760: 
 0761:     .. attribute:: name: str
 0762: 
 0763:        The name of a group of tasks.
 0764:        For a task like ``("x-123", 0)`` this is the text ``"x-123"``
 0765: 
 0766:     .. attribute:: states: Dict[str, int]
 0767: 
 0768:        The number of tasks in each state,
 0769:        like ``{"memory": 10, "processing": 3, "released": 4, ...}``
 0770: 
 0771:     .. attribute:: dependencies: Set[TaskGroup]
 0772: 
 0773:        The other TaskGroups on which this one depends
 0774: 
 0775:     .. attribute:: nbytes_total: int
 0776: 
 0777:        The total number of bytes that this task group has produced
 0778: 
 0779:     .. attribute:: nbytes_in_memory: int
 0780: 
 0781:        The number of bytes currently stored by this TaskGroup
 0782: 
 0783:     .. attribute:: duration: float
 0784: 
 0785:        The total amount of time spent on all tasks in this TaskGroup
 0786: 
 0787:     .. attribute:: types: Set[str]
 0788: 
 0789:        The result types of this TaskGroup
 0790: 
 0791:     See also
 0792:     --------
 0793:     TaskPrefix
 0794:     """
 0795: 
 0796:     _name: str
 0797:     _prefix: TaskPrefix
 0798:     _states: dict
 0799:     _dependencies: set
 0800:     _nbytes_total: Py_ssize_t
 0801:     _nbytes_in_memory: Py_ssize_t
 0802:     _duration: double
 0803:     _types: set
 0804: 
+0805:     def __init__(self, name: str):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_9TaskGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_9TaskGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 805, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 805, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 1, "name", 1))) __PYX_ERR(0, 805, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup___init__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self), __pyx_v_name);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_9TaskGroup___init__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self, PyObject *__pyx_v_name) {
  PyObject *__pyx_9genexpr12__pyx_v_state = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_9genexpr12__pyx_v_state);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0806:         self._name = name
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  __Pyx_GOTREF(__pyx_v_self->_name);
  __Pyx_DECREF(__pyx_v_self->_name);
  __pyx_v_self->_name = __pyx_v_name;
+0807:         self._prefix = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_prefix);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_prefix));
  __pyx_v_self->_prefix = ((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)Py_None);
+0808:         self._states = {state: 0 for state in ALL_TASK_STATES}
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_set_iterator(__pyx_v_11distributed_9scheduler_ALL_TASK_STATES, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 808, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
    while (1) {
      __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
      if (unlikely(__pyx_t_7 == 0)) break;
      if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 808, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_9genexpr12__pyx_v_state, __pyx_t_6);
      __pyx_t_6 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_9genexpr12__pyx_v_state, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 808, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_9genexpr12__pyx_v_state); __pyx_9genexpr12__pyx_v_state = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr12__pyx_v_state); __pyx_9genexpr12__pyx_v_state = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_states);
  __Pyx_DECREF(__pyx_v_self->_states);
  __pyx_v_self->_states = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0809:         self._states["forgotten"] = 0
  if (unlikely(__pyx_v_self->_states == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 809, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_self->_states, __pyx_n_u_forgotten, __pyx_int_0) < 0)) __PYX_ERR(0, 809, __pyx_L1_error)
+0810:         self._dependencies = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_dependencies);
  __Pyx_DECREF(__pyx_v_self->_dependencies);
  __pyx_v_self->_dependencies = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0811:         self._nbytes_total = 0
  __pyx_v_self->_nbytes_total = 0;
+0812:         self._nbytes_in_memory = 0
  __pyx_v_self->_nbytes_in_memory = 0;
+0813:         self._duration = 0
  __pyx_v_self->_duration = 0.0;
+0814:         self._types = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_types);
  __Pyx_DECREF(__pyx_v_self->_types);
  __pyx_v_self->_types = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0815: 
 0816:     @property
+0817:     def name(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_4name___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_4name___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0818:         return self._name
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_name);
  __pyx_r = __pyx_v_self->_name;
  goto __pyx_L0;
 0819: 
 0820:     @property
+0821:     def prefix(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_6prefix_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_6prefix_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_6prefix___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_6prefix___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0822:         return self._prefix
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_prefix));
  __pyx_r = ((PyObject *)__pyx_v_self->_prefix);
  goto __pyx_L0;
 0823: 
 0824:     @property
+0825:     def states(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_6states_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_6states_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_6states___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_6states___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0826:         return self._states
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_states);
  __pyx_r = __pyx_v_self->_states;
  goto __pyx_L0;
 0827: 
 0828:     @property
+0829:     def dependencies(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_12dependencies_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_12dependencies_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_12dependencies___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_12dependencies___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0830:         return self._dependencies
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_dependencies);
  __pyx_r = __pyx_v_self->_dependencies;
  goto __pyx_L0;
 0831: 
 0832:     @property
+0833:     def nbytes_total(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_12nbytes_total_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_12nbytes_total_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_12nbytes_total___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_12nbytes_total___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.nbytes_total.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0834:         return self._nbytes_total
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nbytes_total); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0835: 
 0836:     @property
+0837:     def nbytes_in_memory(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_16nbytes_in_memory_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_16nbytes_in_memory_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_16nbytes_in_memory___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_16nbytes_in_memory___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.nbytes_in_memory.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0838:         return self._nbytes_in_memory
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nbytes_in_memory); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0839: 
 0840:     @property
+0841:     def duration(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_8duration_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_8duration_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_8duration___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_8duration___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.duration.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0842:         return self._duration
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_duration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0843: 
 0844:     @property
+0845:     def types(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_5types_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_5types_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_5types___get__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_5types___get__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0846:         return self._types
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_types);
  __pyx_r = __pyx_v_self->_types;
  goto __pyx_L0;
 0847: 
 0848:     @ccall
+0849:     def add(self, o):
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_3add(PyObject *__pyx_v_self, PyObject *__pyx_v_o); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_9TaskGroup_add(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self, PyObject *__pyx_v_o, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_3add(PyObject *__pyx_v_self, PyObject *__pyx_v_o); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_3add(PyObject *__pyx_v_self, PyObject *__pyx_v_o) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_2add(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self), ((PyObject *)__pyx_v_o));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_2add(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self, PyObject *__pyx_v_o) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskGroup_add(__pyx_v_self, __pyx_v_o, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0850:         ts: TaskState = o
  if (!(likely(((__pyx_v_o) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_o, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 850, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_o;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+0851:         self._states[ts._state] += 1
  if (unlikely(__pyx_v_self->_states == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 851, __pyx_L1_error)
  }
  __Pyx_INCREF(__pyx_v_self->_states);
  __pyx_t_2 = __pyx_v_self->_states;
  __Pyx_INCREF(__pyx_v_ts->_state);
  __pyx_t_3 = __pyx_v_ts->_state;
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 851, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 851, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0)) __PYX_ERR(0, 851, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0852:         ts._group = self
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_GOTREF(__pyx_v_ts->_group);
  __Pyx_DECREF(((PyObject *)__pyx_v_ts->_group));
  __pyx_v_ts->_group = __pyx_v_self;
 0853: 
+0854:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskGroup_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_4__repr__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9TaskGroup_8__repr___2generator26(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_4__repr__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_2___repr__(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_2___repr__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 854, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self;
};

+0855:         return (
  __Pyx_XDECREF(__pyx_r);
 0856:             "<"
+0857:             + (self._name or "no-group")
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_self->_name); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 857, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->_name);
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->_name;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_kp_u_no_group);
  __pyx_t_1 = __pyx_kp_u_no_group;
  __pyx_L3_bool_binop_done:;
  __pyx_t_3 = PyNumber_Add(__pyx_kp_u__5, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0858:             + ": "
  __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_kp_u__4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0859:             + ", ".join(
  __pyx_t_4 = __Pyx_Generator_Next(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyUnicode_Join(__pyx_kp_u__6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 859, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0860:                 "%s: %d" % (k, v) for (k, v) in sorted(self._states.items()) if v
static PyObject *__pyx_pf_11distributed_9scheduler_9TaskGroup_8__repr___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_3_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_3_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_3_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_3_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_3_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 860, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9TaskGroup_8__repr___2generator26, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 860, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9TaskGroup_8__repr___2generator26(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 860, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 860, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->_states == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 860, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_Items(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->_states); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_4 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 860, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 860, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 860, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 860, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 860, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_v); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
    if (__pyx_t_9) {
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_cur_scope->__pyx_v_k), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_INCREF(__pyx_kp_u__4);
      __pyx_t_10 += 2;
      __Pyx_GIVEREF(__pyx_kp_u__4);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__4);
      __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_cur_scope->__pyx_v_v), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 860, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_3 = __pyx_pf_11distributed_9scheduler_9TaskGroup_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_3_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_2___repr__ *__pyx_outer_scope;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
};

 0861:             )
+0862:             + ">"
  __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_kp_u__3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0863:         )
 0864: 
+0865:     def __len__(self):
/* Python wrapper */
static Py_ssize_t __pyx_pw_11distributed_9scheduler_9TaskGroup_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_11distributed_9scheduler_9TaskGroup_7__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskGroup_6__len__(((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_11distributed_9scheduler_9TaskGroup_6__len__(struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.TaskGroup.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0866:         return sum(self._states.values())
  if (unlikely(__pyx_v_self->_states == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 866, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->_states); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 866, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 0867: 
 0868: 
 0869: @final
 0870: @cclass
+0871: class TaskState:
struct __pyx_obj_11distributed_9scheduler_TaskState {
  PyObject_HEAD
  struct __pyx_vtabstruct_11distributed_9scheduler_TaskState *__pyx_vtab;
  PyObject *_key;
  Py_hash_t _hash;
  struct __pyx_obj_11distributed_9scheduler_TaskPrefix *_prefix;
  PyObject *_run_spec;
  PyObject *_priority;
  PyObject *_state;
  PyObject *_dependencies;
  PyObject *_dependents;
  int _has_lost_dependencies;
  PyObject *_waiting_on;
  PyObject *_waiters;
  PyObject *_who_wants;
  PyObject *_who_has;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *_processing_on;
  Py_ssize_t _retries;
  Py_ssize_t _nbytes;
  PyObject *_type;
  PyObject *_exception;
  PyObject *_traceback;
  PyObject *_exception_blame;
  Py_ssize_t _suspicious;
  PyObject *_host_restrictions;
  PyObject *_worker_restrictions;
  PyObject *_resource_restrictions;
  int _loose_restrictions;
  PyObject *_metadata;
  PyObject *_annotations;
  int _actor;
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *_group;
  PyObject *_group_key;
};
/* … */
struct __pyx_vtabstruct_11distributed_9scheduler_TaskState {
  PyObject *(*add_dependency)(struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
  Py_ssize_t (*get_nbytes)(struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
  PyObject *(*set_nbytes)(struct __pyx_obj_11distributed_9scheduler_TaskState *, Py_ssize_t, int __pyx_skip_dispatch);
  PyObject *(*validate)(struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_11distributed_9scheduler_TaskState *__pyx_vtabptr_11distributed_9scheduler_TaskState;
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_add_dependency(struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
static CYTHON_INLINE Py_ssize_t __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *, Py_ssize_t, int __pyx_skip_dispatch);
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_validate(struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);

 0872:     """
 0873:     A simple object holding information about a task.
 0874: 
 0875:     .. attribute:: key: str
 0876: 
 0877:        The key is the unique identifier of a task, generally formed
 0878:        from the name of the function, followed by a hash of the function
 0879:        and arguments, like ``'inc-ab31c010444977004d656610d2d421ec'``.
 0880: 
 0881:     .. attribute:: prefix: TaskPrefix
 0882: 
 0883:        The broad class of tasks to which this task belongs like "inc" or
 0884:        "read_csv"
 0885: 
 0886:     .. attribute:: run_spec: object
 0887: 
 0888:        A specification of how to run the task.  The type and meaning of this
 0889:        value is opaque to the scheduler, as it is only interpreted by the
 0890:        worker to which the task is sent for executing.
 0891: 
 0892:        As a special case, this attribute may also be ``None``, in which case
 0893:        the task is "pure data" (such as, for example, a piece of data loaded
 0894:        in the scheduler using :meth:`Client.scatter`).  A "pure data" task
 0895:        cannot be computed again if its value is lost.
 0896: 
 0897:     .. attribute:: priority: tuple
 0898: 
 0899:        The priority provides each task with a relative ranking which is used
 0900:        to break ties when many tasks are being considered for execution.
 0901: 
 0902:        This ranking is generally a 2-item tuple.  The first (and dominant)
 0903:        item corresponds to when it was submitted.  Generally, earlier tasks
 0904:        take precedence.  The second item is determined by the client, and is
 0905:        a way to prioritize tasks within a large graph that may be important,
 0906:        such as if they are on the critical path, or good to run in order to
 0907:        release many dependencies.  This is explained further in
 0908:        :doc:`Scheduling Policy <scheduling-policies>`.
 0909: 
 0910:     .. attribute:: state: str
 0911: 
 0912:        This task's current state.  Valid states include ``released``,
 0913:        ``waiting``, ``no-worker``, ``processing``, ``memory``, ``erred``
 0914:        and ``forgotten``.  If it is ``forgotten``, the task isn't stored
 0915:        in the ``tasks`` dictionary anymore and will probably disappear
 0916:        soon from memory.
 0917: 
 0918:     .. attribute:: dependencies: {TaskState}
 0919: 
 0920:        The set of tasks this task depends on for proper execution.  Only
 0921:        tasks still alive are listed in this set.  If, for whatever reason,
 0922:        this task also depends on a forgotten task, the
 0923:        :attr:`has_lost_dependencies` flag is set.
 0924: 
 0925:        A task can only be executed once all its dependencies have already
 0926:        been successfully executed and have their result stored on at least
 0927:        one worker.  This is tracked by progressively draining the
 0928:        :attr:`waiting_on` set.
 0929: 
 0930:     .. attribute:: dependents: {TaskState}
 0931: 
 0932:        The set of tasks which depend on this task.  Only tasks still alive
 0933:        are listed in this set.
 0934: 
 0935:        This is the reverse mapping of :attr:`dependencies`.
 0936: 
 0937:     .. attribute:: has_lost_dependencies: bool
 0938: 
 0939:        Whether any of the dependencies of this task has been forgotten.
 0940:        For memory consumption reasons, forgotten tasks are not kept in
 0941:        memory even though they may have dependent tasks.  When a task is
 0942:        forgotten, therefore, each of its dependents has their
 0943:        :attr:`has_lost_dependencies` attribute set to ``True``.
 0944: 
 0945:        If :attr:`has_lost_dependencies` is true, this task cannot go
 0946:        into the "processing" state anymore.
 0947: 
 0948:     .. attribute:: waiting_on: {TaskState}
 0949: 
 0950:        The set of tasks this task is waiting on *before* it can be executed.
 0951:        This is always a subset of :attr:`dependencies`.  Each time one of the
 0952:        dependencies has finished processing, it is removed from the
 0953:        :attr:`waiting_on` set.
 0954: 
 0955:        Once :attr:`waiting_on` becomes empty, this task can move from the
 0956:        "waiting" state to the "processing" state (unless one of the
 0957:        dependencies errored out, in which case this task is instead
 0958:        marked "erred").
 0959: 
 0960:     .. attribute:: waiters: {TaskState}
 0961: 
 0962:        The set of tasks which need this task to remain alive.  This is always
 0963:        a subset of :attr:`dependents`.  Each time one of the dependents
 0964:        has finished processing, it is removed from the :attr:`waiters`
 0965:        set.
 0966: 
 0967:        Once both :attr:`waiters` and :attr:`who_wants` become empty, this
 0968:        task can be released (if it has a non-empty :attr:`run_spec`) or
 0969:        forgotten (otherwise) by the scheduler, and by any workers
 0970:        in :attr:`who_has`.
 0971: 
 0972:        .. note:: Counter-intuitively, :attr:`waiting_on` and
 0973:           :attr:`waiters` are not reverse mappings of each other.
 0974: 
 0975:     .. attribute:: who_wants: {ClientState}
 0976: 
 0977:        The set of clients who want this task's result to remain alive.
 0978:        This is the reverse mapping of :attr:`ClientState.wants_what`.
 0979: 
 0980:        When a client submits a graph to the scheduler it also specifies
 0981:        which output tasks it desires, such that their results are not released
 0982:        from memory.
 0983: 
 0984:        Once a task has finished executing (i.e. moves into the "memory"
 0985:        or "erred" state), the clients in :attr:`who_wants` are notified.
 0986: 
 0987:        Once both :attr:`waiters` and :attr:`who_wants` become empty, this
 0988:        task can be released (if it has a non-empty :attr:`run_spec`) or
 0989:        forgotten (otherwise) by the scheduler, and by any workers
 0990:        in :attr:`who_has`.
 0991: 
 0992:     .. attribute:: who_has: {WorkerState}
 0993: 
 0994:        The set of workers who have this task's result in memory.
 0995:        It is non-empty iff the task is in the "memory" state.  There can be
 0996:        more than one worker in this set if, for example, :meth:`Client.scatter`
 0997:        or :meth:`Client.replicate` was used.
 0998: 
 0999:        This is the reverse mapping of :attr:`WorkerState.has_what`.
 1000: 
 1001:     .. attribute:: processing_on: WorkerState (or None)
 1002: 
 1003:        If this task is in the "processing" state, which worker is currently
 1004:        processing it.  Otherwise this is ``None``.
 1005: 
 1006:        This attribute is kept in sync with :attr:`WorkerState.processing`.
 1007: 
 1008:     .. attribute:: retries: int
 1009: 
 1010:        The number of times this task can automatically be retried in case
 1011:        of failure.  If a task fails executing (the worker returns with
 1012:        an error), its :attr:`retries` attribute is checked.  If it is
 1013:        equal to 0, the task is marked "erred".  If it is greater than 0,
 1014:        the :attr:`retries` attribute is decremented and execution is
 1015:        attempted again.
 1016: 
 1017:     .. attribute:: nbytes: int (or None)
 1018: 
 1019:        The number of bytes, as determined by ``sizeof``, of the result
 1020:        of a finished task.  This number is used for diagnostics and to
 1021:        help prioritize work.
 1022: 
 1023:     .. attribute:: type: str
 1024: 
 1025:        The type of the object as a string.  Only present for tasks that have
 1026:        been computed.
 1027: 
 1028:     .. attribute:: exception: object
 1029: 
 1030:        If this task failed executing, the exception object is stored here.
 1031:        Otherwise this is ``None``.
 1032: 
 1033:     .. attribute:: traceback: object
 1034: 
 1035:        If this task failed executing, the traceback object is stored here.
 1036:        Otherwise this is ``None``.
 1037: 
 1038:     .. attribute:: exception_blame: TaskState (or None)
 1039: 
 1040:        If this task or one of its dependencies failed executing, the
 1041:        failed task is stored here (possibly itself).  Otherwise this
 1042:        is ``None``.
 1043: 
 1044:     .. attribute:: suspicious: int
 1045: 
 1046:        The number of times this task has been involved in a worker death.
 1047: 
 1048:        Some tasks may cause workers to die (such as calling ``os._exit(0)``).
 1049:        When a worker dies, all of the tasks on that worker are reassigned
 1050:        to others.  This combination of behaviors can cause a bad task to
 1051:        catastrophically destroy all workers on the cluster, one after
 1052:        another.  Whenever a worker dies, we mark each task currently
 1053:        processing on that worker (as recorded by
 1054:        :attr:`WorkerState.processing`) as suspicious.
 1055: 
 1056:        If a task is involved in three deaths (or some other fixed constant)
 1057:        then we mark the task as ``erred``.
 1058: 
 1059:     .. attribute:: host_restrictions: {hostnames}
 1060: 
 1061:        A set of hostnames where this task can be run (or ``None`` if empty).
 1062:        Usually this is empty unless the task has been specifically restricted
 1063:        to only run on certain hosts.  A hostname may correspond to one or
 1064:        several connected workers.
 1065: 
 1066:     .. attribute:: worker_restrictions: {worker addresses}
 1067: 
 1068:        A set of complete worker addresses where this can be run (or ``None``
 1069:        if empty).  Usually this is empty unless the task has been specifically
 1070:        restricted to only run on certain workers.
 1071: 
 1072:        Note this is tracking worker addresses, not worker states, since
 1073:        the specific workers may not be connected at this time.
 1074: 
 1075:     .. attribute:: resource_restrictions: {resource: quantity}
 1076: 
 1077:        Resources required by this task, such as ``{'gpu': 1}`` or
 1078:        ``{'memory': 1e9}`` (or ``None`` if empty).  These are user-defined
 1079:        names and are matched against the contents of each
 1080:        :attr:`WorkerState.resources` dictionary.
 1081: 
 1082:     .. attribute:: loose_restrictions: bool
 1083: 
 1084:        If ``False``, each of :attr:`host_restrictions`,
 1085:        :attr:`worker_restrictions` and :attr:`resource_restrictions` is
 1086:        a hard constraint: if no worker is available satisfying those
 1087:        restrictions, the task cannot go into the "processing" state and
 1088:        will instead go into the "no-worker" state.
 1089: 
 1090:        If ``True``, the above restrictions are mere preferences: if no worker
 1091:        is available satisfying those restrictions, the task can still go
 1092:        into the "processing" state and be sent for execution to another
 1093:        connected worker.
 1094: 
 1095:     .. attribute:: metadata: dict
 1096: 
 1097:        Metadata related to task.
 1098: 
 1099:     .. attribute:: actor: bool
 1100: 
 1101:        Whether or not this task is an Actor.
 1102: 
 1103:     .. attribute:: group: TaskGroup
 1104: 
 1105:         The group of tasks to which this one belongs.
 1106: 
 1107:     .. attribute:: annotations: dict
 1108: 
 1109:         Task annotations
 1110:     """
 1111: 
 1112:     _key: str
 1113:     _hash: Py_hash_t
 1114:     _prefix: TaskPrefix
 1115:     _run_spec: object
 1116:     _priority: tuple
 1117:     _state: str
 1118:     _dependencies: set
 1119:     _dependents: set
 1120:     _has_lost_dependencies: bint
 1121:     _waiting_on: set
 1122:     _waiters: set
 1123:     _who_wants: set
 1124:     _who_has: set
 1125:     _processing_on: WorkerState
 1126:     _retries: Py_ssize_t
 1127:     _nbytes: Py_ssize_t
 1128:     _type: str
 1129:     _exception: object
 1130:     _traceback: object
 1131:     _exception_blame: object
 1132:     _suspicious: Py_ssize_t
 1133:     _host_restrictions: set
 1134:     _worker_restrictions: set
 1135:     _resource_restrictions: dict
 1136:     _loose_restrictions: bint
 1137:     _metadata: dict
 1138:     _annotations: dict
 1139:     _actor: bint
 1140:     _group: TaskGroup
 1141:     _group_key: str
 1142: 
 1143:     __slots__ = (
 1144:         # === General description ===
+1145:         "_actor",
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11distributed_9scheduler_TaskState->tp_dict, __pyx_n_s_slots, __pyx_tuple__119) < 0) __PYX_ERR(0, 1143, __pyx_L1_error)
  PyType_Modified(__pyx_ptype_11distributed_9scheduler_TaskState);
/* … */
  __pyx_tuple__119 = PyTuple_Pack(30, __pyx_n_u_actor_2, __pyx_n_u_key_2, __pyx_n_u_hash, __pyx_n_u_prefix_2, __pyx_n_u_run_spec_2, __pyx_n_u_dependencies_2, __pyx_n_u_dependents_2, __pyx_n_u_priority_2, __pyx_n_u_host_restrictions_2, __pyx_n_u_worker_restrictions_2, __pyx_n_u_resource_restrictions_2, __pyx_n_u_loose_restrictions_2, __pyx_n_u_state_2, __pyx_n_u_has_lost_dependencies, __pyx_n_u_waiting_on_2, __pyx_n_u_waiters_2, __pyx_n_u_processing_on_2, __pyx_n_u_who_has_2, __pyx_n_u_who_wants_2, __pyx_n_u_exception_2, __pyx_n_u_traceback_2, __pyx_n_u_exception_blame_2, __pyx_n_u_suspicious_2, __pyx_n_u_retries_2, __pyx_n_u_nbytes_2, __pyx_n_u_type_2, __pyx_n_u_group_key, __pyx_n_u_group_2, __pyx_n_u_metadata_2, __pyx_n_u_annotations_2); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(0, 1145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__119);
  __Pyx_GIVEREF(__pyx_tuple__119);
 1146:         # Key name
 1147:         "_key",
 1148:         # Hash of the key name
 1149:         "_hash",
 1150:         # Key prefix (see key_split())
 1151:         "_prefix",
 1152:         # How to run the task (None if pure data)
 1153:         "_run_spec",
 1154:         # Alive dependents and dependencies
 1155:         "_dependencies",
 1156:         "_dependents",
 1157:         # Compute priority
 1158:         "_priority",
 1159:         # Restrictions
 1160:         "_host_restrictions",
 1161:         "_worker_restrictions",  # not WorkerStates but addresses
 1162:         "_resource_restrictions",
 1163:         "_loose_restrictions",
 1164:         # === Task state ===
 1165:         "_state",
 1166:         # Whether some dependencies were forgotten
 1167:         "_has_lost_dependencies",
 1168:         # If in 'waiting' state, which tasks need to complete
 1169:         # before we can run
 1170:         "_waiting_on",
 1171:         # If in 'waiting' or 'processing' state, which tasks needs us
 1172:         # to complete before they can run
 1173:         "_waiters",
 1174:         # In in 'processing' state, which worker we are processing on
 1175:         "_processing_on",
 1176:         # If in 'memory' state, Which workers have us
 1177:         "_who_has",
 1178:         # Which clients want us
 1179:         "_who_wants",
 1180:         "_exception",
 1181:         "_traceback",
 1182:         "_exception_blame",
 1183:         "_suspicious",
 1184:         "_retries",
 1185:         "_nbytes",
 1186:         "_type",
 1187:         "_group_key",
 1188:         "_group",
 1189:         "_metadata",
 1190:         "_annotations",
 1191:     )
 1192: 
+1193:     def __init__(self, key: str, run_spec: object):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_9TaskState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_9TaskState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_run_spec = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_run_spec,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_run_spec)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1193, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1193, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_key = ((PyObject*)values[0]);
    __pyx_v_run_spec = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1193, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_key), (&PyUnicode_Type), 1, "key", 1))) __PYX_ERR(0, 1193, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState___init__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), __pyx_v_key, __pyx_v_run_spec);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_9TaskState___init__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_run_spec) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1194:         self._key = key
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  __Pyx_GOTREF(__pyx_v_self->_key);
  __Pyx_DECREF(__pyx_v_self->_key);
  __pyx_v_self->_key = __pyx_v_key;
+1195:         self._hash = hash(key)
  __pyx_t_1 = PyObject_Hash(__pyx_v_key); if (unlikely(__pyx_t_1 == ((Py_hash_t)-1))) __PYX_ERR(0, 1195, __pyx_L1_error)
  __pyx_v_self->_hash = __pyx_t_1;
+1196:         self._run_spec = run_spec
  __Pyx_INCREF(__pyx_v_run_spec);
  __Pyx_GIVEREF(__pyx_v_run_spec);
  __Pyx_GOTREF(__pyx_v_self->_run_spec);
  __Pyx_DECREF(__pyx_v_self->_run_spec);
  __pyx_v_self->_run_spec = __pyx_v_run_spec;
+1197:         self._state = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_state);
  __Pyx_DECREF(__pyx_v_self->_state);
  __pyx_v_self->_state = ((PyObject*)Py_None);
+1198:         self._exception = self._traceback = self._exception_blame = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_exception);
  __Pyx_DECREF(__pyx_v_self->_exception);
  __pyx_v_self->_exception = Py_None;
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_traceback);
  __Pyx_DECREF(__pyx_v_self->_traceback);
  __pyx_v_self->_traceback = Py_None;
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_exception_blame);
  __Pyx_DECREF(__pyx_v_self->_exception_blame);
  __pyx_v_self->_exception_blame = Py_None;
+1199:         self._suspicious = self._retries = 0
  __pyx_v_self->_suspicious = 0;
  __pyx_v_self->_retries = 0;
+1200:         self._nbytes = -1
  __pyx_v_self->_nbytes = -1L;
+1201:         self._priority = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_priority);
  __Pyx_DECREF(__pyx_v_self->_priority);
  __pyx_v_self->_priority = ((PyObject*)Py_None);
+1202:         self._who_wants = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_who_wants);
  __Pyx_DECREF(__pyx_v_self->_who_wants);
  __pyx_v_self->_who_wants = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1203:         self._dependencies = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_dependencies);
  __Pyx_DECREF(__pyx_v_self->_dependencies);
  __pyx_v_self->_dependencies = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1204:         self._dependents = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_dependents);
  __Pyx_DECREF(__pyx_v_self->_dependents);
  __pyx_v_self->_dependents = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1205:         self._waiting_on = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_waiting_on);
  __Pyx_DECREF(__pyx_v_self->_waiting_on);
  __pyx_v_self->_waiting_on = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1206:         self._waiters = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_waiters);
  __Pyx_DECREF(__pyx_v_self->_waiters);
  __pyx_v_self->_waiters = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1207:         self._who_has = set()
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_who_has);
  __Pyx_DECREF(__pyx_v_self->_who_has);
  __pyx_v_self->_who_has = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1208:         self._processing_on = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_processing_on);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_processing_on));
  __pyx_v_self->_processing_on = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None);
+1209:         self._has_lost_dependencies = False
  __pyx_v_self->_has_lost_dependencies = 0;
+1210:         self._host_restrictions = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_host_restrictions);
  __Pyx_DECREF(__pyx_v_self->_host_restrictions);
  __pyx_v_self->_host_restrictions = ((PyObject*)Py_None);
+1211:         self._worker_restrictions = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_worker_restrictions);
  __Pyx_DECREF(__pyx_v_self->_worker_restrictions);
  __pyx_v_self->_worker_restrictions = ((PyObject*)Py_None);
+1212:         self._resource_restrictions = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_resource_restrictions);
  __Pyx_DECREF(__pyx_v_self->_resource_restrictions);
  __pyx_v_self->_resource_restrictions = ((PyObject*)Py_None);
+1213:         self._loose_restrictions = False
  __pyx_v_self->_loose_restrictions = 0;
+1214:         self._actor = False
  __pyx_v_self->_actor = 0;
+1215:         self._type = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_type);
  __Pyx_DECREF(__pyx_v_self->_type);
  __pyx_v_self->_type = ((PyObject*)Py_None);
+1216:         self._group_key = key_split_group(key)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_key_split_group); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1216, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_group_key);
  __Pyx_DECREF(__pyx_v_self->_group_key);
  __pyx_v_self->_group_key = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1217:         self._group = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_group);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_group));
  __pyx_v_self->_group = ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)Py_None);
+1218:         self._metadata = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_metadata);
  __Pyx_DECREF(__pyx_v_self->_metadata);
  __pyx_v_self->_metadata = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+1219:         self._annotations = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->_annotations);
  __Pyx_DECREF(__pyx_v_self->_annotations);
  __pyx_v_self->_annotations = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 1220: 
+1221:     def __hash__(self):
/* Python wrapper */
static Py_hash_t __pyx_pw_11distributed_9scheduler_9TaskState_3__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_11distributed_9scheduler_9TaskState_3__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_2__hash__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_hash_t __pyx_pf_11distributed_9scheduler_9TaskState_2__hash__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1222:         return self._hash
  __pyx_r = __pyx_v_self->_hash;
  goto __pyx_L0;
 1223: 
+1224:     def __eq__(self, other):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_4__eq__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((PyObject *)__pyx_v_other));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_4__eq__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, PyObject *__pyx_v_other) {
  PyTypeObject *__pyx_v_typ_self = 0;
  PyTypeObject *__pyx_v_typ_other = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_other_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_typ_self);
  __Pyx_XDECREF(__pyx_v_typ_other);
  __Pyx_XDECREF((PyObject *)__pyx_v_other_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1225:         typ_self: type = type(self)
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_typ_self = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+1226:         typ_other: type = type(other)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_other)));
  __pyx_v_typ_other = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_other)));
+1227:         if typ_self == typ_other:
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_typ_self), ((PyObject *)__pyx_v_typ_other), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1227, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1227, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+1228:             other_ts: TaskState = other
    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1228, __pyx_L1_error)
    __pyx_t_1 = __pyx_v_other;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_other_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
    __pyx_t_1 = 0;
+1229:             return self._key == other_ts._key
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->_key, __pyx_v_other_ts->_key, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1229, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 1230:         else:
+1231:             return False
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }
 1232: 
 1233:     @property
+1234:     def key(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_3key_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_3key_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_3key___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_3key___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1235:         return self._key
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_key);
  __pyx_r = __pyx_v_self->_key;
  goto __pyx_L0;
 1236: 
 1237:     @property
+1238:     def prefix(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_6prefix_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_6prefix_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_6prefix___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_6prefix___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1239:         return self._prefix
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_prefix));
  __pyx_r = ((PyObject *)__pyx_v_self->_prefix);
  goto __pyx_L0;
 1240: 
 1241:     @property
+1242:     def run_spec(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8run_spec_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8run_spec_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_8run_spec___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_8run_spec___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1243:         return self._run_spec
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_run_spec);
  __pyx_r = __pyx_v_self->_run_spec;
  goto __pyx_L0;
 1244: 
 1245:     @property
+1246:     def priority(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8priority_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8priority_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_8priority___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_8priority___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1247:         return self._priority
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_priority);
  __pyx_r = __pyx_v_self->_priority;
  goto __pyx_L0;
 1248: 
 1249:     @property
+1250:     def state(self) -> str:
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5state_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5state_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_5state___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_5state___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1251:         return self._state
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_state);
  __pyx_r = __pyx_v_self->_state;
  goto __pyx_L0;
 1252: 
 1253:     @state.setter
+1254:     def state(self, value: str):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_9TaskState_5state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_11distributed_9scheduler_9TaskState_5state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 1, "value", 1))) __PYX_ERR(0, 1254, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_5state_2__set__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((PyObject*)__pyx_v_value));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_9TaskState_5state_2__set__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.state.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1255:         self._group._states[self._state] -= 1
  if (unlikely(__pyx_v_self->_group->_states == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1255, __pyx_L1_error)
  }
  __Pyx_INCREF(__pyx_v_self->_group->_states);
  __pyx_t_1 = __pyx_v_self->_group->_states;
  __Pyx_INCREF(__pyx_v_self->_state);
  __pyx_t_2 = __pyx_v_self->_state;
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1255, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1255, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_4) < 0)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1256:         self._group._states[value] += 1
  if (unlikely(__pyx_v_self->_group->_states == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1256, __pyx_L1_error)
  }
  __Pyx_INCREF(__pyx_v_self->_group->_states);
  __pyx_t_1 = __pyx_v_self->_group->_states;
  __Pyx_INCREF(__pyx_v_value);
  __pyx_t_2 = __pyx_v_value;
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1256, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1256, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 1256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1257:         self._state = value
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->_state);
  __Pyx_DECREF(__pyx_v_self->_state);
  __pyx_v_self->_state = __pyx_v_value;
 1258: 
 1259:     @property
+1260:     def dependencies(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_12dependencies_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_12dependencies_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_12dependencies___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_12dependencies___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1261:         return self._dependencies
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_dependencies);
  __pyx_r = __pyx_v_self->_dependencies;
  goto __pyx_L0;
 1262: 
 1263:     @property
+1264:     def dependents(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10dependents_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10dependents_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_10dependents___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_10dependents___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1265:         return self._dependents
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_dependents);
  __pyx_r = __pyx_v_self->_dependents;
  goto __pyx_L0;
 1266: 
 1267:     @property
+1268:     def has_lost_dependencies(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_21has_lost_dependencies_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_21has_lost_dependencies_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_21has_lost_dependencies___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_21has_lost_dependencies___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.has_lost_dependencies.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1269:         return self._has_lost_dependencies
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_has_lost_dependencies); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1270: 
 1271:     @property
+1272:     def waiting_on(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10waiting_on_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10waiting_on_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_10waiting_on___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_10waiting_on___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1273:         return self._waiting_on
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_waiting_on);
  __pyx_r = __pyx_v_self->_waiting_on;
  goto __pyx_L0;
 1274: 
 1275:     @property
+1276:     def waiters(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7waiters_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7waiters_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_7waiters___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_7waiters___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1277:         return self._waiters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_waiters);
  __pyx_r = __pyx_v_self->_waiters;
  goto __pyx_L0;
 1278: 
 1279:     @property
+1280:     def who_wants(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9who_wants_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9who_wants_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_9who_wants___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_9who_wants___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1281:         return self._who_wants
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_who_wants);
  __pyx_r = __pyx_v_self->_who_wants;
  goto __pyx_L0;
 1282: 
 1283:     @property
+1284:     def who_has(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7who_has_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7who_has_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_7who_has___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_7who_has___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1285:         return self._who_has
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_who_has);
  __pyx_r = __pyx_v_self->_who_has;
  goto __pyx_L0;
 1286: 
 1287:     @property
+1288:     def processing_on(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_13processing_on_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_13processing_on_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_13processing_on___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_13processing_on___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1289:         return self._processing_on
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_processing_on));
  __pyx_r = ((PyObject *)__pyx_v_self->_processing_on);
  goto __pyx_L0;
 1290: 
 1291:     @processing_on.setter
+1292:     def processing_on(self, v: WorkerState):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_9TaskState_13processing_on_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_9TaskState_13processing_on_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "v", 0))) __PYX_ERR(0, 1292, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_13processing_on_2__set__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_9TaskState_13processing_on_2__set__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1293:         self._processing_on = v
  __Pyx_INCREF(((PyObject *)__pyx_v_v));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_v));
  __Pyx_GOTREF(__pyx_v_self->_processing_on);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_processing_on));
  __pyx_v_self->_processing_on = __pyx_v_v;
 1294: 
 1295:     @property
+1296:     def retries(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7retries_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7retries_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_7retries___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_7retries___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.retries.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1297:         return self._retries
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_retries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1298: 
 1299:     @property
+1300:     def nbytes(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_6nbytes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_6nbytes___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_6nbytes___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1301:         return self._nbytes
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_nbytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1302: 
 1303:     @nbytes.setter
+1304:     def nbytes(self, v: Py_ssize_t):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_9TaskState_6nbytes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_9TaskState_6nbytes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v) {
  Py_ssize_t __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_v); {
    __pyx_v_v = __Pyx_PyIndex_AsSsize_t(__pyx_arg_v); if (unlikely((__pyx_v_v == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1304, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskState.nbytes.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_6nbytes_2__set__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((Py_ssize_t)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_9TaskState_6nbytes_2__set__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, Py_ssize_t __pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1305:         self._nbytes = v
  __pyx_v_self->_nbytes = __pyx_v_v;
 1306: 
 1307:     @property
+1308:     def type(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_4type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_4type___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_4type___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1309:         return self._type
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_type);
  __pyx_r = __pyx_v_self->_type;
  goto __pyx_L0;
 1310: 
 1311:     @property
+1312:     def exception(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9exception_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9exception_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_9exception___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_9exception___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1313:         return self._exception
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_exception);
  __pyx_r = __pyx_v_self->_exception;
  goto __pyx_L0;
 1314: 
 1315:     @property
+1316:     def traceback(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9traceback_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9traceback_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_9traceback___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_9traceback___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1317:         return self._traceback
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_traceback);
  __pyx_r = __pyx_v_self->_traceback;
  goto __pyx_L0;
 1318: 
 1319:     @property
+1320:     def exception_blame(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_15exception_blame_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_15exception_blame_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_15exception_blame___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_15exception_blame___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1321:         return self._exception_blame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_exception_blame);
  __pyx_r = __pyx_v_self->_exception_blame;
  goto __pyx_L0;
 1322: 
 1323:     @property
+1324:     def suspicious(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10suspicious_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10suspicious_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_10suspicious___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_10suspicious___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.suspicious.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1325:         return self._suspicious
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_suspicious); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1326: 
 1327:     @property
+1328:     def host_restrictions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_17host_restrictions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_17host_restrictions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_17host_restrictions___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_17host_restrictions___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1329:         return self._host_restrictions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_host_restrictions);
  __pyx_r = __pyx_v_self->_host_restrictions;
  goto __pyx_L0;
 1330: 
 1331:     @property
+1332:     def worker_restrictions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_19worker_restrictions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_19worker_restrictions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_19worker_restrictions___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_19worker_restrictions___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1333:         return self._worker_restrictions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_worker_restrictions);
  __pyx_r = __pyx_v_self->_worker_restrictions;
  goto __pyx_L0;
 1334: 
 1335:     @property
+1336:     def resource_restrictions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_21resource_restrictions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_21resource_restrictions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_21resource_restrictions___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_21resource_restrictions___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1337:         return self._resource_restrictions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_resource_restrictions);
  __pyx_r = __pyx_v_self->_resource_restrictions;
  goto __pyx_L0;
 1338: 
 1339:     @property
+1340:     def loose_restrictions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_18loose_restrictions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_18loose_restrictions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_18loose_restrictions___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_18loose_restrictions___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.loose_restrictions.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1341:         return self._loose_restrictions
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_loose_restrictions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1342: 
 1343:     @property
+1344:     def metadata(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8metadata_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_8metadata_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_8metadata___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_8metadata___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1345:         return self._metadata
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_metadata);
  __pyx_r = __pyx_v_self->_metadata;
  goto __pyx_L0;
 1346: 
 1347:     @property
+1348:     def annotations(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_11annotations_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_11annotations_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_11annotations___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_11annotations___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1349:         return self._annotations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_annotations);
  __pyx_r = __pyx_v_self->_annotations;
  goto __pyx_L0;
 1350: 
 1351:     @property
+1352:     def actor(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5actor_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5actor_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_5actor___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_5actor___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.actor.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1353:         return self._actor
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_actor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1354: 
 1355:     @property
+1356:     def group(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_5group_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_5group___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_5group___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1357:         return self._group
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_group));
  __pyx_r = ((PyObject *)__pyx_v_self->_group);
  goto __pyx_L0;
 1358: 
 1359:     @property
+1360:     def group_key(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9group_key_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9group_key_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_9group_key___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_9group_key___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1361:         return self._group_key
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_group_key);
  __pyx_r = __pyx_v_self->_group_key;
  goto __pyx_L0;
 1362: 
 1363:     @property
+1364:     def prefix_key(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10prefix_key_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_10prefix_key_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_10prefix_key___get__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_10prefix_key___get__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1365:         return self._prefix._name
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_prefix->_name);
  __pyx_r = __pyx_v_self->_prefix->_name;
  goto __pyx_L0;
 1366: 
 1367:     @ccall
+1368:     def add_dependency(self, other: "TaskState"):
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7add_dependency(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_add_dependency(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_other, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_dependency", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.add_dependency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7add_dependency(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9TaskState_6add_dependency[] = " Add another task as a dependency of this task ";
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_7add_dependency(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_dependency (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "other", 0))) __PYX_ERR(0, 1368, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_6add_dependency(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_other));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_6add_dependency(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_dependency", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_add_dependency(__pyx_v_self, __pyx_v_other, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.add_dependency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1369:         """ Add another task as a dependency of this task """
+1370:         self._dependencies.add(other)
  if (unlikely(__pyx_v_self->_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 1370, __pyx_L1_error)
  }
  __pyx_t_1 = PySet_Add(__pyx_v_self->_dependencies, ((PyObject *)__pyx_v_other)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1370, __pyx_L1_error)
+1371:         self._group._dependencies.add(other._group)
  if (unlikely(__pyx_v_self->_group->_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 1371, __pyx_L1_error)
  }
  __pyx_t_2 = ((PyObject *)__pyx_v_other->_group);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = PySet_Add(__pyx_v_self->_group->_dependencies, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1372:         other._dependents.add(self)
  if (unlikely(__pyx_v_other->_dependents == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 1372, __pyx_L1_error)
  }
  __pyx_t_1 = PySet_Add(__pyx_v_other->_dependents, ((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1372, __pyx_L1_error)
 1373: 
 1374:     @ccall
 1375:     @inline
 1376:     @nogil
+1377:     def get_nbytes(self) -> Py_ssize_t:
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9get_nbytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static CYTHON_INLINE Py_ssize_t __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9get_nbytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_9get_nbytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_8get_nbytes(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_8get_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_self, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.get_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1378:         return self._nbytes if self._nbytes >= 0 else DEFAULT_DATA_SIZE
  if (((__pyx_v_self->_nbytes >= 0) != 0)) {
    __pyx_t_1 = __pyx_v_self->_nbytes;
  } else {
    __pyx_t_1 = __pyx_v_11distributed_9scheduler_DEFAULT_DATA_SIZE;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 1379: 
 1380:     @ccall
+1381:     def set_nbytes(self, nbytes: Py_ssize_t):
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_11set_nbytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_nbytes); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, Py_ssize_t __pyx_v_nbytes, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_diff;
  Py_ssize_t __pyx_v_old_nbytes;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_nbytes", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(((PyObject *)__pyx_t_3));
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.set_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_11set_nbytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_nbytes); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_11set_nbytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_nbytes) {
  Py_ssize_t __pyx_v_nbytes;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_nbytes (wrapper)", 0);
  assert(__pyx_arg_nbytes); {
    __pyx_v_nbytes = __Pyx_PyIndex_AsSsize_t(__pyx_arg_nbytes); if (unlikely((__pyx_v_nbytes == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1381, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.TaskState.set_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_10set_nbytes(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self), ((Py_ssize_t)__pyx_v_nbytes));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_10set_nbytes(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, Py_ssize_t __pyx_v_nbytes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_nbytes", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(__pyx_v_self, __pyx_v_nbytes, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.set_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1382:         diff: Py_ssize_t = nbytes
  __pyx_v_diff = __pyx_v_nbytes;
+1383:         old_nbytes: Py_ssize_t = self._nbytes
  __pyx_t_1 = __pyx_v_self->_nbytes;
  __pyx_v_old_nbytes = __pyx_t_1;
+1384:         if old_nbytes >= 0:
  __pyx_t_2 = ((__pyx_v_old_nbytes >= 0) != 0);
  if (__pyx_t_2) {
/* … */
  }
+1385:             diff -= old_nbytes
    __pyx_v_diff = (__pyx_v_diff - __pyx_v_old_nbytes);
+1386:         self._group._nbytes_total += diff
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_group));
  __pyx_t_3 = __pyx_v_self->_group;
  __pyx_t_3->_nbytes_total = (__pyx_t_3->_nbytes_total + __pyx_v_diff);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+1387:         self._group._nbytes_in_memory += diff
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_group));
  __pyx_t_3 = __pyx_v_self->_group;
  __pyx_t_3->_nbytes_in_memory = (__pyx_t_3->_nbytes_in_memory + __pyx_v_diff);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
 1388:         ws: WorkerState
+1389:         for ws in self._who_has:
  __pyx_t_1 = 0;
  __pyx_t_7 = __Pyx_set_iterator(__pyx_v_self->_who_has, 1, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_4);
  __pyx_t_4 = __pyx_t_7;
  __pyx_t_7 = 0;
  while (1) {
    __pyx_t_8 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_1, &__pyx_t_7, __pyx_t_6);
    if (unlikely(__pyx_t_8 == 0)) break;
    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1389, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_7));
    __pyx_t_7 = 0;
+1390:             ws._nbytes += diff
    __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes + __pyx_v_diff);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1391:         self._nbytes = nbytes
  __pyx_v_self->_nbytes = __pyx_v_nbytes;
 1392: 
+1393:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_13__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_13__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_12__repr__(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_12__repr__(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1394:         return "<Task %r %s>" % (self._key, self._state)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Task);
  __pyx_t_2 += 6;
  __Pyx_GIVEREF(__pyx_kp_u_Task);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Task);
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_self->_key), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__7);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__7);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__7);
  __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_self->_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__3);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__3);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__3);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1395: 
 1396:     @ccall
+1397:     def validate(self):
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_15validate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_9TaskState_validate(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_cs = NULL;
  PyObject *__pyx_v_ws = NULL;
  PyObject *__pyx_v_ts = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_15validate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_15validate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_14validate(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_14validate(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_validate(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1398:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+1399:             for cs in self._who_wants:
      __pyx_t_5 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_self->_who_wants, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1399, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1399, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cs, __pyx_t_8);
        __pyx_t_8 = 0;
+1400:                 assert isinstance(cs, ClientState), (repr(cs), self._who_wants)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_cs, __pyx_ptype_11distributed_9scheduler_ClientState); 
          if (unlikely(!(__pyx_t_10 != 0))) {
            __pyx_t_8 = PyObject_Repr(__pyx_v_cs); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1400, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1400, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
            __Pyx_INCREF(__pyx_v_self->_who_wants);
            __Pyx_GIVEREF(__pyx_v_self->_who_wants);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_self->_who_wants);
            __pyx_t_8 = 0;
            __pyx_t_8 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1400, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 1400, __pyx_L3_error)
          }
        }
        #endif
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1401:             for ws in self._who_has:
      __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_self->_who_has, 1, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1401, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1401, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_ws, __pyx_t_8);
        __pyx_t_8 = 0;
+1402:                 assert isinstance(ws, WorkerState), (repr(ws), self._who_has)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_ws, __pyx_ptype_11distributed_9scheduler_WorkerState); 
          if (unlikely(!(__pyx_t_10 != 0))) {
            __pyx_t_8 = PyObject_Repr(__pyx_v_ws); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1402, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1402, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
            __Pyx_INCREF(__pyx_v_self->_who_has);
            __Pyx_GIVEREF(__pyx_v_self->_who_has);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_self->_who_has);
            __pyx_t_8 = 0;
            __pyx_t_8 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1402, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 1402, __pyx_L3_error)
          }
        }
        #endif
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1403:             for ts in self._dependencies:
      __pyx_t_5 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_self->_dependencies, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1403, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1403, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_ts, __pyx_t_8);
        __pyx_t_8 = 0;
+1404:                 assert isinstance(ts, TaskState), (repr(ts), self._dependencies)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_ptype_11distributed_9scheduler_TaskState); 
          if (unlikely(!(__pyx_t_10 != 0))) {
            __pyx_t_8 = PyObject_Repr(__pyx_v_ts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1404, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1404, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
            __Pyx_INCREF(__pyx_v_self->_dependencies);
            __Pyx_GIVEREF(__pyx_v_self->_dependencies);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_self->_dependencies);
            __pyx_t_8 = 0;
            __pyx_t_8 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1404, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 1404, __pyx_L3_error)
          }
        }
        #endif
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1405:             for ts in self._dependents:
      __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_self->_dependents, 1, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1405, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1405, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_ts, __pyx_t_8);
        __pyx_t_8 = 0;
+1406:                 assert isinstance(ts, TaskState), (repr(ts), self._dependents)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_ptype_11distributed_9scheduler_TaskState); 
          if (unlikely(!(__pyx_t_10 != 0))) {
            __pyx_t_8 = PyObject_Repr(__pyx_v_ts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1406, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1406, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
            __Pyx_INCREF(__pyx_v_self->_dependents);
            __Pyx_GIVEREF(__pyx_v_self->_dependents);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_self->_dependents);
            __pyx_t_8 = 0;
            __pyx_t_8 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1406, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 1406, __pyx_L3_error)
          }
        }
        #endif
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1407:             validate_task_state(self)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_validate_task_state); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1407, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_4 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_11, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_8, ((PyObject *)__pyx_v_self));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1407, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1408:         except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("distributed.scheduler.TaskState.validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_11) < 0) __PYX_ERR(0, 1408, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_v_e = __pyx_t_8;
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_e);
          __pyx_v_e = NULL;
          goto __pyx_L23;
        }
        __pyx_L22_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __pyx_t_7 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          }
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
          __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_15;
          goto __pyx_L5_except_error;
        }
        __pyx_L23:;
      }
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+1409:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1409, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1409, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
          }
        }
        __pyx_t_12 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_13, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1409, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+1410:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1410, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 1410, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (__pyx_t_10) {
/* … */
        }
      }
+1411:                 import pdb
          __pyx_t_12 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1411, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_v_pdb = __pyx_t_12;
          __pyx_t_12 = 0;
 1412: 
+1413:                 pdb.set_trace()
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1413, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_13 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
            if (likely(__pyx_t_13)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_14, function);
            }
          }
          __pyx_t_12 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1413, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 1414: 
+1415:     def get_nbytes_deps(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_17get_nbytes_deps(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_9TaskState_17get_nbytes_deps(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes_deps (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9TaskState_16get_nbytes_deps(((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9TaskState_16get_nbytes_deps(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_self) {
  Py_ssize_t __pyx_v_nbytes;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes_deps", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.TaskState.get_nbytes_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1416:         nbytes: Py_ssize_t = 0
  __pyx_v_nbytes = 0;
 1417:         ts: TaskState
+1418:         for ts in self._dependencies:
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_self->_dependencies, 1, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1418, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+1419:             nbytes += ts.get_nbytes()
    __pyx_t_7 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1419, __pyx_L1_error)
    __pyx_v_nbytes = (__pyx_v_nbytes + __pyx_t_7);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1420:         return nbytes
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_nbytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1421: 
 1422: 
+1423: class _StateLegacyMapping(Mapping):
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_Mapping); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_16);
  __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_15, __pyx_n_s_StateLegacyMapping, __pyx_n_s_StateLegacyMapping, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, __pyx_kp_s_A_mapping_interface_mimicking_t); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_n_s_StateLegacyMapping, __pyx_t_15, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_StateLegacyMapping, __pyx_t_13) < 0) __PYX_ERR(0, 1423, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 1424:     """
 1425:     A mapping interface mimicking the former Scheduler state dictionaries.
 1426:     """
 1427: 
+1428:     def __init__(self, states, accessor):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_states = 0;
  PyObject *__pyx_v_accessor = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_states,&__pyx_n_s_accessor,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_states)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 1428, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_accessor)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 1428, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1428, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_states = values[1];
    __pyx_v_accessor = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1428, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_19_StateLegacyMapping___init__(__pyx_self, __pyx_v_self, __pyx_v_states, __pyx_v_accessor);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_19_StateLegacyMapping___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_states, PyObject *__pyx_v_accessor) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__120 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_states, __pyx_n_s_accessor); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__120);
  __Pyx_GIVEREF(__pyx_tuple__120);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_1__init__, 0, __pyx_n_s_StateLegacyMapping___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_13) < 0) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 1428, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 1428, __pyx_L1_error)
+1429:         self._states = states
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_states_2, __pyx_v_states) < 0) __PYX_ERR(0, 1429, __pyx_L1_error)
+1430:         self._accessor = accessor
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2, __pyx_v_accessor) < 0) __PYX_ERR(0, 1430, __pyx_L1_error)
 1431: 
+1432:     def __iter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__122 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 1432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__122);
  __Pyx_GIVEREF(__pyx_tuple__122);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_3__iter__, 0, __pyx_n_s_StateLegacyMapping___iter, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__123)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_iter, __pyx_t_13) < 0) __PYX_ERR(0, 1432, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_iter, 1432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(0, 1432, __pyx_L1_error)
+1433:         return iter(self._states)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1434: 
+1435:     def __len__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_5__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_5__len__ = {"__len__", (PyCFunction)__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_5__len__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_5__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_4__len__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_4__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__124 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 1435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__124);
  __Pyx_GIVEREF(__pyx_tuple__124);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_5__len__, 0, __pyx_n_s_StateLegacyMapping___len, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_len_2, __pyx_t_13) < 0) __PYX_ERR(0, 1435, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_len_2, 1435, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 1435, __pyx_L1_error)
+1436:         return len(self._states)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1437: 
+1438:     def __getitem__(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_7__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_7__getitem__ = {"__getitem__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_7__getitem__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_7__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); __PYX_ERR(0, 1438, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) __PYX_ERR(0, 1438, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1438, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_6__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_6__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__126 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 1438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__126);
  __Pyx_GIVEREF(__pyx_tuple__126);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_7__getitem__, 0, __pyx_n_s_StateLegacyMapping___getitem, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__127)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_getitem, __pyx_t_13) < 0) __PYX_ERR(0, 1438, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__127 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__126, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_getitem, 1438, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__127)) __PYX_ERR(0, 1438, __pyx_L1_error)
+1439:         return self._accessor(self._states[key])
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1440: 
+1441:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_9__repr__ = {"__repr__", (PyCFunction)__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_9__repr__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_19_StateLegacyMapping_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_8__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_19_StateLegacyMapping_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacyMapping.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__128 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(0, 1441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__128);
  __Pyx_GIVEREF(__pyx_tuple__128);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_19_StateLegacyMapping_9__repr__, 0, __pyx_n_s_StateLegacyMapping___repr, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__129)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_repr, __pyx_t_13) < 0) __PYX_ERR(0, 1441, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__129 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__128, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_repr, 1441, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__129)) __PYX_ERR(0, 1441, __pyx_L1_error)
+1442:         return "%s(%s)" % (self.__class__, dict(self))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_class); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u__8);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__8);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__8);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_5), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__9);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__9);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__9);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1443: 
 1444: 
+1445: class _OptionalStateLegacyMapping(_StateLegacyMapping):
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_StateLegacyMapping); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_15);
  __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_16, __pyx_n_s_OptionalStateLegacyMapping, __pyx_n_s_OptionalStateLegacyMapping, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, __pyx_kp_s_Similar_to__StateLegacyMapping); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_OptionalStateLegacyMapping, __pyx_t_16, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_OptionalStateLegacyMapping, __pyx_t_13) < 0) __PYX_ERR(0, 1445, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 1446:     """
 1447:     Similar to _StateLegacyMapping, but a false-y value is interpreted
 1448:     as a missing key.
 1449:     """
 1450: 
 1451:     # For tasks etc.
 1452: 
+1453:     def __iter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_1__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_1__iter__ = {"__iter__", (PyCFunction)__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_1__iter__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_1__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping___iter__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping___iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_4___iter__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_4___iter__ *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_4___iter__(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_4___iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_4___iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1453, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_2generator, __pyx_codeobj__10, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter, __pyx_n_s_OptionalStateLegacyMapping___it, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 1453, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler._OptionalStateLegacyMapping.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1453, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__130 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_accessor, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(0, 1453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__130);
  __Pyx_GIVEREF(__pyx_tuple__130);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_1__iter__, 0, __pyx_n_s_OptionalStateLegacyMapping___it, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_iter, __pyx_t_13) < 0) __PYX_ERR(0, 1453, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_iter, 1453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 1453, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_4___iter__ {
  PyObject_HEAD
  PyObject *__pyx_v_accessor;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

+1454:         accessor = self._accessor
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_accessor = __pyx_t_1;
  __pyx_t_1 = 0;
+1455:         for k, v in self._states.items():
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 1455, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_6, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
+1456:             if accessor(v):
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_accessor);
    __pyx_t_6 = __pyx_cur_scope->__pyx_v_accessor; __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_cur_scope->__pyx_v_v) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1456, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_9) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+1457:                 yield k
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
      __pyx_r = __pyx_cur_scope->__pyx_v_k;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
      __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1457, __pyx_L1_error)
 1458: 
+1459:     def __len__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_4__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_4__len__ = {"__len__", (PyCFunction)__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_4__len__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_4__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_3__len__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_7__len___2generator27(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_3__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_5___len__(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_5___len__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1459, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler._OptionalStateLegacyMapping.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__131 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_accessor, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(0, 1459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__131);
  __Pyx_GIVEREF(__pyx_tuple__131);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_4__len__, 0, __pyx_n_s_OptionalStateLegacyMapping___le_2, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__132)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_len_2, __pyx_t_13) < 0) __PYX_ERR(0, 1459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_len_2, 1459, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) __PYX_ERR(0, 1459, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ {
  PyObject_HEAD
  PyObject *__pyx_v_accessor;
  PyObject *__pyx_v_self;
};

+1460:         accessor = self._accessor
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_accessor = __pyx_t_1;
  __pyx_t_1 = 0;
+1461:         return sum(bool(accessor(v)) for v in self._states.values())
static PyObject *__pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_7__len___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_6_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_6_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_6_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_6_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_6_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1461, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_7__len___2generator27, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_OptionalStateLegacyMapping___le, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler._OptionalStateLegacyMapping.__len__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_27_OptionalStateLegacyMapping_7__len___2generator27(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1461, __pyx_L1_error) }
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 1461, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_accessor)) { __Pyx_RaiseClosureNameError("accessor"); __PYX_ERR(0, 1461, __pyx_L1_error) }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_accessor);
    __pyx_t_5 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_accessor; __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_cur_scope->__pyx_v_v) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyBool_FromLong((!(!__pyx_t_9))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1461, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_7__len___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_6_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_5___len__ *__pyx_outer_scope;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

 1462: 
+1463:     def __getitem__(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_6__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_6__getitem__ = {"__getitem__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_6__getitem__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_27_OptionalStateLegacyMapping_6__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); __PYX_ERR(0, 1463, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) __PYX_ERR(0, 1463, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1463, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler._OptionalStateLegacyMapping.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_5__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_27_OptionalStateLegacyMapping_5__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler._OptionalStateLegacyMapping.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__133 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_v); if (unlikely(!__pyx_tuple__133)) __PYX_ERR(0, 1463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__133);
  __Pyx_GIVEREF(__pyx_tuple__133);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_27_OptionalStateLegacyMapping_6__getitem__, 0, __pyx_n_s_OptionalStateLegacyMapping___ge, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__134)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_getitem, __pyx_t_13) < 0) __PYX_ERR(0, 1463, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__134 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_getitem, 1463, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__134)) __PYX_ERR(0, 1463, __pyx_L1_error)
+1464:         v = self._accessor(self._states[key])
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_v = __pyx_t_1;
  __pyx_t_1 = 0;
+1465:         if v:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_v); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1465, __pyx_L1_error)
  if (likely(__pyx_t_5)) {
/* … */
  }
+1466:             return v
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_v);
    __pyx_r = __pyx_v_v;
    goto __pyx_L0;
 1467:         else:
+1468:             raise KeyError
  /*else*/ {
    __Pyx_Raise(__pyx_builtin_KeyError, 0, 0, 0);
    __PYX_ERR(0, 1468, __pyx_L1_error)
  }
 1469: 
 1470: 
+1471: class _StateLegacySet(Set):
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_Set); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_16);
  __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_15, __pyx_n_s_StateLegacySet, __pyx_n_s_StateLegacySet, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, __pyx_kp_s_Similar_to__StateLegacyMapping_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_n_s_StateLegacySet, __pyx_t_15, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_StateLegacySet, __pyx_t_13) < 0) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 1472:     """
 1473:     Similar to _StateLegacyMapping, but exposes a set containing
 1474:     all values with a true value.
 1475:     """
 1476: 
 1477:     # For loose_restrictions
 1478: 
+1479:     def __init__(self, states, accessor):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15_StateLegacySet_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_15_StateLegacySet_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_states = 0;
  PyObject *__pyx_v_accessor = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_states,&__pyx_n_s_accessor,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_states)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 1479, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_accessor)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 1479, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1479, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_states = values[1];
    __pyx_v_accessor = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1479, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_15_StateLegacySet___init__(__pyx_self, __pyx_v_self, __pyx_v_states, __pyx_v_accessor);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_states, PyObject *__pyx_v_accessor) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__135 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_states, __pyx_n_s_accessor); if (unlikely(!__pyx_tuple__135)) __PYX_ERR(0, 1479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__135);
  __Pyx_GIVEREF(__pyx_tuple__135);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_15_StateLegacySet_1__init__, 0, __pyx_n_s_StateLegacySet___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__136)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_13) < 0) __PYX_ERR(0, 1479, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__136 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__135, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 1479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__136)) __PYX_ERR(0, 1479, __pyx_L1_error)
+1480:         self._states = states
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_states_2, __pyx_v_states) < 0) __PYX_ERR(0, 1480, __pyx_L1_error)
+1481:         self._accessor = accessor
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2, __pyx_v_accessor) < 0) __PYX_ERR(0, 1481, __pyx_L1_error)
 1482: 
+1483:     def __iter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15_StateLegacySet_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_11distributed_9scheduler_15_StateLegacySet_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_15_StateLegacySet_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_15_StateLegacySet_8__iter___2generator28(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_7___iter__(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_7___iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1483, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__137 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__137)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__137);
  __Pyx_GIVEREF(__pyx_tuple__137);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_15_StateLegacySet_3__iter__, 0, __pyx_n_s_StateLegacySet___iter, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__138)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_iter, __pyx_t_13) < 0) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__138 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__137, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_iter, 1483, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__138)) __PYX_ERR(0, 1483, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ {
  PyObject_HEAD
  PyObject *__pyx_v_self;
};

+1484:         return (k for k, v in self._states.items() if self._accessor(v))
static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet_8__iter___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_8_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_8_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_8_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_8_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_8_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1484, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_15_StateLegacySet_8__iter___2generator28, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_StateLegacySet___iter___locals, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 1484, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__iter__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_15_StateLegacySet_8__iter___2generator28(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1484, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1484, __pyx_L1_error) }
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 1484, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_6, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1484, __pyx_L1_error) }
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_cur_scope->__pyx_v_v) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1484, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_9) {
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
      __pyx_r = __pyx_cur_scope->__pyx_v_k;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
      __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1484, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_15_StateLegacySet_8__iter___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_8_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_7___iter__ *__pyx_outer_scope;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

 1485: 
+1486:     def __len__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_5__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15_StateLegacySet_5__len__ = {"__len__", (PyCFunction)__pyx_pw_11distributed_9scheduler_15_StateLegacySet_5__len__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_5__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_15_StateLegacySet_4__len__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet_4__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__139 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__139)) __PYX_ERR(0, 1486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__139);
  __Pyx_GIVEREF(__pyx_tuple__139);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_15_StateLegacySet_5__len__, 0, __pyx_n_s_StateLegacySet___len, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__140)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_len_2, __pyx_t_13) < 0) __PYX_ERR(0, 1486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__140 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_len_2, 1486, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__140)) __PYX_ERR(0, 1486, __pyx_L1_error)
+1487:         return sum(map(bool, map(self._accessor, self._states.values())))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject*)&PyBool_Type));
  __Pyx_GIVEREF(((PyObject*)&PyBool_Type));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject*)&PyBool_Type));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1488: 
+1489:     def __contains__(self, k):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_7__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15_StateLegacySet_7__contains__ = {"__contains__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_15_StateLegacySet_7__contains__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_7__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_k = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_k,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, 1); __PYX_ERR(0, 1489, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__contains__") < 0)) __PYX_ERR(0, 1489, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_k = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1489, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_15_StateLegacySet_6__contains__(__pyx_self, __pyx_v_self, __pyx_v_k);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet_6__contains__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_k) {
  PyObject *__pyx_v_st = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_st);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__141 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_k, __pyx_n_s_st); if (unlikely(!__pyx_tuple__141)) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__141);
  __Pyx_GIVEREF(__pyx_tuple__141);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_15_StateLegacySet_7__contains__, 0, __pyx_n_s_StateLegacySet___contains, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__142)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_contains, __pyx_t_13) < 0) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__142 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__141, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_contains, 1489, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__142)) __PYX_ERR(0, 1489, __pyx_L1_error)
+1490:         st = self._states.get(k)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_states_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_k);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_st = __pyx_t_1;
  __pyx_t_1 = 0;
+1491:         return st is not None and bool(self._accessor(st))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = (__pyx_v_st != Py_None);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_accessor_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_st) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_st);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(!__pyx_t_4))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1492: 
+1493:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_15_StateLegacySet_9__repr__ = {"__repr__", (PyCFunction)__pyx_pw_11distributed_9scheduler_15_StateLegacySet_9__repr__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_15_StateLegacySet_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_15_StateLegacySet_8__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_15_StateLegacySet_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._StateLegacySet.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__143 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__143)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__143);
  __Pyx_GIVEREF(__pyx_tuple__143);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_15_StateLegacySet_9__repr__, 0, __pyx_n_s_StateLegacySet___repr, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__144)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_repr, __pyx_t_13) < 0) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__144 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_repr, 1493, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__144)) __PYX_ERR(0, 1493, __pyx_L1_error)
+1494:         return "%s(%s)" % (self.__class__, set(self))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_class); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u__8);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__8);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__8);
  __pyx_t_5 = PySet_New(__pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_5), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__9);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__9);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__9);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1495: 
 1496: 
+1497: def _legacy_task_key_set(tasks):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_19_legacy_task_key_set(PyObject *__pyx_self, PyObject *__pyx_v_tasks); /*proto*/
static char __pyx_doc_11distributed_9scheduler_18_legacy_task_key_set[] = "\n    Transform a set of task states into a set of task keys.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_19_legacy_task_key_set = {"_legacy_task_key_set", (PyCFunction)__pyx_pw_11distributed_9scheduler_19_legacy_task_key_set, METH_O, __pyx_doc_11distributed_9scheduler_18_legacy_task_key_set};
static PyObject *__pyx_pw_11distributed_9scheduler_19_legacy_task_key_set(PyObject *__pyx_self, PyObject *__pyx_v_tasks) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_task_key_set (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_18_legacy_task_key_set(__pyx_self, ((PyObject *)__pyx_v_tasks));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_18_legacy_task_key_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tasks) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr16__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_task_key_set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._legacy_task_key_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr16__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__145 = PyTuple_Pack(3, __pyx_n_s_tasks, __pyx_n_s_ts, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__145)) __PYX_ERR(0, 1497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__145);
  __Pyx_GIVEREF(__pyx_tuple__145);
/* … */
  __pyx_t_15 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_19_legacy_task_key_set, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_legacy_task_key_set, __pyx_t_15) < 0) __PYX_ERR(0, 1497, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_codeobj__146 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_legacy_task_key_set, 1497, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__146)) __PYX_ERR(0, 1497, __pyx_L1_error)
 1498:     """
 1499:     Transform a set of task states into a set of task keys.
 1500:     """
 1501:     ts: TaskState
+1502:     return {ts._key for ts in tasks}
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1502, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_tasks)) || PyTuple_CheckExact(__pyx_v_tasks)) {
      __pyx_t_2 = __pyx_v_tasks; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_tasks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1502, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1502, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1502, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1502, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1502, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1502, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1502, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1502, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr16__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
      __pyx_t_5 = 0;
      if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_9genexpr16__pyx_v_ts->_key))) __PYX_ERR(0, 1502, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr16__pyx_v_ts); __pyx_9genexpr16__pyx_v_ts = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr16__pyx_v_ts); __pyx_9genexpr16__pyx_v_ts = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1503: 
 1504: 
+1505: def _legacy_client_key_set(clients):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_21_legacy_client_key_set(PyObject *__pyx_self, PyObject *__pyx_v_clients); /*proto*/
static char __pyx_doc_11distributed_9scheduler_20_legacy_client_key_set[] = "\n    Transform a set of client states into a set of client keys.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_21_legacy_client_key_set = {"_legacy_client_key_set", (PyCFunction)__pyx_pw_11distributed_9scheduler_21_legacy_client_key_set, METH_O, __pyx_doc_11distributed_9scheduler_20_legacy_client_key_set};
static PyObject *__pyx_pw_11distributed_9scheduler_21_legacy_client_key_set(PyObject *__pyx_self, PyObject *__pyx_v_clients) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_client_key_set (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_20_legacy_client_key_set(__pyx_self, ((PyObject *)__pyx_v_clients));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_20_legacy_client_key_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_clients) {
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_9genexpr17__pyx_v_cs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_client_key_set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._legacy_client_key_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr17__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__147 = PyTuple_Pack(3, __pyx_n_s_clients, __pyx_n_s_cs, __pyx_n_s_cs); if (unlikely(!__pyx_tuple__147)) __PYX_ERR(0, 1505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__147);
  __Pyx_GIVEREF(__pyx_tuple__147);
/* … */
  __pyx_t_15 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_21_legacy_client_key_set, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_legacy_client_key_set, __pyx_t_15) < 0) __PYX_ERR(0, 1505, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_codeobj__148 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__147, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_legacy_client_key_set, 1505, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__148)) __PYX_ERR(0, 1505, __pyx_L1_error)
 1506:     """
 1507:     Transform a set of client states into a set of client keys.
 1508:     """
 1509:     cs: ClientState
+1510:     return {cs._client_key for cs in clients}
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1510, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_clients)) || PyTuple_CheckExact(__pyx_v_clients)) {
      __pyx_t_2 = __pyx_v_clients; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_clients); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1510, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1510, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1510, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1510, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1510, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1510, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 1510, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr17__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_5));
      __pyx_t_5 = 0;
      if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_9genexpr17__pyx_v_cs->_client_key))) __PYX_ERR(0, 1510, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr17__pyx_v_cs); __pyx_9genexpr17__pyx_v_cs = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr17__pyx_v_cs); __pyx_9genexpr17__pyx_v_cs = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1511: 
 1512: 
+1513: def _legacy_worker_key_set(workers):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_23_legacy_worker_key_set(PyObject *__pyx_self, PyObject *__pyx_v_workers); /*proto*/
static char __pyx_doc_11distributed_9scheduler_22_legacy_worker_key_set[] = "\n    Transform a set of worker states into a set of worker keys.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_23_legacy_worker_key_set = {"_legacy_worker_key_set", (PyCFunction)__pyx_pw_11distributed_9scheduler_23_legacy_worker_key_set, METH_O, __pyx_doc_11distributed_9scheduler_22_legacy_worker_key_set};
static PyObject *__pyx_pw_11distributed_9scheduler_23_legacy_worker_key_set(PyObject *__pyx_self, PyObject *__pyx_v_workers) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_worker_key_set (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_22_legacy_worker_key_set(__pyx_self, ((PyObject *)__pyx_v_workers));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_22_legacy_worker_key_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr18__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_worker_key_set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._legacy_worker_key_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr18__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__149 = PyTuple_Pack(3, __pyx_n_s_workers, __pyx_n_s_ws, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__149)) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__149);
  __Pyx_GIVEREF(__pyx_tuple__149);
/* … */
  __pyx_t_15 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_23_legacy_worker_key_set, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_legacy_worker_key_set, __pyx_t_15) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_codeobj__150 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__149, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_legacy_worker_key_set, 1513, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__150)) __PYX_ERR(0, 1513, __pyx_L1_error)
 1514:     """
 1515:     Transform a set of worker states into a set of worker keys.
 1516:     """
 1517:     ws: WorkerState
+1518:     return {ws._address for ws in workers}
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
      __pyx_t_2 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1518, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1518, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1518, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1518, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1518, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1518, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1518, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr18__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
      __pyx_t_5 = 0;
      if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_9genexpr18__pyx_v_ws->_address))) __PYX_ERR(0, 1518, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr18__pyx_v_ws); __pyx_9genexpr18__pyx_v_ws = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr18__pyx_v_ws); __pyx_9genexpr18__pyx_v_ws = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1519: 
 1520: 
+1521: def _legacy_task_key_dict(task_dict):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_25_legacy_task_key_dict(PyObject *__pyx_self, PyObject *__pyx_v_task_dict); /*proto*/
static char __pyx_doc_11distributed_9scheduler_24_legacy_task_key_dict[] = "\n    Transform a dict of {task state: value} into a dict of {task key: value}.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_25_legacy_task_key_dict = {"_legacy_task_key_dict", (PyCFunction)__pyx_pw_11distributed_9scheduler_25_legacy_task_key_dict, METH_O, __pyx_doc_11distributed_9scheduler_24_legacy_task_key_dict};
static PyObject *__pyx_pw_11distributed_9scheduler_25_legacy_task_key_dict(PyObject *__pyx_self, PyObject *__pyx_v_task_dict) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_task_key_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_24_legacy_task_key_dict(__pyx_self, ((PyObject *)__pyx_v_task_dict));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_24_legacy_task_key_dict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_task_dict) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr19__pyx_v_ts = NULL;
  PyObject *__pyx_9genexpr19__pyx_v_value = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_legacy_task_key_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler._legacy_task_key_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr19__pyx_v_ts);
  __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__151 = PyTuple_Pack(4, __pyx_n_s_task_dict, __pyx_n_s_ts, __pyx_n_s_ts, __pyx_n_s_value); if (unlikely(!__pyx_tuple__151)) __PYX_ERR(0, 1521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__151);
  __Pyx_GIVEREF(__pyx_tuple__151);
/* … */
  __pyx_t_15 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_25_legacy_task_key_dict, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_legacy_task_key_dict, __pyx_t_15) < 0) __PYX_ERR(0, 1521, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_codeobj__152 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__151, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_legacy_task_key_dict, 1521, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__152)) __PYX_ERR(0, 1521, __pyx_L1_error)
 1522:     """
 1523:     Transform a dict of {task state: value} into a dict of {task key: value}.
 1524:     """
 1525:     ts: TaskState
+1526:     return {ts._key: value for ts, value in task_dict.items()}
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1526, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = 0;
    if (unlikely(__pyx_v_task_dict == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 1526, __pyx_L5_error)
    }
    __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_task_dict, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1526, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
    while (1) {
      __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, &__pyx_t_7, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_8 == 0)) break;
      if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1526, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1526, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
      __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_value, __pyx_t_7);
      __pyx_t_7 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_9genexpr19__pyx_v_ts->_key, (PyObject*)__pyx_9genexpr19__pyx_v_value))) __PYX_ERR(0, 1526, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr19__pyx_v_ts); __pyx_9genexpr19__pyx_v_ts = 0;
    __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_value); __pyx_9genexpr19__pyx_v_value = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr19__pyx_v_ts); __pyx_9genexpr19__pyx_v_ts = 0;
    __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_value); __pyx_9genexpr19__pyx_v_value = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1527: 
 1528: 
+1529: def _task_key_or_none(task):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_27_task_key_or_none(PyObject *__pyx_self, PyObject *__pyx_v_task); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_27_task_key_or_none = {"_task_key_or_none", (PyCFunction)__pyx_pw_11distributed_9scheduler_27_task_key_or_none, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_27_task_key_or_none(PyObject *__pyx_self, PyObject *__pyx_v_task) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_task_key_or_none (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_26_task_key_or_none(__pyx_self, ((PyObject *)__pyx_v_task));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_26_task_key_or_none(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_task) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_task_key_or_none", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler._task_key_or_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__153 = PyTuple_Pack(1, __pyx_n_s_task); if (unlikely(!__pyx_tuple__153)) __PYX_ERR(0, 1529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__153);
  __Pyx_GIVEREF(__pyx_tuple__153);
/* … */
  __pyx_t_15 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_27_task_key_or_none, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_task_key_or_none, __pyx_t_15) < 0) __PYX_ERR(0, 1529, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_codeobj__154 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__153, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_task_key_or_none, 1529, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__154)) __PYX_ERR(0, 1529, __pyx_L1_error)
+1530:     return task.key if task is not None else None
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__pyx_v_task != Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_task, __pyx_n_s_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1531: 
 1532: 
 1533: @cclass
+1534: class SchedulerState:
struct __pyx_obj_11distributed_9scheduler_SchedulerState {
  PyObject_HEAD
  struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *__pyx_vtab;
  PyObject *_aliases;
  double _bandwidth;
  PyObject *_clients;
  PyObject *_extensions;
  PyObject *_host_info;
  PyObject *_idle;
  PyObject *_idle_dv;
  Py_ssize_t _n_tasks;
  PyObject *_resources;
  PyObject *_saturated;
  PyObject *_tasks;
  PyObject *_task_groups;
  PyObject *_task_prefixes;
  PyObject *_task_metadata;
  Py_ssize_t _total_nthreads;
  double _total_occupancy;
  PyObject *_unknown_durations;
  PyObject *_unrunnable;
  int _validate;
  PyObject *_workers;
  PyObject *_workers_dv;
};
/* … */
struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *(*decide_worker)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
  double (*set_duration_estimate)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
  PyObject *(*remove_key)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*check_idle_saturated)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch, struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_check_idle_saturated *__pyx_optional_args);
  double (*get_comm_cost)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
  double (*get_task_duration)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch, struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_get_task_duration *__pyx_optional_args);
  PyObject *(*valid_workers)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, int __pyx_skip_dispatch);
  PyObject *(*consume_resources)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
  PyObject *(*release_resources)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
  PyObject *(*coerce_hostname)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*worker_objective)(struct __pyx_obj_11distributed_9scheduler_SchedulerState *, struct __pyx_obj_11distributed_9scheduler_TaskState *, struct __pyx_obj_11distributed_9scheduler_WorkerState *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *__pyx_vtabptr_11distributed_9scheduler_SchedulerState;
 1535:     """Underlying task state of dynamic scheduler
 1536: 
 1537:     Tracks the current state of workers, data, and computations.
 1538: 
 1539:     Handles transitions between different task states. Notifies the
 1540:     Scheduler of changes by messaging passing through Queues, which the
 1541:     Scheduler listens to responds accordingly.
 1542: 
 1543:     All events are handled quickly, in linear time with respect to their
 1544:     input (which is often of constant size) and generally within a
 1545:     millisecond. Additionally when Cythonized, this can be faster still.
 1546:     To accomplish this the scheduler tracks a lot of state.  Every
 1547:     operation maintains the consistency of this state.
 1548: 
 1549:     Users typically do not interact with ``Transitions`` directly. Instead
 1550:     users interact with the ``Client``, which in turn engages the
 1551:     ``Scheduler`` affecting different transitions here under-the-hood. In
 1552:     the background ``Worker``s also engage with the ``Scheduler``
 1553:     affecting these state transitions as well.
 1554: 
 1555:     **State**
 1556: 
 1557:     The ``Transitions`` object contains the following state variables.
 1558:     Each variable is listed along with what it stores and a brief
 1559:     description.
 1560: 
 1561:     * **tasks:** ``{task key: TaskState}``
 1562:         Tasks currently known to the scheduler
 1563:     * **unrunnable:** ``{TaskState}``
 1564:         Tasks in the "no-worker" state
 1565: 
 1566:     * **workers:** ``{worker key: WorkerState}``
 1567:         Workers currently connected to the scheduler
 1568:     * **idle:** ``{WorkerState}``:
 1569:         Set of workers that are not fully utilized
 1570:     * **saturated:** ``{WorkerState}``:
 1571:         Set of workers that are not over-utilized
 1572: 
 1573:     * **clients:** ``{client key: ClientState}``
 1574:         Clients currently connected to the scheduler
 1575: 
 1576:     * **task_duration:** ``{key-prefix: time}``
 1577:         Time we expect certain functions to take, e.g. ``{'sum': 0.25}``
 1578:     """
 1579: 
 1580:     _aliases: dict
 1581:     _bandwidth: double
 1582:     _clients: dict
 1583:     _extensions: dict
 1584:     _host_info: object
 1585:     _idle: object
 1586:     _idle_dv: dict
 1587:     _n_tasks: Py_ssize_t
 1588:     _resources: object
 1589:     _saturated: set
 1590:     _tasks: dict
 1591:     _task_groups: dict
 1592:     _task_prefixes: dict
 1593:     _task_metadata: dict
 1594:     _total_nthreads: Py_ssize_t
 1595:     _total_occupancy: double
 1596:     _unknown_durations: object
 1597:     _unrunnable: set
 1598:     _validate: bint
 1599:     _workers: object
 1600:     _workers_dv: dict
 1601: 
+1602:     def __init__(
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_aliases = 0;
  PyObject *__pyx_v_clients = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_host_info = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_v_tasks = 0;
  PyObject *__pyx_v_unrunnable = 0;
  int __pyx_v_validate;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return -1;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_aliases,&__pyx_n_s_clients,&__pyx_n_s_workers,&__pyx_n_s_host_info,&__pyx_n_s_resources,&__pyx_n_s_tasks,&__pyx_n_s_unrunnable,&__pyx_n_s_validate,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_14SchedulerState___init__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_aliases, PyObject *__pyx_v_clients, PyObject *__pyx_v_workers, PyObject *__pyx_v_host_info, PyObject *__pyx_v_resources, PyObject *__pyx_v_tasks, PyObject *__pyx_v_unrunnable, int __pyx_v_validate, PyObject *__pyx_v_kwargs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1603:         self,
+1604:         aliases: dict = None,
    values[0] = ((PyObject*)Py_None);
+1605:         clients: dict = None,
    values[1] = ((PyObject*)Py_None);
+1606:         workers=None,
    values[2] = ((PyObject *)Py_None);
+1607:         host_info=None,
    values[3] = ((PyObject *)Py_None);
+1608:         resources=None,
    values[4] = ((PyObject *)Py_None);
+1609:         tasks: dict = None,
    values[5] = ((PyObject*)Py_None);
+1610:         unrunnable: set = None,
    values[6] = ((PyObject*)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aliases);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_clients);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_host_info);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tasks);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_unrunnable);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_validate);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1602, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_aliases = ((PyObject*)values[0]);
    __pyx_v_clients = ((PyObject*)values[1]);
    __pyx_v_workers = values[2];
    __pyx_v_host_info = values[3];
    __pyx_v_resources = values[4];
    __pyx_v_tasks = ((PyObject*)values[5]);
    __pyx_v_unrunnable = ((PyObject*)values[6]);
    if (values[7]) {
      __pyx_v_validate = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_validate == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1611, __pyx_L3_error)
    } else {
+1611:         validate: bint = False,
      __pyx_v_validate = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1602, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_aliases), (&PyDict_Type), 1, "aliases", 1))) __PYX_ERR(0, 1604, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_clients), (&PyDict_Type), 1, "clients", 1))) __PYX_ERR(0, 1605, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tasks), (&PyDict_Type), 1, "tasks", 1))) __PYX_ERR(0, 1609, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_unrunnable), (&PySet_Type), 1, "unrunnable", 1))) __PYX_ERR(0, 1610, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState___init__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_aliases, __pyx_v_clients, __pyx_v_workers, __pyx_v_host_info, __pyx_v_resources, __pyx_v_tasks, __pyx_v_unrunnable, __pyx_v_validate, __pyx_v_kwargs);
 1612:         **kwargs,
 1613:     ):
+1614:         if aliases is not None:
  __pyx_t_1 = (__pyx_v_aliases != ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1615:             self._aliases = aliases
    __Pyx_INCREF(__pyx_v_aliases);
    __Pyx_GIVEREF(__pyx_v_aliases);
    __Pyx_GOTREF(__pyx_v_self->_aliases);
    __Pyx_DECREF(__pyx_v_self->_aliases);
    __pyx_v_self->_aliases = __pyx_v_aliases;
 1616:         else:
+1617:             self._aliases = dict()
  /*else*/ {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_aliases);
    __Pyx_DECREF(__pyx_v_self->_aliases);
    __pyx_v_self->_aliases = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
+1618:         self._bandwidth = parse_bytes(
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_parse_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_self->_bandwidth = __pyx_t_8;
+1619:             dask.config.get("distributed.scheduler.bandwidth")
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_dask); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_config); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_kp_u_distributed_scheduler_bandwidth) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_u_distributed_scheduler_bandwidth);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1620:         )
+1621:         if clients is not None:
  __pyx_t_2 = (__pyx_v_clients != ((PyObject*)Py_None));
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1622:             self._clients = clients
    __Pyx_INCREF(__pyx_v_clients);
    __Pyx_GIVEREF(__pyx_v_clients);
    __Pyx_GOTREF(__pyx_v_self->_clients);
    __Pyx_DECREF(__pyx_v_self->_clients);
    __pyx_v_self->_clients = __pyx_v_clients;
 1623:         else:
+1624:             self._clients = dict()
  /*else*/ {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_clients);
    __Pyx_DECREF(__pyx_v_self->_clients);
    __pyx_v_self->_clients = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L4:;
+1625:         self._clients["fire-and-forget"] = ClientState("fire-and-forget")
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11distributed_9scheduler_ClientState), __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely(__pyx_v_self->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1625, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_self->_clients, __pyx_kp_u_fire_and_forget, __pyx_t_3) < 0)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_fire_and_forget); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);
+1626:         self._extensions = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_extensions);
  __Pyx_DECREF(__pyx_v_self->_extensions);
  __pyx_v_self->_extensions = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1627:         if host_info is not None:
  __pyx_t_1 = (__pyx_v_host_info != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+1628:             self._host_info = host_info
    __Pyx_INCREF(__pyx_v_host_info);
    __Pyx_GIVEREF(__pyx_v_host_info);
    __Pyx_GOTREF(__pyx_v_self->_host_info);
    __Pyx_DECREF(__pyx_v_self->_host_info);
    __pyx_v_self->_host_info = __pyx_v_host_info;
 1629:         else:
+1630:             self._host_info = defaultdict(dict)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)(&PyDict_Type)));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_host_info);
    __Pyx_DECREF(__pyx_v_self->_host_info);
    __pyx_v_self->_host_info = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L5:;
+1631:         self._idle = sortedcontainers.SortedDict()
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sortedcontainers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_SortedDict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_idle);
  __Pyx_DECREF(__pyx_v_self->_idle);
  __pyx_v_self->_idle = __pyx_t_3;
  __pyx_t_3 = 0;
+1632:         self._idle_dv: dict = cast(dict, self._idle)
  __pyx_t_3 = __pyx_v_self->_idle;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_idle_dv);
  __Pyx_DECREF(__pyx_v_self->_idle_dv);
  __pyx_v_self->_idle_dv = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1633:         self._n_tasks = 0
  __pyx_v_self->_n_tasks = 0;
+1634:         if resources is not None:
  __pyx_t_2 = (__pyx_v_resources != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
+1635:             self._resources = resources
    __Pyx_INCREF(__pyx_v_resources);
    __Pyx_GIVEREF(__pyx_v_resources);
    __Pyx_GOTREF(__pyx_v_self->_resources);
    __Pyx_DECREF(__pyx_v_self->_resources);
    __pyx_v_self->_resources = __pyx_v_resources;
 1636:         else:
+1637:             self._resources = defaultdict(dict)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PyDict_Type)));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_resources);
    __Pyx_DECREF(__pyx_v_self->_resources);
    __pyx_v_self->_resources = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L6:;
+1638:         self._saturated = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_saturated);
  __Pyx_DECREF(__pyx_v_self->_saturated);
  __pyx_v_self->_saturated = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1639:         if tasks is not None:
  __pyx_t_1 = (__pyx_v_tasks != ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L7;
  }
+1640:             self._tasks = tasks
    __Pyx_INCREF(__pyx_v_tasks);
    __Pyx_GIVEREF(__pyx_v_tasks);
    __Pyx_GOTREF(__pyx_v_self->_tasks);
    __Pyx_DECREF(__pyx_v_self->_tasks);
    __pyx_v_self->_tasks = __pyx_v_tasks;
 1641:         else:
+1642:             self._tasks = dict()
  /*else*/ {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_tasks);
    __Pyx_DECREF(__pyx_v_self->_tasks);
    __pyx_v_self->_tasks = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L7:;
+1643:         self._task_groups = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_task_groups);
  __Pyx_DECREF(__pyx_v_self->_task_groups);
  __pyx_v_self->_task_groups = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1644:         self._task_prefixes = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_task_prefixes);
  __Pyx_DECREF(__pyx_v_self->_task_prefixes);
  __pyx_v_self->_task_prefixes = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1645:         self._task_metadata = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_task_metadata);
  __Pyx_DECREF(__pyx_v_self->_task_metadata);
  __pyx_v_self->_task_metadata = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1646:         self._total_nthreads = 0
  __pyx_v_self->_total_nthreads = 0;
+1647:         self._total_occupancy = 0
  __pyx_v_self->_total_occupancy = 0.0;
+1648:         self._unknown_durations = defaultdict(set)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, ((PyObject *)(&PySet_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PySet_Type)));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_unknown_durations);
  __Pyx_DECREF(__pyx_v_self->_unknown_durations);
  __pyx_v_self->_unknown_durations = __pyx_t_3;
  __pyx_t_3 = 0;
+1649:         if unrunnable is not None:
  __pyx_t_2 = (__pyx_v_unrunnable != ((PyObject*)Py_None));
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
+1650:             self._unrunnable = unrunnable
    __Pyx_INCREF(__pyx_v_unrunnable);
    __Pyx_GIVEREF(__pyx_v_unrunnable);
    __Pyx_GOTREF(__pyx_v_self->_unrunnable);
    __Pyx_DECREF(__pyx_v_self->_unrunnable);
    __pyx_v_self->_unrunnable = __pyx_v_unrunnable;
 1651:         else:
+1652:             self._unrunnable = set()
  /*else*/ {
    __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_unrunnable);
    __Pyx_DECREF(__pyx_v_self->_unrunnable);
    __pyx_v_self->_unrunnable = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L8:;
+1653:         self._validate = validate
  __pyx_v_self->_validate = __pyx_v_validate;
+1654:         if workers is not None:
  __pyx_t_1 = (__pyx_v_workers != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L9;
  }
+1655:             self._workers = workers
    __Pyx_INCREF(__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_v_workers);
    __Pyx_GOTREF(__pyx_v_self->_workers);
    __Pyx_DECREF(__pyx_v_self->_workers);
    __pyx_v_self->_workers = __pyx_v_workers;
 1656:         else:
+1657:             self._workers = sortedcontainers.SortedDict()
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sortedcontainers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_SortedDict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_workers);
    __Pyx_DECREF(__pyx_v_self->_workers);
    __pyx_v_self->_workers = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L9:;
+1658:         self._workers_dv: dict = cast(dict, self._workers)
  __pyx_t_3 = __pyx_v_self->_workers;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_workers_dv);
  __Pyx_DECREF(__pyx_v_self->_workers_dv);
  __pyx_v_self->_workers_dv = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1659:         super().__init__(**kwargs)
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1660: 
 1661:     @property
+1662:     def aliases(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7aliases_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7aliases_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_7aliases___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_7aliases___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1663:         return self._aliases
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_aliases);
  __pyx_r = __pyx_v_self->_aliases;
  goto __pyx_L0;
 1664: 
 1665:     @property
+1666:     def bandwidth(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9bandwidth_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9bandwidth_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_9bandwidth___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_9bandwidth___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.bandwidth.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1667:         return self._bandwidth
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_bandwidth); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1668: 
 1669:     @property
+1670:     def clients(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7clients_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7clients_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_7clients___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_7clients___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1671:         return self._clients
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_clients);
  __pyx_r = __pyx_v_self->_clients;
  goto __pyx_L0;
 1672: 
 1673:     @property
+1674:     def extensions(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_10extensions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_10extensions_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_10extensions___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_10extensions___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1675:         return self._extensions
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_extensions);
  __pyx_r = __pyx_v_self->_extensions;
  goto __pyx_L0;
 1676: 
 1677:     @property
+1678:     def host_info(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9host_info_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9host_info_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_9host_info___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_9host_info___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1679:         return self._host_info
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_host_info);
  __pyx_r = __pyx_v_self->_host_info;
  goto __pyx_L0;
 1680: 
 1681:     @property
+1682:     def idle(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_4idle_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_4idle_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_4idle___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_4idle___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1683:         return self._idle
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_idle);
  __pyx_r = __pyx_v_self->_idle;
  goto __pyx_L0;
 1684: 
 1685:     @property
+1686:     def n_tasks(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7n_tasks_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7n_tasks_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_7n_tasks___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_7n_tasks___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.n_tasks.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1687:         return self._n_tasks
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_n_tasks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1688: 
 1689:     @property
+1690:     def resources(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9resources_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9resources_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_9resources___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_9resources___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1691:         return self._resources
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_resources);
  __pyx_r = __pyx_v_self->_resources;
  goto __pyx_L0;
 1692: 
 1693:     @property
+1694:     def saturated(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9saturated_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9saturated_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_9saturated___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_9saturated___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1695:         return self._saturated
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_saturated);
  __pyx_r = __pyx_v_self->_saturated;
  goto __pyx_L0;
 1696: 
 1697:     @property
+1698:     def tasks(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_5tasks_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_5tasks_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_5tasks___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_5tasks___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1699:         return self._tasks
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_tasks);
  __pyx_r = __pyx_v_self->_tasks;
  goto __pyx_L0;
 1700: 
 1701:     @property
+1702:     def task_groups(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_11task_groups_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_11task_groups_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_11task_groups___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_11task_groups___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1703:         return self._task_groups
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_task_groups);
  __pyx_r = __pyx_v_self->_task_groups;
  goto __pyx_L0;
 1704: 
 1705:     @property
+1706:     def task_prefixes(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13task_prefixes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13task_prefixes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_13task_prefixes___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_13task_prefixes___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1707:         return self._task_prefixes
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_task_prefixes);
  __pyx_r = __pyx_v_self->_task_prefixes;
  goto __pyx_L0;
 1708: 
 1709:     @property
+1710:     def task_metadata(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13task_metadata_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13task_metadata_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_13task_metadata___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_13task_metadata___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1711:         return self._task_metadata
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_task_metadata);
  __pyx_r = __pyx_v_self->_task_metadata;
  goto __pyx_L0;
 1712: 
 1713:     @property
+1714:     def total_nthreads(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_14total_nthreads_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_14total_nthreads_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_14total_nthreads___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_14total_nthreads___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.total_nthreads.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1715:         return self._total_nthreads
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_total_nthreads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1716: 
 1717:     @property
+1718:     def total_occupancy(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_15total_occupancy_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_15total_occupancy_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_15total_occupancy___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_15total_occupancy___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.total_occupancy.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1719:         return self._total_occupancy
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_total_occupancy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1719, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1720: 
 1721:     @total_occupancy.setter
+1722:     def total_occupancy(self, v: double):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_15total_occupancy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_15total_occupancy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v) {
  double __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_v); {
    __pyx_v_v = __pyx_PyFloat_AsDouble(__pyx_arg_v); if (unlikely((__pyx_v_v == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1722, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.total_occupancy.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_15total_occupancy_2__set__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((double)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_14SchedulerState_15total_occupancy_2__set__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, double __pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1723:         self._total_occupancy = v
  __pyx_v_self->_total_occupancy = __pyx_v_v;
 1724: 
 1725:     @property
+1726:     def unknown_durations(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_17unknown_durations_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_17unknown_durations_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_17unknown_durations___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_17unknown_durations___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1727:         return self._unknown_durations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_unknown_durations);
  __pyx_r = __pyx_v_self->_unknown_durations;
  goto __pyx_L0;
 1728: 
 1729:     @property
+1730:     def unrunnable(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_10unrunnable_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_10unrunnable_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_10unrunnable___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_10unrunnable___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1731:         return self._unrunnable
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_unrunnable);
  __pyx_r = __pyx_v_self->_unrunnable;
  goto __pyx_L0;
 1732: 
 1733:     @property
+1734:     def validate(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_8validate_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_8validate_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_8validate___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_8validate___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.validate.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1735:         return self._validate
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_validate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1736: 
 1737:     @validate.setter
+1738:     def validate(self, v: bint):
/* Python wrapper */
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_8validate_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v); /*proto*/
static int __pyx_pw_11distributed_9scheduler_14SchedulerState_8validate_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_v) {
  int __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_v); {
    __pyx_v_v = __Pyx_PyObject_IsTrue(__pyx_arg_v); if (unlikely((__pyx_v_v == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1738, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.validate.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_8validate_2__set__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((int)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11distributed_9scheduler_14SchedulerState_8validate_2__set__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, int __pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1739:         self._validate = v
  __pyx_v_self->_validate = __pyx_v_v;
 1740: 
 1741:     @property
+1742:     def workers(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7workers_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7workers_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_7workers___get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_7workers___get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1743:         return self._workers
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_workers);
  __pyx_r = __pyx_v_self->_workers;
  goto __pyx_L0;
 1744: 
 1745:     @property
+1746:     def __pdict__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9__pdict___1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9__pdict___1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_9__pdict_____get__(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_9__pdict_____get__(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.__pdict__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1747:         return {
  __Pyx_XDECREF(__pyx_r);
+1748:             "bandwidth": self._bandwidth,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->_bandwidth); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_bandwidth, __pyx_t_2) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1749:             "resources": self._resources,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_resources, __pyx_v_self->_resources) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1750:             "saturated": self._saturated,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_saturated, __pyx_v_self->_saturated) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1751:             "unrunnable": self._unrunnable,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_unrunnable, __pyx_v_self->_unrunnable) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1752:             "n_tasks": self._n_tasks,
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_n_tasks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_n_tasks, __pyx_t_2) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1753:             "unknown_durations": self._unknown_durations,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_unknown_durations, __pyx_v_self->_unknown_durations) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1754:             "validate": self._validate,
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->_validate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_validate, __pyx_t_2) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1755:             "tasks": self._tasks,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tasks, __pyx_v_self->_tasks) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1756:             "task_groups": self._task_groups,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_task_groups, __pyx_v_self->_task_groups) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1757:             "task_prefixes": self._task_prefixes,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_task_prefixes, __pyx_v_self->_task_prefixes) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1758:             "total_nthreads": self._total_nthreads,
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_total_nthreads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_total_nthreads, __pyx_t_2) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1759:             "total_occupancy": self._total_occupancy,
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->_total_occupancy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_total_occupancy, __pyx_t_2) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1760:             "extensions": self._extensions,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_extensions, __pyx_v_self->_extensions) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1761:             "clients": self._clients,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_clients, __pyx_v_self->_clients) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1762:             "workers": self._workers,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_workers, __pyx_v_self->_workers) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1763:             "idle": self._idle,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_idle, __pyx_v_self->_idle) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+1764:             "host_info": self._host_info,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_host_info, __pyx_v_self->_host_info) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1765:         }
 1766: 
+1767:     def transition_released_waiting(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_3transition_released_waiting(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_3transition_released_waiting(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_waiting (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_2transition_released_waiting(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_2transition_released_waiting(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_dep = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr20__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr21__pyx_v_dts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_waiting", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_dep);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr20__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr21__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1768:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+1769:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1769, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1769, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1769, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 1770:             dts: TaskState
+1771:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1771, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+1772:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1772, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1773: 
+1774:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+1775:                 assert ts._run_spec
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1775, __pyx_L3_error)
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1775, __pyx_L3_error)
          }
        }
        #endif
+1776:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1776, __pyx_L3_error)
          }
        }
        #endif
+1777:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1777, __pyx_L3_error)
          }
        }
        #endif
+1778:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1778, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1778, __pyx_L3_error)
          }
        }
        #endif
+1779:                 assert not any([dts._state == "forgotten" for dts in ts._dependencies])
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          { /* enter inner scope */
            __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = 0;
            __pyx_t_10 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1779, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF(__pyx_t_6);
            __pyx_t_6 = __pyx_t_10;
            __pyx_t_10 = 0;
            while (1) {
              __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_10, __pyx_t_9);
              if (unlikely(__pyx_t_11 == 0)) break;
              if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1779, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_10);
              if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1779, __pyx_L12_error)
              __Pyx_XDECREF_SET(__pyx_9genexpr20__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_10));
              __pyx_t_10 = 0;
              __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_9genexpr20__pyx_v_dts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1779, __pyx_L12_error)
              __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1779, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_10);
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 1779, __pyx_L12_error)
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr20__pyx_v_dts); __pyx_9genexpr20__pyx_v_dts = 0;
            goto __pyx_L15_exit_scope;
            __pyx_L12_error:;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr20__pyx_v_dts); __pyx_9genexpr20__pyx_v_dts = 0;
            goto __pyx_L3_error;
            __pyx_L15_exit_scope:;
          } /* exit inner scope */
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1779, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1779, __pyx_L3_error)
          }
        }
        #endif
 1780: 
+1781:             if ts._has_lost_dependencies:
      __pyx_t_5 = (__pyx_v_ts->_has_lost_dependencies != 0);
      if (__pyx_t_5) {
/* … */
      }
+1782:                 return {key: "forgotten"}, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1782, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_v_key, __pyx_n_u_forgotten) < 0) __PYX_ERR(0, 1782, __pyx_L3_error)
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1782, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
        __pyx_t_6 = 0;
        __pyx_r = __pyx_t_4;
        __pyx_t_4 = 0;
        goto __pyx_L7_try_return;
 1783: 
+1784:             ts.state = "waiting"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_waiting) < 0) __PYX_ERR(0, 1784, __pyx_L3_error)
 1785: 
+1786:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1786, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1787: 
 1788:             dts: TaskState
+1789:             for dts in ts._dependencies:
      __pyx_t_8 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1789, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_7, &__pyx_t_8, &__pyx_t_6, __pyx_t_9);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1789, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1789, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
+1790:                 if dts._exception_blame:
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_dts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1790, __pyx_L3_error)
        if (__pyx_t_5) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1791:                     ts._exception_blame = dts._exception_blame
          __pyx_t_6 = __pyx_v_dts->_exception_blame;
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_6);
          __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
          __Pyx_DECREF(__pyx_v_ts->_exception_blame);
          __pyx_v_ts->_exception_blame = __pyx_t_6;
          __pyx_t_6 = 0;
+1792:                     recommendations[key] = "erred"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_erred) < 0)) __PYX_ERR(0, 1792, __pyx_L3_error)
+1793:                     return recommendations, worker_msgs, client_msgs
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1793, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_v_recommendations);
          __Pyx_GIVEREF(__pyx_v_recommendations);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_recommendations);
          __Pyx_INCREF(__pyx_v_worker_msgs);
          __Pyx_GIVEREF(__pyx_v_worker_msgs);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_worker_msgs);
          __Pyx_INCREF(__pyx_v_client_msgs);
          __Pyx_GIVEREF(__pyx_v_client_msgs);
          PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_client_msgs);
          __pyx_r = __pyx_t_6;
          __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L7_try_return;
 1794: 
+1795:             for dts in ts._dependencies:
      __pyx_t_7 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1795, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_8, &__pyx_t_7, &__pyx_t_6, __pyx_t_9);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1795, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1795, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
+1796:                 dep = dts._key
        __pyx_t_6 = __pyx_v_dts->_key;
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_dep, ((PyObject*)__pyx_t_6));
        __pyx_t_6 = 0;
+1797:                 if not dts._who_has:
        __pyx_t_5 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
        __pyx_t_12 = ((!__pyx_t_5) != 0);
        if (__pyx_t_12) {
/* … */
        }
+1798:                     ts._waiting_on.add(dts)
          if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1798, __pyx_L3_error)
          }
          __pyx_t_13 = PySet_Add(__pyx_v_ts->_waiting_on, ((PyObject *)__pyx_v_dts)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1798, __pyx_L3_error)
+1799:                 if dts._state == "released":
        __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_released, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1799, __pyx_L3_error)
        __pyx_t_5 = (__pyx_t_12 != 0);
        if (__pyx_t_5) {
/* … */
          goto __pyx_L23;
        }
+1800:                     recommendations[dep] = "waiting"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dep, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 1800, __pyx_L3_error)
 1801:                 else:
+1802:                     dts._waiters.add(ts)
        /*else*/ {
          if (unlikely(__pyx_v_dts->_waiters == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1802, __pyx_L3_error)
          }
          __pyx_t_13 = PySet_Add(__pyx_v_dts->_waiters, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1802, __pyx_L3_error)
        }
        __pyx_L23:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1803: 
+1804:             ts._waiters = {dts for dts in ts._dependents if dts._state == "waiting"}
      { /* enter inner scope */
        __pyx_t_4 = PySet_New(NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1804, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = 0;
        __pyx_t_10 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1804, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_XDECREF(__pyx_t_6);
        __pyx_t_6 = __pyx_t_10;
        __pyx_t_10 = 0;
        while (1) {
          __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_10, __pyx_t_9);
          if (unlikely(__pyx_t_11 == 0)) break;
          if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1804, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1804, __pyx_L26_error)
          __Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_10));
          __pyx_t_10 = 0;
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_9genexpr21__pyx_v_dts->_state, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1804, __pyx_L26_error)
          __pyx_t_12 = (__pyx_t_5 != 0);
          if (__pyx_t_12) {
            if (unlikely(PySet_Add(__pyx_t_4, (PyObject*)__pyx_9genexpr21__pyx_v_dts))) __PYX_ERR(0, 1804, __pyx_L26_error)
          }
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF((PyObject *)__pyx_9genexpr21__pyx_v_dts); __pyx_9genexpr21__pyx_v_dts = 0;
        goto __pyx_L30_exit_scope;
        __pyx_L26_error:;
        __Pyx_XDECREF((PyObject *)__pyx_9genexpr21__pyx_v_dts); __pyx_9genexpr21__pyx_v_dts = 0;
        goto __pyx_L3_error;
        __pyx_L30_exit_scope:;
      } /* exit inner scope */
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_v_ts->_waiters);
      __Pyx_DECREF(__pyx_v_ts->_waiters);
      __pyx_v_ts->_waiters = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1805: 
+1806:             if not ts._waiting_on:
      __pyx_t_12 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
      __pyx_t_5 = ((!__pyx_t_12) != 0);
      if (__pyx_t_5) {
/* … */
      }
+1807:                 if self._workers_dv:
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_self->_workers_dv); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1807, __pyx_L3_error)
        if (__pyx_t_5) {
/* … */
          goto __pyx_L32;
        }
+1808:                     recommendations[key] = "processing"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_processing_2) < 0)) __PYX_ERR(0, 1808, __pyx_L3_error)
 1809:                 else:
+1810:                     self._unrunnable.add(ts)
        /*else*/ {
          if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1810, __pyx_L3_error)
          }
          __pyx_t_13 = PySet_Add(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1810, __pyx_L3_error)
+1811:                     ts.state = "no-worker"
          if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_kp_u_no_worker) < 0) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
        __pyx_L32:;
 1812: 
+1813:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1813, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+1814:         except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_10) < 0) __PYX_ERR(0, 1814, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L38_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
          }
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_17;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+1815:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_logger); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1815, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_exception); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1815, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_16, function);
          }
        }
        __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_15, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1815, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+1816:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1816, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1816, __pyx_L38_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (__pyx_t_5) {
/* … */
        }
+1817:                 import pdb
          __pyx_t_14 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1817, __pyx_L38_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_v_pdb = __pyx_t_14;
          __pyx_t_14 = 0;
 1818: 
+1819:                 pdb.set_trace()
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1819, __pyx_L38_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_16, function);
            }
          }
          __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1819, __pyx_L38_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+1820:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_6, __pyx_t_10);
        __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0; 
        __PYX_ERR(0, 1820, __pyx_L38_error)
      }
 1821: 
+1822:     def transition_no_worker_waiting(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_5transition_no_worker_waiting(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_5transition_no_worker_waiting(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_no_worker_waiting (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_4transition_no_worker_waiting(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_4transition_no_worker_waiting(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_dep = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_no_worker_waiting", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_no_worker_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_dep);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1823:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+1824:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1824, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1824, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1824, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 1825:             dts: TaskState
+1826:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1826, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+1827:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1827, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1828: 
+1829:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+1830:                 assert ts in self._unrunnable
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 1830, __pyx_L3_error)
          }
          __pyx_t_5 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_self->_unrunnable, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1830, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1830, __pyx_L3_error)
          }
        }
        #endif
+1831:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1831, __pyx_L3_error)
          }
        }
        #endif
+1832:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1832, __pyx_L3_error)
          }
        }
        #endif
+1833:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1833, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1833, __pyx_L3_error)
          }
        }
        #endif
 1834: 
+1835:             self._unrunnable.remove(ts)
      if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 1835, __pyx_L3_error)
      }
      __pyx_t_6 = __Pyx_PySet_Remove(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1835, __pyx_L3_error)
 1836: 
+1837:             if ts._has_lost_dependencies:
      __pyx_t_5 = (__pyx_v_ts->_has_lost_dependencies != 0);
      if (__pyx_t_5) {
/* … */
      }
+1838:                 return {key: "forgotten"}, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1838, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (PyDict_SetItem(__pyx_t_4, __pyx_v_key, __pyx_n_u_forgotten) < 0) __PYX_ERR(0, 1838, __pyx_L3_error)
        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1838, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_client_msgs);
        __pyx_t_4 = 0;
        __pyx_r = __pyx_t_7;
        __pyx_t_7 = 0;
        goto __pyx_L7_try_return;
 1839: 
+1840:             recommendations: dict = {}
      __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_7);
      __pyx_t_7 = 0;
 1841: 
+1842:             for dts in ts._dependencies:
      __pyx_t_8 = 0;
      __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1842, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_7);
      __pyx_t_7 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_7, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, __pyx_t_10);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1842, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1842, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
        __pyx_t_4 = 0;
+1843:                 dep = dts._key
        __pyx_t_4 = __pyx_v_dts->_key;
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_dep, ((PyObject*)__pyx_t_4));
        __pyx_t_4 = 0;
+1844:                 if not dts._who_has:
        __pyx_t_5 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
        __pyx_t_12 = ((!__pyx_t_5) != 0);
        if (__pyx_t_12) {
/* … */
        }
+1845:                     ts._waiting_on.add(dts)
          if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1845, __pyx_L3_error)
          }
          __pyx_t_6 = PySet_Add(__pyx_v_ts->_waiting_on, ((PyObject *)__pyx_v_dts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1845, __pyx_L3_error)
+1846:                 if dts._state == "released":
        __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_released, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1846, __pyx_L3_error)
        __pyx_t_5 = (__pyx_t_12 != 0);
        if (__pyx_t_5) {
/* … */
          goto __pyx_L14;
        }
+1847:                     recommendations[dep] = "waiting"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dep, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 1847, __pyx_L3_error)
 1848:                 else:
+1849:                     dts._waiters.add(ts)
        /*else*/ {
          if (unlikely(__pyx_v_dts->_waiters == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1849, __pyx_L3_error)
          }
          __pyx_t_6 = PySet_Add(__pyx_v_dts->_waiters, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1849, __pyx_L3_error)
        }
        __pyx_L14:;
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 1850: 
+1851:             ts.state = "waiting"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_waiting) < 0) __PYX_ERR(0, 1851, __pyx_L3_error)
 1852: 
+1853:             if not ts._waiting_on:
      __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
      __pyx_t_12 = ((!__pyx_t_5) != 0);
      if (__pyx_t_12) {
/* … */
      }
+1854:                 if self._workers_dv:
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_self->_workers_dv); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1854, __pyx_L3_error)
        if (__pyx_t_12) {
/* … */
          goto __pyx_L16;
        }
+1855:                     recommendations[key] = "processing"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_processing_2) < 0)) __PYX_ERR(0, 1855, __pyx_L3_error)
 1856:                 else:
+1857:                     self._unrunnable.add(ts)
        /*else*/ {
          if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 1857, __pyx_L3_error)
          }
          __pyx_t_6 = PySet_Add(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1857, __pyx_L3_error)
+1858:                     ts.state = "no-worker"
          if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_kp_u_no_worker) < 0) __PYX_ERR(0, 1858, __pyx_L3_error)
        }
        __pyx_L16:;
 1859: 
+1860:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1860, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_7;
      __pyx_t_7 = 0;
      goto __pyx_L7_try_return;
+1861:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_no_worker_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_13) < 0) __PYX_ERR(0, 1861, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L22_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
          }
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_17;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+1862:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_logger); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1862, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_exception); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1862, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_16, function);
          }
        }
        __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_15, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1862, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+1863:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1863, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1863, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (__pyx_t_12) {
/* … */
        }
+1864:                 import pdb
          __pyx_t_14 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1864, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_v_pdb = __pyx_t_14;
          __pyx_t_14 = 0;
 1865: 
+1866:                 pdb.set_trace()
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1866, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_16, function);
            }
          }
          __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1866, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+1867:             raise
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_4, __pyx_t_13);
        __pyx_t_7 = 0; __pyx_t_4 = 0; __pyx_t_13 = 0; 
        __PYX_ERR(0, 1867, __pyx_L22_error)
      }
 1868: 
 1869:     @ccall
 1870:     @exceptval(check=False)
+1871:     def decide_worker(self, ts: TaskState) -> WorkerState:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7decide_worker(PyObject *__pyx_v_self, PyObject *__pyx_v_ts); /*proto*/
static struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_f_11distributed_9scheduler_14SchedulerState_decide_worker(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_valid_workers = 0;
  PyObject *__pyx_v_worker_pool = NULL;
  PyObject *__pyx_v_worker_pool_dv = NULL;
  Py_ssize_t __pyx_v_n_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decide_worker", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_decide_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_7decide_worker)) {
        __Pyx_XDECREF(((PyObject *)__pyx_r));
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_ts));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1871, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1871, __pyx_L1_error)
        __pyx_r = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.decide_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_valid_workers);
  __Pyx_XDECREF(__pyx_v_worker_pool);
  __Pyx_XDECREF(__pyx_v_worker_pool_dv);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7decide_worker(PyObject *__pyx_v_self, PyObject *__pyx_v_ts); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_6decide_worker[] = "\n        Decide on a worker for task *ts*.  Return a WorkerState.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_7decide_worker(PyObject *__pyx_v_self, PyObject *__pyx_v_ts) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decide_worker (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 1871, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_6decide_worker(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_ts));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_6decide_worker(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decide_worker", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_11distributed_9scheduler_14SchedulerState_decide_worker(__pyx_v_self, __pyx_v_ts, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.decide_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1872:         """
 1873:         Decide on a worker for task *ts*.  Return a WorkerState.
 1874:         """
+1875:         ws: WorkerState = None
  __Pyx_INCREF(Py_None);
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None);
+1876:         valid_workers: set = self.valid_workers(ts)
  __pyx_t_1 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->valid_workers(__pyx_v_self, __pyx_v_ts, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_valid_workers = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1877: 
+1878:         if (
  if (__pyx_t_5) {
/* … */
  }
+1879:             valid_workers is not None
  __pyx_t_6 = (__pyx_v_valid_workers != ((PyObject*)Py_None));
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
  } else {
    __pyx_t_5 = __pyx_t_7;
    goto __pyx_L4_bool_binop_done;
  }
+1880:             and not valid_workers
  __pyx_t_7 = (__pyx_v_valid_workers != Py_None)&&(PySet_GET_SIZE(__pyx_v_valid_workers) != 0);
  __pyx_t_6 = ((!__pyx_t_7) != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
+1881:             and not ts._loose_restrictions
  __pyx_t_6 = ((!(__pyx_v_ts->_loose_restrictions != 0)) != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
+1882:             and self._workers_dv
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_self->_workers_dv); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1882, __pyx_L1_error)
  __pyx_t_5 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
 1883:         ):
+1884:             self._unrunnable.add(ts)
    if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
      __PYX_ERR(0, 1884, __pyx_L1_error)
    }
    __pyx_t_8 = PySet_Add(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1884, __pyx_L1_error)
+1885:             ts.state = "no-worker"
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_kp_u_no_worker) < 0) __PYX_ERR(0, 1885, __pyx_L1_error)
+1886:             return ws
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __Pyx_INCREF(((PyObject *)__pyx_v_ws));
    __pyx_r = __pyx_v_ws;
    goto __pyx_L0;
 1887: 
+1888:         if ts._dependencies or valid_workers is not None:
  __pyx_t_6 = (__pyx_v_ts->_dependencies != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_dependencies) != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_valid_workers != ((PyObject*)Py_None));
  __pyx_t_7 = (__pyx_t_6 != 0);
  __pyx_t_5 = __pyx_t_7;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L8;
  }
+1889:             ws = decide_worker(
    __pyx_t_3 = ((PyObject *)__pyx_f_11distributed_9scheduler_decide_worker(__pyx_v_ts, __pyx_t_1, __pyx_v_valid_workers, __pyx_t_2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
    __pyx_t_3 = 0;
 1890:                 ts,
+1891:                 self._workers_dv.values(),
    if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 1891, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->_workers_dv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
 1892:                 valid_workers,
+1893:                 partial(self.worker_objective, ts),
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_worker_objective); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_4, ((PyObject *)__pyx_v_ts)};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1893, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_4, ((PyObject *)__pyx_v_ts)};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1893, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_4);
      __Pyx_INCREF(((PyObject *)__pyx_v_ts));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, ((PyObject *)__pyx_v_ts));
      __pyx_t_4 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1894:             )
 1895:         else:
+1896:             worker_pool = self._idle or self._workers
  /*else*/ {
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_self->_idle); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1896, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      __Pyx_INCREF(__pyx_v_self->_idle);
      __pyx_t_3 = __pyx_v_self->_idle;
      goto __pyx_L11_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_v_self->_workers);
    __pyx_t_3 = __pyx_v_self->_workers;
    __pyx_L11_bool_binop_done:;
    __pyx_v_worker_pool = __pyx_t_3;
    __pyx_t_3 = 0;
+1897:             worker_pool_dv = cast(dict, worker_pool)
    __pyx_t_3 = __pyx_v_worker_pool;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_worker_pool_dv = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+1898:             n_workers: Py_ssize_t = len(worker_pool_dv)
    if (unlikely(__pyx_v_worker_pool_dv == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 1898, __pyx_L1_error)
    }
    __pyx_t_12 = PyDict_Size(__pyx_v_worker_pool_dv); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1898, __pyx_L1_error)
    __pyx_v_n_workers = __pyx_t_12;
+1899:             if n_workers < 20:  # smart but linear in small case
    __pyx_t_5 = ((__pyx_v_n_workers < 20) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L13;
    }
+1900:                 ws = min(worker_pool.values(), key=operator.attrgetter("occupancy"))
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_worker_pool, __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_operator); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_11, __pyx_n_u_occupancy) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_n_u_occupancy);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_key, __pyx_t_1) < 0) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1900, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
      __pyx_t_1 = 0;
 1901:             else:  # dumb but fast in large case
+1902:                 ws = worker_pool.values()[self._n_tasks % n_workers]
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_worker_pool, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(__pyx_v_n_workers == 0)) {
        PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
        __PYX_ERR(0, 1902, __pyx_L1_error)
      }
      __pyx_t_12 = __Pyx_mod_Py_ssize_t(__pyx_v_self->_n_tasks, __pyx_v_n_workers);
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, __pyx_t_12, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1902, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L13:;
  }
  __pyx_L8:;
 1903: 
+1904:         if self._validate:
  __pyx_t_5 = (__pyx_v_self->_validate != 0);
  if (__pyx_t_5) {
/* … */
  }
+1905:             assert ws is None or isinstance(ws, WorkerState), (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = (((PyObject *)__pyx_v_ws) == Py_None);
      __pyx_t_6 = (__pyx_t_7 != 0);
      if (!__pyx_t_6) {
      } else {
        __pyx_t_5 = __pyx_t_6;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_6 = __Pyx_TypeCheck(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState); 
      __pyx_t_7 = (__pyx_t_6 != 0);
      __pyx_t_5 = __pyx_t_7;
      __pyx_L15_bool_binop_done:;
      if (unlikely(!__pyx_t_5)) {
+1906:                 type(ws),
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1906, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        __Pyx_INCREF(((PyObject *)__pyx_v_ws));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
        PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_ws));
        __pyx_t_1 = PyTuple_Pack(1, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1906, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 1905, __pyx_L1_error)
      }
    }
    #endif
 1907:                 ws,
 1908:             )
+1909:             assert ws._address in self._workers_dv
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 1909, __pyx_L1_error)
      }
      __pyx_t_5 = (__Pyx_PyDict_ContainsTF(__pyx_v_ws->_address, __pyx_v_self->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1909, __pyx_L1_error)
      if (unlikely(!(__pyx_t_5 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 1909, __pyx_L1_error)
      }
    }
    #endif
 1910: 
+1911:         return ws
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_ws));
  __pyx_r = __pyx_v_ws;
  goto __pyx_L0;
 1912: 
 1913:     @ccall
+1914:     def set_duration_estimate(self, ts: TaskState, ws: WorkerState) -> double:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9set_duration_estimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static double __pyx_f_11distributed_9scheduler_14SchedulerState_set_duration_estimate(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch) {
  double __pyx_v_exec_time;
  double __pyx_v_duration;
  double __pyx_v_total_duration;
  double __pyx_v_comm;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_duration_estimate", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_duration_estimate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_9set_duration_estimate)) {
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1914, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1914, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1914, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, ((PyObject *)__pyx_v_ts));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_ws));
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1914, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1914, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.set_duration_estimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9set_duration_estimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_8set_duration_estimate[] = "Estimate task duration using worker state and task state.\n\n        If a task takes longer than twice the current average duration we\n        estimate the task duration to be 2x current-runtime, otherwise we set it\n        to be the average duration.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_9set_duration_estimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_duration_estimate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_ws,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set_duration_estimate", 1, 2, 2, 1); __PYX_ERR(0, 1914, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_duration_estimate") < 0)) __PYX_ERR(0, 1914, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_duration_estimate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1914, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.set_duration_estimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 1914, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 1914, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_8set_duration_estimate(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_ws);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_8set_duration_estimate(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_duration_estimate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_set_duration_estimate(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1914, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.set_duration_estimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1915:         """Estimate task duration using worker state and task state.
 1916: 
 1917:         If a task takes longer than twice the current average duration we
 1918:         estimate the task duration to be 2x current-runtime, otherwise we set it
 1919:         to be the average duration.
 1920:         """
+1921:         exec_time: double = ws._executing.get(ts, 0)
  if (unlikely(__pyx_v_ws->_executing == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 1921, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_ws->_executing, ((PyObject *)__pyx_v_ts), __pyx_int_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1921, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_exec_time = __pyx_t_7;
+1922:         duration: double = self.get_task_duration(ts)
  __pyx_t_7 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->get_task_duration(__pyx_v_self, __pyx_v_ts, 0, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1922, __pyx_L1_error)
  __pyx_v_duration = __pyx_t_7;
 1923:         total_duration: double
+1924:         if exec_time > 2 * duration:
  __pyx_t_8 = ((__pyx_v_exec_time > (2.0 * __pyx_v_duration)) != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L3;
  }
+1925:             total_duration = 2 * exec_time
    __pyx_v_total_duration = (2.0 * __pyx_v_exec_time);
 1926:         else:
+1927:             comm: double = self.get_comm_cost(ts, ws)
  /*else*/ {
    __pyx_t_7 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->get_comm_cost(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1927, __pyx_L1_error)
    __pyx_v_comm = __pyx_t_7;
+1928:             total_duration = duration + comm
    __pyx_v_total_duration = (__pyx_v_duration + __pyx_v_comm);
  }
  __pyx_L3:;
+1929:         ws._processing[ts] = total_duration
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_total_duration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_v_ws->_processing == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1929, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts), __pyx_t_1) < 0)) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1930:         return total_duration
  __pyx_r = __pyx_v_total_duration;
  goto __pyx_L0;
 1931: 
+1932:     def transition_waiting_processing(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_11transition_waiting_processing(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_11transition_waiting_processing(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_processing (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_10transition_waiting_processing(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_10transition_waiting_processing(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_worker = NULL;
  double __pyx_v_duration_estimate;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr22__pyx_v_dts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_processing", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_worker);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr22__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1933:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+1934:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1934, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1934, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1934, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 1935:             dts: TaskState
+1936:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1936, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+1937:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1937, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1938: 
+1939:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+1940:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1940, __pyx_L3_error)
          }
        }
        #endif
+1941:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1941, __pyx_L3_error)
          }
        }
        #endif
+1942:                 assert not ts._exception_blame
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1942, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1942, __pyx_L3_error)
          }
        }
        #endif
+1943:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1943, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1943, __pyx_L3_error)
          }
        }
        #endif
+1944:                 assert not ts._has_lost_dependencies
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(!((!(__pyx_v_ts->_has_lost_dependencies != 0)) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1944, __pyx_L3_error)
          }
        }
        #endif
+1945:                 assert ts not in self._unrunnable
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 1945, __pyx_L3_error)
          }
          __pyx_t_5 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_self->_unrunnable, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1945, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1945, __pyx_L3_error)
          }
        }
        #endif
+1946:                 assert all([dts._who_has for dts in ts._dependencies])
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          { /* enter inner scope */
            __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1946, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = 0;
            __pyx_t_10 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1946, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF(__pyx_t_6);
            __pyx_t_6 = __pyx_t_10;
            __pyx_t_10 = 0;
            while (1) {
              __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_10, __pyx_t_9);
              if (unlikely(__pyx_t_11 == 0)) break;
              if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1946, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_10);
              if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1946, __pyx_L12_error)
              __Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_10));
              __pyx_t_10 = 0;
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_9genexpr22__pyx_v_dts->_who_has))) __PYX_ERR(0, 1946, __pyx_L12_error)
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr22__pyx_v_dts); __pyx_9genexpr22__pyx_v_dts = 0;
            goto __pyx_L15_exit_scope;
            __pyx_L12_error:;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr22__pyx_v_dts); __pyx_9genexpr22__pyx_v_dts = 0;
            goto __pyx_L3_error;
            __pyx_L15_exit_scope:;
          } /* exit inner scope */
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1946, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1946, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1946, __pyx_L3_error)
          }
        }
        #endif
 1947: 
+1948:             ws: WorkerState = self.decide_worker(ts)
      __pyx_t_6 = ((PyObject *)((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->decide_worker(__pyx_v_self, __pyx_v_ts, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1948, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_6);
      __pyx_t_6 = 0;
+1949:             if ws is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ws) == Py_None);
      __pyx_t_12 = (__pyx_t_5 != 0);
      if (__pyx_t_12) {
/* … */
      }
+1950:                 return {}, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1950, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1950, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
        __pyx_t_6 = 0;
        __pyx_r = __pyx_t_4;
        __pyx_t_4 = 0;
        goto __pyx_L7_try_return;
+1951:             worker = ws._address
      __pyx_t_4 = __pyx_v_ws->_address;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_worker = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1952: 
+1953:             duration_estimate = self.set_duration_estimate(ts, ws)
      __pyx_t_13 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->set_duration_estimate(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1953, __pyx_L3_error)
      __pyx_v_duration_estimate = __pyx_t_13;
+1954:             ts._processing_on = ws
      __Pyx_INCREF(((PyObject *)__pyx_v_ws));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
      __Pyx_GOTREF(__pyx_v_ts->_processing_on);
      __Pyx_DECREF(((PyObject *)__pyx_v_ts->_processing_on));
      __pyx_v_ts->_processing_on = __pyx_v_ws;
+1955:             ws._occupancy += duration_estimate
      __pyx_v_ws->_occupancy = (__pyx_v_ws->_occupancy + __pyx_v_duration_estimate);
+1956:             self._total_occupancy += duration_estimate
      __pyx_v_self->_total_occupancy = (__pyx_v_self->_total_occupancy + __pyx_v_duration_estimate);
+1957:             ts.state = "processing"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_processing_2) < 0) __PYX_ERR(0, 1957, __pyx_L3_error)
+1958:             self.consume_resources(ts, ws)
      __pyx_t_4 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->consume_resources(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1958, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1959:             self.check_idle_saturated(ws)
      __pyx_t_4 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->check_idle_saturated(__pyx_v_self, __pyx_v_ws, 0, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1959, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1960:             self._n_tasks += 1
      __pyx_v_self->_n_tasks = (__pyx_v_self->_n_tasks + 1);
 1961: 
+1962:             if ts._actor:
      __pyx_t_12 = (__pyx_v_ts->_actor != 0);
      if (__pyx_t_12) {
/* … */
      }
+1963:                 ws._actors.add(ts)
        if (unlikely(__pyx_v_ws->_actors == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
          __PYX_ERR(0, 1963, __pyx_L3_error)
        }
        __pyx_t_14 = PySet_Add(__pyx_v_ws->_actors, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 1963, __pyx_L3_error)
 1964: 
 1965:             # logger.debug("Send job to worker: %s, %s", worker, key)
 1966: 
+1967:             worker_msgs[worker] = [_task_to_msg(self, ts)]
      __pyx_t_4 = __pyx_f_11distributed_9scheduler__task_to_msg(__pyx_v_self, __pyx_v_ts, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1967, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1967, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
      __pyx_t_4 = 0;
      if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_worker, __pyx_t_6) < 0)) __PYX_ERR(0, 1967, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1968: 
+1969:             return {}, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1969, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1969, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_t_6 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+1970:         except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_10) < 0) __PYX_ERR(0, 1970, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L23_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+1971:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1971, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1971, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_16, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1971, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1972:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1972, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1972, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (__pyx_t_12) {
/* … */
        }
+1973:                 import pdb
          __pyx_t_15 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1973, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_v_pdb = __pyx_t_15;
          __pyx_t_15 = 0;
 1974: 
+1975:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1975, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1975, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1976:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_6, __pyx_t_10);
        __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0; 
        __PYX_ERR(0, 1976, __pyx_L23_error)
      }
 1977: 
+1978:     def transition_waiting_memory(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13transition_waiting_memory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_13transition_waiting_memory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_nbytes = 0;
  PyObject *__pyx_v_type = 0;
  PyObject *__pyx_v_typename = 0;
  PyObject *__pyx_v_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_memory (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_nbytes,&__pyx_n_s_type,&__pyx_n_s_typename,&__pyx_n_s_worker,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_12transition_waiting_memory(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_nbytes, PyObject *__pyx_v_type, PyObject *__pyx_v_typename, PyObject *__pyx_v_worker, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_memory", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1979:         self, key, nbytes=None, type=None, typename: str = None, worker=None, **kwargs
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject*)Py_None);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nbytes);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_type);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_typename);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "transition_waiting_memory") < 0)) __PYX_ERR(0, 1978, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    __pyx_v_nbytes = values[1];
    __pyx_v_type = values[2];
    __pyx_v_typename = ((PyObject*)values[3]);
    __pyx_v_worker = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition_waiting_memory", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1978, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_typename), (&PyUnicode_Type), 1, "typename", 1))) __PYX_ERR(0, 1979, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_12transition_waiting_memory(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_key, __pyx_v_nbytes, __pyx_v_type, __pyx_v_typename, __pyx_v_worker, __pyx_v_kwargs);
 1980:     ):
+1981:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+1982:             ws: WorkerState = self._workers_dv[worker]
      if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1982, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1982, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 1982, __pyx_L3_error)
      __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4);
      __pyx_t_4 = 0;
+1983:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1983, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1983, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 1983, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
+1984:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1984, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+1985:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1985, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 1986: 
+1987:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+1988:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1988, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1988, __pyx_L3_error)
          }
        }
        #endif
+1989:                 assert ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1989, __pyx_L3_error)
          }
        }
        #endif
+1990:                 assert ts._state == "waiting"
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1990, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 1990, __pyx_L3_error)
          }
        }
        #endif
 1991: 
+1992:             ts._waiting_on.clear()
      if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
        __PYX_ERR(0, 1992, __pyx_L3_error)
      }
      __pyx_t_6 = PySet_Clear(__pyx_v_ts->_waiting_on); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1992, __pyx_L3_error)
 1993: 
+1994:             if nbytes is not None:
      __pyx_t_5 = (__pyx_v_nbytes != Py_None);
      __pyx_t_7 = (__pyx_t_5 != 0);
      if (__pyx_t_7) {
/* … */
      }
+1995:                 ts.set_nbytes(nbytes)
        __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_nbytes); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1995, __pyx_L3_error)
        __pyx_t_4 = __pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(__pyx_v_ts, __pyx_t_8, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1995, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1996: 
+1997:             self.check_idle_saturated(ws)
      __pyx_t_4 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->check_idle_saturated(__pyx_v_self, __pyx_v_ws, 0, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1997, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1998: 
+1999:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1999, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2000:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2000, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_client_msgs, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
 2001: 
+2002:             _add_to_memory(
      __pyx_t_9.__pyx_n = 2;
      __pyx_t_9.type = __pyx_v_type;
      __pyx_t_9.typename = __pyx_v_typename;
      __pyx_t_4 = __pyx_f_11distributed_9scheduler__add_to_memory(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, __pyx_v_recommendations, __pyx_v_client_msgs, &__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2002, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2003:                 self, ts, ws, recommendations, client_msgs, type=type, typename=typename
 2004:             )
 2005: 
+2006:             if self._validate:
      __pyx_t_7 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_7) {
/* … */
      }
+2007:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_7 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2007, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_7) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2007, __pyx_L3_error)
          }
        }
        #endif
+2008:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_7 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_7) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2008, __pyx_L3_error)
          }
        }
        #endif
+2009:                 assert ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_7 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!__pyx_t_7)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2009, __pyx_L3_error)
          }
        }
        #endif
 2010: 
+2011:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2011, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2012:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 2012, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __pyx_v_e = __pyx_t_11;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L17_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __pyx_t_10 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
          }
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2013:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2013, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_exception); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2013, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
          }
        }
        __pyx_t_13 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_14, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2013, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2014:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2014, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2014, __pyx_L17_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_7) {
/* … */
        }
+2015:                 import pdb
          __pyx_t_13 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2015, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_v_pdb = __pyx_t_13;
          __pyx_t_13 = 0;
 2016: 
+2017:                 pdb.set_trace()
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2017, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_14 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_14)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_14);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          __pyx_t_13 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2017, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2018:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_12);
        __pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; 
        __PYX_ERR(0, 2018, __pyx_L17_error)
      }
 2019: 
+2020:     def transition_processing_memory(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_15transition_processing_memory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_15transition_processing_memory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_nbytes = 0;
  PyObject *__pyx_v_type = 0;
  PyObject *__pyx_v_typename = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_startstops = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_memory (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_nbytes,&__pyx_n_s_type,&__pyx_n_s_typename,&__pyx_n_s_worker,&__pyx_n_s_startstops,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_14transition_processing_memory(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_nbytes, PyObject *__pyx_v_type, PyObject *__pyx_v_typename, PyObject *__pyx_v_worker, PyObject *__pyx_v_startstops, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_wws = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_L = NULL;
  PyObject *__pyx_v_startstop = NULL;
  PyObject *__pyx_v_stop = NULL;
  PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_action = NULL;
  PyObject *__pyx_v_compute_start = NULL;
  PyObject *__pyx_v_compute_stop = NULL;
  double __pyx_v_old_duration;
  PyObject *__pyx_v_new_duration = NULL;
  PyObject *__pyx_v_avg_duration = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_tts = 0;
  PyObject *__pyx_v_old = NULL;
  double __pyx_v_comm;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_memory", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(((PyObject *)__pyx_t_18));
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_wws);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_L);
  __Pyx_XDECREF(__pyx_v_startstop);
  __Pyx_XDECREF(__pyx_v_stop);
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_action);
  __Pyx_XDECREF(__pyx_v_compute_start);
  __Pyx_XDECREF(__pyx_v_compute_stop);
  __Pyx_XDECREF(__pyx_v_new_duration);
  __Pyx_XDECREF(__pyx_v_avg_duration);
  __Pyx_XDECREF((PyObject *)__pyx_v_tts);
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2021:         self,
 2022:         key,
+2023:         nbytes=None,
    values[1] = ((PyObject *)Py_None);
+2024:         type=None,
    values[2] = ((PyObject *)Py_None);
+2025:         typename: str = None,
    values[3] = ((PyObject*)Py_None);
+2026:         worker=None,
    values[4] = ((PyObject *)Py_None);
+2027:         startstops=None,
    values[5] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nbytes);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_type);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_typename);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_startstops);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "transition_processing_memory") < 0)) __PYX_ERR(0, 2020, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    __pyx_v_nbytes = values[1];
    __pyx_v_type = values[2];
    __pyx_v_typename = ((PyObject*)values[3]);
    __pyx_v_worker = values[4];
    __pyx_v_startstops = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition_processing_memory", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2020, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_typename), (&PyUnicode_Type), 1, "typename", 1))) __PYX_ERR(0, 2025, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_14transition_processing_memory(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_key, __pyx_v_nbytes, __pyx_v_type, __pyx_v_typename, __pyx_v_worker, __pyx_v_startstops, __pyx_v_kwargs);
 2028:         **kwargs,
 2029:     ):
 2030:         ws: WorkerState
 2031:         wws: WorkerState
+2032:         worker_msgs: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_worker_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2033:         client_msgs: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_client_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2034:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(((PyObject *)__pyx_t_18)); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }
+2035:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2035, __pyx_L3_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2035, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2035, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
      __pyx_t_1 = 0;
+2036:             assert worker
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_worker); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2036, __pyx_L3_error)
        if (unlikely(!__pyx_t_5)) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 2036, __pyx_L3_error)
        }
      }
      #endif
+2037:             assert isinstance(worker, str)
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_5 = PyUnicode_Check(__pyx_v_worker); 
        if (unlikely(!(__pyx_t_5 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 2037, __pyx_L3_error)
        }
      }
      #endif
 2038: 
+2039:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2040:                 assert ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2040, __pyx_L3_error)
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2040, __pyx_L3_error)
          }
        }
        #endif
+2041:                 ws = ts._processing_on
        __pyx_t_1 = ((PyObject *)__pyx_v_ts->_processing_on);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
        __pyx_t_1 = 0;
+2042:                 assert ts in ws._processing
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(__pyx_v_ws->_processing == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 2042, __pyx_L3_error)
          }
          __pyx_t_5 = (__Pyx_PyDict_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_processing, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2042, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2042, __pyx_L3_error)
          }
        }
        #endif
+2043:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2043, __pyx_L3_error)
          }
        }
        #endif
+2044:                 assert not ts._who_has, (ts, ts._who_has)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2044, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_INCREF(((PyObject *)__pyx_v_ts));
            __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
            PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_ts));
            __Pyx_INCREF(__pyx_v_ts->_who_has);
            __Pyx_GIVEREF(__pyx_v_ts->_who_has);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ts->_who_has);
            __pyx_t_6 = PyTuple_Pack(1, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2044, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_6);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 2044, __pyx_L3_error)
          }
        }
        #endif
+2045:                 assert not ts._exception_blame
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2045, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2045, __pyx_L3_error)
          }
        }
        #endif
+2046:                 assert ts._state == "processing"
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2046, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2046, __pyx_L3_error)
          }
        }
        #endif
 2047: 
+2048:             ws = self._workers_dv.get(worker)
      if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 2048, __pyx_L3_error)
      }
      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_workers_dv, __pyx_v_worker, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2048, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 2048, __pyx_L3_error)
      __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_6));
      __pyx_t_6 = 0;
+2049:             if ws is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ws) == Py_None);
      __pyx_t_7 = (__pyx_t_5 != 0);
      if (__pyx_t_7) {
/* … */
      }
+2050:                 return {key: "released"}, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2050, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_v_key, __pyx_n_u_released) < 0) __PYX_ERR(0, 2050, __pyx_L3_error)
        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2050, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_client_msgs);
        __pyx_t_6 = 0;
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L7_try_return;
 2051: 
+2052:             if ws != ts._processing_on:  # someone else has this task
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_ws), ((PyObject *)__pyx_v_ts->_processing_on), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2052, __pyx_L3_error)
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2052, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_7) {
/* … */
      }
+2053:                 logger.info(
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_logger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2053, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2053, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 2054:                     "Unexpected worker completed task, likely due to"
 2055:                     " work stealing.  Expected: %s, Got: %s, Key: %s",
 2056:                     ts._processing_on,
 2057:                     ws,
+2058:                     key,
        __pyx_t_6 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_kp_u_Unexpected_worker_completed_task, ((PyObject *)__pyx_v_ts->_processing_on), ((PyObject *)__pyx_v_ws), __pyx_v_key};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2053, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_kp_u_Unexpected_worker_completed_task, ((PyObject *)__pyx_v_ts->_processing_on), ((PyObject *)__pyx_v_ws), __pyx_v_key};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2053, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2053, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (__pyx_t_6) {
            __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6); __pyx_t_6 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Unexpected_worker_completed_task);
          __Pyx_GIVEREF(__pyx_kp_u_Unexpected_worker_completed_task);
          PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_kp_u_Unexpected_worker_completed_task);
          __Pyx_INCREF(((PyObject *)__pyx_v_ts->_processing_on));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts->_processing_on));
          PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, ((PyObject *)__pyx_v_ts->_processing_on));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, ((PyObject *)__pyx_v_ws));
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_v_key);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2053, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2059:                 )
+2060:                 return {}, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2060, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2060, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_client_msgs);
        __pyx_t_1 = 0;
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L7_try_return;
 2061: 
+2062:             if startstops:
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_startstops); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2062, __pyx_L3_error)
      if (__pyx_t_7) {
/* … */
        goto __pyx_L12;
      }
+2063:                 L = list()
        __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2063, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_v_L = ((PyObject*)__pyx_t_8);
        __pyx_t_8 = 0;
+2064:                 for startstop in startstops:
        if (likely(PyList_CheckExact(__pyx_v_startstops)) || PyTuple_CheckExact(__pyx_v_startstops)) {
          __pyx_t_8 = __pyx_v_startstops; __Pyx_INCREF(__pyx_t_8); __pyx_t_11 = 0;
          __pyx_t_12 = NULL;
        } else {
          __pyx_t_11 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_startstops); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2064, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2064, __pyx_L3_error)
        }
        for (;;) {
          if (likely(!__pyx_t_12)) {
            if (likely(PyList_CheckExact(__pyx_t_8))) {
              if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_1); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 2064, __pyx_L3_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2064, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            } else {
              if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_1); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 2064, __pyx_L3_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2064, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            }
          } else {
            __pyx_t_1 = __pyx_t_12(__pyx_t_8);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 2064, __pyx_L3_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_XDECREF_SET(__pyx_v_startstop, __pyx_t_1);
          __pyx_t_1 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+2065:                     stop = startstop["stop"]
          __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_startstop, __pyx_n_u_stop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2065, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_v_stop, __pyx_t_1);
          __pyx_t_1 = 0;
+2066:                     start = startstop["start"]
          __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_startstop, __pyx_n_u_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2066, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_1);
          __pyx_t_1 = 0;
+2067:                     action = startstop["action"]
          __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_startstop, __pyx_n_u_action); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2067, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_v_action, __pyx_t_1);
          __pyx_t_1 = 0;
+2068:                     if action == "compute":
          __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_v_action, __pyx_n_u_compute, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2068, __pyx_L3_error)
          if (__pyx_t_7) {
/* … */
          }
+2069:                         L.append((start, stop))
            __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2069, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_v_start);
            __Pyx_GIVEREF(__pyx_v_start);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_start);
            __Pyx_INCREF(__pyx_v_stop);
            __Pyx_GIVEREF(__pyx_v_stop);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_stop);
            __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 2069, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2070: 
 2071:                     # record timings of all actions -- a cheaper way of
 2072:                     # getting timing info compared with get_task_stream()
+2073:                     ts._prefix._all_durations[action] += stop - start
          __Pyx_INCREF(__pyx_v_ts->_prefix->_all_durations);
          __pyx_t_1 = __pyx_v_ts->_prefix->_all_durations;
          __Pyx_INCREF(__pyx_v_action);
          __pyx_t_10 = __pyx_v_action;
          __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2073, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_14 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2073, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15 = PyNumber_InPlaceAdd(__pyx_t_6, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2073, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_10, __pyx_t_15) < 0)) __PYX_ERR(0, 2073, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2074: 
+2075:                 if len(L) > 0:
        __pyx_t_11 = PyList_GET_SIZE(__pyx_v_L); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2075, __pyx_L3_error)
        __pyx_t_7 = ((__pyx_t_11 > 0) != 0);
        if (__pyx_t_7) {
/* … */
          goto __pyx_L16;
        }
+2076:                     compute_start, compute_stop = L[0]
          __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_L, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2076, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
            PyObject* sequence = __pyx_t_8;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 2076, __pyx_L3_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_10);
            #else
            __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2076, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2076, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            #endif
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_15 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2076, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext;
            index = 0; __pyx_t_1 = __pyx_t_16(__pyx_t_15); if (unlikely(!__pyx_t_1)) goto __pyx_L17_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_1);
            index = 1; __pyx_t_10 = __pyx_t_16(__pyx_t_15); if (unlikely(!__pyx_t_10)) goto __pyx_L17_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_10);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 2) < 0) __PYX_ERR(0, 2076, __pyx_L3_error)
            __pyx_t_16 = NULL;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            goto __pyx_L18_unpacking_done;
            __pyx_L17_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_16 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 2076, __pyx_L3_error)
            __pyx_L18_unpacking_done:;
          }
          __pyx_v_compute_start = __pyx_t_1;
          __pyx_t_1 = 0;
          __pyx_v_compute_stop = __pyx_t_10;
          __pyx_t_10 = 0;
 2077:                 else:  # This is very rare
+2078:                     compute_start = compute_stop = None
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_compute_start = Py_None;
          __Pyx_INCREF(Py_None);
          __pyx_v_compute_stop = Py_None;
        }
        __pyx_L16:;
 2079:             else:
+2080:                 compute_start = compute_stop = None
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_compute_start = Py_None;
        __Pyx_INCREF(Py_None);
        __pyx_v_compute_stop = Py_None;
      }
      __pyx_L12:;
 2081: 
 2082:             #############################
 2083:             # Update Timing Information #
 2084:             #############################
+2085:             if compute_start and ws._processing.get(ts, True):
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_compute_start); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2085, __pyx_L3_error)
      if (__pyx_t_5) {
      } else {
        __pyx_t_7 = __pyx_t_5;
        goto __pyx_L20_bool_binop_done;
      }
      if (unlikely(__pyx_v_ws->_processing == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 2085, __pyx_L3_error)
      }
      __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts), Py_True); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2085, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2085, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_7 = __pyx_t_5;
      __pyx_L20_bool_binop_done:;
      if (__pyx_t_7) {
/* … */
      }
 2086:                 # Update average task duration for worker
+2087:                 old_duration = ts._prefix._duration_average
        __pyx_t_17 = __pyx_v_ts->_prefix->_duration_average;
        __pyx_v_old_duration = __pyx_t_17;
+2088:                 new_duration = compute_stop - compute_start
        __pyx_t_8 = PyNumber_Subtract(__pyx_v_compute_stop, __pyx_v_compute_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2088, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_v_new_duration = __pyx_t_8;
        __pyx_t_8 = 0;
+2089:                 if old_duration < 0:
        __pyx_t_7 = ((__pyx_v_old_duration < 0.0) != 0);
        if (__pyx_t_7) {
/* … */
          goto __pyx_L22;
        }
+2090:                     avg_duration = new_duration
          __Pyx_INCREF(__pyx_v_new_duration);
          __pyx_v_avg_duration = __pyx_v_new_duration;
 2091:                 else:
+2092:                     avg_duration = 0.5 * old_duration + 0.5 * new_duration
        /*else*/ {
          __pyx_t_8 = PyFloat_FromDouble((0.5 * __pyx_v_old_duration)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2092, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_10 = PyNumber_Multiply(__pyx_float_0_5, __pyx_v_new_duration); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2092, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2092, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_v_avg_duration = __pyx_t_1;
          __pyx_t_1 = 0;
        }
        __pyx_L22:;
 2093: 
+2094:                 ts._prefix._duration_average = avg_duration
        __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_v_avg_duration); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2094, __pyx_L3_error)
        __pyx_v_ts->_prefix->_duration_average = __pyx_t_17;
+2095:                 ts._group._duration += new_duration
        __Pyx_INCREF(((PyObject *)__pyx_v_ts->_group));
        __pyx_t_18 = __pyx_v_ts->_group;
        __pyx_t_1 = PyFloat_FromDouble(__pyx_t_18->_duration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2095, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_new_duration); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2095, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2095, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_18->_duration = __pyx_t_17;
        __Pyx_DECREF(((PyObject *)__pyx_t_18)); __pyx_t_18 = 0;
 2096: 
 2097:                 tts: TaskState
+2098:                 for tts in self._unknown_durations.pop(ts._prefix._name, ()):
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_unknown_durations, __pyx_n_s_pop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2098, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_1)) {
          PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_ts->_prefix->_name, __pyx_empty_tuple};
          __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_10);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
          PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_ts->_prefix->_name, __pyx_empty_tuple};
          __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_10);
        } else
        #endif
        {
          __pyx_t_15 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (__pyx_t_8) {
            __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8); __pyx_t_8 = NULL;
          }
          __Pyx_INCREF(__pyx_v_ts->_prefix->_name);
          __Pyx_GIVEREF(__pyx_v_ts->_prefix->_name);
          PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_9, __pyx_v_ts->_prefix->_name);
          __Pyx_INCREF(__pyx_empty_tuple);
          __Pyx_GIVEREF(__pyx_empty_tuple);
          PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_9, __pyx_empty_tuple);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) {
          __pyx_t_1 = __pyx_t_10; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
          __pyx_t_12 = NULL;
        } else {
          __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2098, __pyx_L3_error)
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        for (;;) {
          if (likely(!__pyx_t_12)) {
            if (likely(PyList_CheckExact(__pyx_t_1))) {
              if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 2098, __pyx_L3_error)
              #else
              __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_10);
              #endif
            } else {
              if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 2098, __pyx_L3_error)
              #else
              __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_10);
              #endif
            }
          } else {
            __pyx_t_10 = __pyx_t_12(__pyx_t_1);
            if (unlikely(!__pyx_t_10)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 2098, __pyx_L3_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_10);
          }
          if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2098, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_tts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_10));
          __pyx_t_10 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2099:                     if tts._processing_on:
          __pyx_t_7 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_tts->_processing_on)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2099, __pyx_L3_error)
          if (__pyx_t_7) {
/* … */
          }
+2100:                         wws = tts._processing_on
            __pyx_t_10 = ((PyObject *)__pyx_v_tts->_processing_on);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_v_wws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_10));
            __pyx_t_10 = 0;
+2101:                         old = wws._processing[tts]
            if (unlikely(__pyx_v_wws->_processing == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 2101, __pyx_L3_error)
            }
            __pyx_t_10 = __Pyx_PyDict_GetItem(__pyx_v_wws->_processing, ((PyObject *)__pyx_v_tts)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2101, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_v_old, __pyx_t_10);
            __pyx_t_10 = 0;
+2102:                         comm = self.get_comm_cost(tts, wws)
            __pyx_t_17 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->get_comm_cost(__pyx_v_self, __pyx_v_tts, __pyx_v_wws, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2102, __pyx_L3_error)
            __pyx_v_comm = __pyx_t_17;
+2103:                         wws._processing[tts] = avg_duration + comm
            __pyx_t_10 = PyFloat_FromDouble(__pyx_v_comm); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2103, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_15 = PyNumber_Add(__pyx_v_avg_duration, __pyx_t_10); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2103, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(__pyx_v_wws->_processing == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 2103, __pyx_L3_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_wws->_processing, ((PyObject *)__pyx_v_tts), __pyx_t_15) < 0)) __PYX_ERR(0, 2103, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2104:                         wws._occupancy += avg_duration + comm - old
            __pyx_t_15 = PyFloat_FromDouble(__pyx_v_wws->_occupancy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_10 = PyFloat_FromDouble(__pyx_v_comm); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_8 = PyNumber_Add(__pyx_v_avg_duration, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_10 = PyNumber_Subtract(__pyx_t_8, __pyx_v_old); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_t_15, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2104, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_v_wws->_occupancy = __pyx_t_17;
+2105:                         self._total_occupancy += avg_duration + comm - old
            __pyx_t_8 = PyFloat_FromDouble(__pyx_v_self->_total_occupancy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_10 = PyFloat_FromDouble(__pyx_v_comm); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_15 = PyNumber_Add(__pyx_v_avg_duration, __pyx_t_10); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_10 = PyNumber_Subtract(__pyx_t_15, __pyx_v_old); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = PyNumber_InPlaceAdd(__pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_t_15); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2105, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_v_self->_total_occupancy = __pyx_t_17;
 2106: 
 2107:             ############################
 2108:             # Update State Information #
 2109:             ############################
+2110:             if nbytes is not None:
      __pyx_t_7 = (__pyx_v_nbytes != Py_None);
      __pyx_t_5 = (__pyx_t_7 != 0);
      if (__pyx_t_5) {
/* … */
      }
+2111:                 ts.set_nbytes(nbytes)
        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_nbytes); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2111, __pyx_L3_error)
        __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(__pyx_v_ts, __pyx_t_11, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2111, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2112: 
+2113:             recommendations: dict = {}
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2113, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+2114:             client_msgs: dict = {}
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2114, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_client_msgs, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
 2115: 
+2116:             _remove_from_processing(self, ts)
      __pyx_t_1 = __pyx_f_11distributed_9scheduler__remove_from_processing(__pyx_v_self, __pyx_v_ts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2116, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2117: 
+2118:             _add_to_memory(
      __pyx_t_19.__pyx_n = 2;
      __pyx_t_19.type = __pyx_v_type;
      __pyx_t_19.typename = __pyx_v_typename;
      __pyx_t_1 = __pyx_f_11distributed_9scheduler__add_to_memory(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, __pyx_v_recommendations, __pyx_v_client_msgs, &__pyx_t_19); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2118, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2119:                 self, ts, ws, recommendations, client_msgs, type=type, typename=typename
 2120:             )
 2121: 
+2122:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2123:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2123, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2123, __pyx_L3_error)
          }
        }
        #endif
+2124:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2124, __pyx_L3_error)
          }
        }
        #endif
 2125: 
+2126:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2126, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L7_try_return;
+2127:         except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_15, &__pyx_t_10) < 0) __PYX_ERR(0, 2127, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_15);
      __pyx_v_e = __pyx_t_15;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L33_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(((PyObject *)__pyx_t_18)); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_27);
          __pyx_t_9 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2128:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2128, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2128, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_8 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_14, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2128, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+2129:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2129, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2129, __pyx_L33_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (__pyx_t_5) {
/* … */
        }
+2130:                 import pdb
          __pyx_t_8 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2130, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_v_pdb = __pyx_t_8;
          __pyx_t_8 = 0;
 2131: 
+2132:                 pdb.set_trace()
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2132, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_14 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_14)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_14);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
            }
          }
          __pyx_t_8 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2132, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+2133:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_15, __pyx_t_10);
        __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_10 = 0; 
        __PYX_ERR(0, 2133, __pyx_L33_error)
      }
 2134: 
+2135:     def transition_memory_released(self, key, safe: bint = False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_17transition_memory_released(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_17transition_memory_released(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  int __pyx_v_safe;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_memory_released (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_safe,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_safe);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transition_memory_released") < 0)) __PYX_ERR(0, 2135, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    if (values[1]) {
      __pyx_v_safe = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_safe == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2135, __pyx_L3_error)
    } else {
      __pyx_v_safe = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition_memory_released", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2135, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_memory_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_16transition_memory_released(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_key, __pyx_v_safe);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_16transition_memory_released(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key, int __pyx_v_safe) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_report_msg = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_memory_released", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(((PyObject *)__pyx_t_16));
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_memory_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2136:         ws: WorkerState
+2137:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2138:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2138, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2138, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2138, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2139:             dts: TaskState
+2140:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2140, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2141:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2141, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2142: 
+2143:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2144:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2144, __pyx_L3_error)
          }
        }
        #endif
+2145:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2145, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2145, __pyx_L3_error)
          }
        }
        #endif
+2146:                 if safe:
        __pyx_t_5 = (__pyx_v_safe != 0);
        if (__pyx_t_5) {
/* … */
        }
+2147:                     assert not ts._waiters
          #ifndef CYTHON_WITHOUT_ASSERTIONS
          if (unlikely(!Py_OptimizeFlag)) {
            __pyx_t_5 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
            if (unlikely(!((!__pyx_t_5) != 0))) {
              PyErr_SetNone(PyExc_AssertionError);
              __PYX_ERR(0, 2147, __pyx_L3_error)
            }
          }
          #endif
 2148: 
+2149:             if ts._actor:
      __pyx_t_5 = (__pyx_v_ts->_actor != 0);
      if (__pyx_t_5) {
/* … */
      }
+2150:                 for ws in ts._who_has:
        __pyx_t_6 = 0;
        __pyx_t_9 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2150, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_XDECREF(__pyx_t_4);
        __pyx_t_4 = __pyx_t_9;
        __pyx_t_9 = 0;
        while (1) {
          __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_7, &__pyx_t_6, &__pyx_t_9, __pyx_t_8);
          if (unlikely(__pyx_t_10 == 0)) break;
          if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2150, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_9);
          if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 2150, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_9));
          __pyx_t_9 = 0;
+2151:                     ws._actors.discard(ts)
          if (unlikely(__pyx_v_ws->_actors == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
            __PYX_ERR(0, 2151, __pyx_L3_error)
          }
          __pyx_t_11 = __Pyx_PySet_Discard(__pyx_v_ws->_actors, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2151, __pyx_L3_error)
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2152:                 if ts._who_wants:
        __pyx_t_5 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
        if (__pyx_t_5) {
/* … */
        }
+2153:                     ts._exception_blame = ts
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
          __Pyx_DECREF(__pyx_v_ts->_exception_blame);
          __pyx_v_ts->_exception_blame = ((PyObject *)__pyx_v_ts);
+2154:                     ts._exception = "Worker holding Actor was lost"
          __Pyx_INCREF(__pyx_kp_u_Worker_holding_Actor_was_lost);
          __Pyx_GIVEREF(__pyx_kp_u_Worker_holding_Actor_was_lost);
          __Pyx_GOTREF(__pyx_v_ts->_exception);
          __Pyx_DECREF(__pyx_v_ts->_exception);
          __pyx_v_ts->_exception = __pyx_kp_u_Worker_holding_Actor_was_lost;
+2155:                     return (
          __Pyx_XDECREF(__pyx_r);
+2156:                         {ts._key: "erred"},
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2156, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_v_ts->_key, __pyx_n_u_erred) < 0) __PYX_ERR(0, 2156, __pyx_L3_error)
/* … */
          __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2156, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
          __Pyx_INCREF(__pyx_v_worker_msgs);
          __Pyx_GIVEREF(__pyx_v_worker_msgs);
          PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_worker_msgs);
          __Pyx_INCREF(__pyx_v_client_msgs);
          __Pyx_GIVEREF(__pyx_v_client_msgs);
          PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_client_msgs);
          __pyx_t_4 = 0;
          __pyx_r = __pyx_t_9;
          __pyx_t_9 = 0;
          goto __pyx_L7_try_return;
 2157:                         worker_msgs,
 2158:                         client_msgs,
 2159:                     )  # don't try to recreate
 2160: 
+2161:             recommendations: dict = {}
      __pyx_t_9 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2161, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;
 2162: 
+2163:             for dts in ts._waiters:
      __pyx_t_7 = 0;
      __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_waiters, 1, (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2163, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_9);
      __pyx_t_9 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_9, __pyx_t_6, &__pyx_t_7, &__pyx_t_4, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2163, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2163, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
        __pyx_t_4 = 0;
+2164:                 if dts._state in ("no-worker", "processing"):
        __Pyx_INCREF(__pyx_v_dts->_state);
        __pyx_t_12 = __pyx_v_dts->_state;
        __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_kp_u_no_worker, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 2164, __pyx_L3_error)
        __pyx_t_14 = (__pyx_t_13 != 0);
        if (!__pyx_t_14) {
        } else {
          __pyx_t_5 = __pyx_t_14;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_14 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 2164, __pyx_L3_error)
        __pyx_t_13 = (__pyx_t_14 != 0);
        __pyx_t_5 = __pyx_t_13;
        __pyx_L18_bool_binop_done:;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_13 = (__pyx_t_5 != 0);
        if (__pyx_t_13) {
/* … */
          goto __pyx_L17;
        }
+2165:                     recommendations[dts._key] = "waiting"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 2165, __pyx_L3_error)
+2166:                 elif dts._state == "waiting":
        __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 2166, __pyx_L3_error)
        __pyx_t_5 = (__pyx_t_13 != 0);
        if (__pyx_t_5) {
/* … */
        }
        __pyx_L17:;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2167:                     dts._waiting_on.add(ts)
          if (unlikely(__pyx_v_dts->_waiting_on == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
            __PYX_ERR(0, 2167, __pyx_L3_error)
          }
          __pyx_t_11 = PySet_Add(__pyx_v_dts->_waiting_on, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2167, __pyx_L3_error)
 2168: 
 2169:             # XXX factor this out?
+2170:             for ws in ts._who_has:
      __pyx_t_6 = 0;
      __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2170, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_9);
      __pyx_t_9 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_9, __pyx_t_7, &__pyx_t_6, &__pyx_t_4, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2170, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 2170, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4));
        __pyx_t_4 = 0;
+2171:                 ws._has_what.remove(ts)
        if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
          __PYX_ERR(0, 2171, __pyx_L3_error)
        }
        __pyx_t_11 = __Pyx_PySet_Remove(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2171, __pyx_L3_error)
+2172:                 ws._nbytes -= ts.get_nbytes()
        __pyx_t_15 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2172, __pyx_L3_error)
        __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes - __pyx_t_15);
+2173:                 ts._group._nbytes_in_memory -= ts.get_nbytes()
        __Pyx_INCREF(((PyObject *)__pyx_v_ts->_group));
        __pyx_t_16 = __pyx_v_ts->_group;
        __pyx_t_15 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2173, __pyx_L3_error)
        __pyx_t_16->_nbytes_in_memory = (__pyx_t_16->_nbytes_in_memory - __pyx_t_15);
        __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
+2174:                 worker_msgs[ws._address] = [
        __pyx_t_17 = PyList_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2174, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_4);
        PyList_SET_ITEM(__pyx_t_17, 0, __pyx_t_4);
        __pyx_t_4 = 0;
        if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_ws->_address, __pyx_t_17) < 0)) __PYX_ERR(0, 2174, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 2175:                     {
+2176:                         "op": "delete-data",
        __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2176, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_delete_data) < 0) __PYX_ERR(0, 2176, __pyx_L3_error)
+2177:                         "keys": [key],
        __pyx_t_17 = PyList_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2177, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyList_SET_ITEM(__pyx_t_17, 0, __pyx_v_key);
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_keys, __pyx_t_17) < 0) __PYX_ERR(0, 2176, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2178:                         "report": False,
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 2176, __pyx_L3_error)
 2179:                     }
 2180:                 ]
 2181: 
+2182:             ts._who_has.clear()
      if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
        __PYX_ERR(0, 2182, __pyx_L3_error)
      }
      __pyx_t_11 = PySet_Clear(__pyx_v_ts->_who_has); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2182, __pyx_L3_error)
 2183: 
+2184:             ts.state = "released"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_released) < 0) __PYX_ERR(0, 2184, __pyx_L3_error)
 2185: 
+2186:             report_msg = {"op": "lost-data", "key": key}
      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2186, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_op, __pyx_kp_u_lost_data) < 0) __PYX_ERR(0, 2186, __pyx_L3_error)
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 2186, __pyx_L3_error)
      __pyx_v_report_msg = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;
 2187:             cs: ClientState
+2188:             for cs in ts._who_wants:
      __pyx_t_7 = 0;
      __pyx_t_17 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2188, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_XDECREF(__pyx_t_9);
      __pyx_t_9 = __pyx_t_17;
      __pyx_t_17 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_9, __pyx_t_6, &__pyx_t_7, &__pyx_t_17, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2188, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_17);
        if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2188, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_17));
        __pyx_t_17 = 0;
+2189:                 client_msgs[cs._client_key] = [report_msg]
        __pyx_t_17 = PyList_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2189, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_INCREF(__pyx_v_report_msg);
        __Pyx_GIVEREF(__pyx_v_report_msg);
        PyList_SET_ITEM(__pyx_t_17, 0, __pyx_v_report_msg);
        if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_cs->_client_key, __pyx_t_17) < 0)) __PYX_ERR(0, 2189, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 2190: 
+2191:             if not ts._run_spec:  # pure data
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2191, __pyx_L3_error)
      __pyx_t_13 = ((!__pyx_t_5) != 0);
      if (__pyx_t_13) {
/* … */
        goto __pyx_L24;
      }
+2192:                 recommendations[key] = "forgotten"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 2192, __pyx_L3_error)
+2193:             elif ts._has_lost_dependencies:
      __pyx_t_13 = (__pyx_v_ts->_has_lost_dependencies != 0);
      if (__pyx_t_13) {
/* … */
        goto __pyx_L24;
      }
+2194:                 recommendations[key] = "forgotten"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 2194, __pyx_L3_error)
+2195:             elif ts._who_wants or ts._waiters:
      __pyx_t_5 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
      if (!__pyx_t_5) {
      } else {
        __pyx_t_13 = __pyx_t_5;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_5 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
      __pyx_t_13 = __pyx_t_5;
      __pyx_L25_bool_binop_done:;
      if (__pyx_t_13) {
/* … */
      }
      __pyx_L24:;
+2196:                 recommendations[key] = "waiting"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 2196, __pyx_L3_error)
 2197: 
+2198:             if self._validate:
      __pyx_t_13 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_13) {
/* … */
      }
+2199:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_13 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_13) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2199, __pyx_L3_error)
          }
        }
        #endif
 2200: 
+2201:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2201, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_9;
      __pyx_t_9 = 0;
      goto __pyx_L7_try_return;
+2202:         except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_memory_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_17, &__pyx_t_4) < 0) __PYX_ERR(0, 2202, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_17);
      __pyx_v_e = __pyx_t_17;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L33_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_27);
          __pyx_t_8 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_21;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2203:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_n_s_logger); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2203, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_exception); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2203, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_19 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
          __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
          if (likely(__pyx_t_19)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
            __Pyx_INCREF(__pyx_t_19);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_20, function);
          }
        }
        __pyx_t_18 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_19, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2203, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+2204:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2204, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 2204, __pyx_L33_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (__pyx_t_13) {
/* … */
        }
+2205:                 import pdb
          __pyx_t_18 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2205, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_v_pdb = __pyx_t_18;
          __pyx_t_18 = 0;
 2206: 
+2207:                 pdb.set_trace()
          __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2207, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_19 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
            __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
            if (likely(__pyx_t_19)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
              __Pyx_INCREF(__pyx_t_19);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_20, function);
            }
          }
          __pyx_t_18 = (__pyx_t_19) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_19) : __Pyx_PyObject_CallNoArg(__pyx_t_20);
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2207, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+2208:             raise
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_17, __pyx_t_4);
        __pyx_t_9 = 0; __pyx_t_17 = 0; __pyx_t_4 = 0; 
        __PYX_ERR(0, 2208, __pyx_L33_error)
      }
 2209: 
+2210:     def transition_released_erred(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_19transition_released_erred(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_19transition_released_erred(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_erred (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_18transition_released_erred(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_18transition_released_erred(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_failing_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_report_msg = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_erred", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_v_failing_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2211:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2212:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2212, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2212, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2212, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2213:             dts: TaskState
 2214:             failing_ts: TaskState
+2215:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2215, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2216:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2216, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2217: 
+2218:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2219:                 with log_errors(pdb=LOG_PDB):
        /*with:*/ {
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pdb, __pyx_t_7) < 0) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2219, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2219, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2219, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              goto __pyx_L19_try_end;
              __pyx_L14_error:;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 2219, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_7);
                __Pyx_GOTREF(__pyx_t_6);
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_t_9 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2219, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2219, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                if (__pyx_t_5 < 0) __PYX_ERR(0, 2219, __pyx_L16_except_error)
                __pyx_t_14 = ((!(__pyx_t_5 != 0)) != 0);
                if (__pyx_t_14) {
                  __Pyx_GIVEREF(__pyx_t_7);
                  __Pyx_GIVEREF(__pyx_t_6);
                  __Pyx_XGIVEREF(__pyx_t_4);
                  __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_6, __pyx_t_4);
                  __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_4 = 0; 
                  __PYX_ERR(0, 2219, __pyx_L16_except_error)
                }
                __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                goto __pyx_L15_exception_handled;
              }
              __pyx_L16_except_error:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              goto __pyx_L3_error;
              __pyx_L15_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              __pyx_L19_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_8) {
                __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__12, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2219, __pyx_L3_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              }
              goto __pyx_L13;
            }
            __pyx_L13:;
          }
          goto __pyx_L23;
          __pyx_L10_error:;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L3_error;
          __pyx_L23:;
        }
/* … */
  __pyx_tuple__12 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 2219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
+2220:                     assert ts._exception_blame
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2220, __pyx_L14_error)
                  if (unlikely(!__pyx_t_5)) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2220, __pyx_L14_error)
                  }
                }
                #endif
+2221:                     assert not ts._who_has
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2221, __pyx_L14_error)
                  }
                }
                #endif
+2222:                     assert not ts._waiting_on
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2222, __pyx_L14_error)
                  }
                }
                #endif
+2223:                     assert not ts._waiters
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2223, __pyx_L14_error)
                  }
                }
                #endif
 2224: 
+2225:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2225, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2226: 
+2227:             failing_ts = ts._exception_blame
      if (!(likely(((__pyx_v_ts->_exception_blame) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts->_exception_blame, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2227, __pyx_L3_error)
      __pyx_t_4 = __pyx_v_ts->_exception_blame;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_failing_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2228: 
+2229:             for dts in ts._dependents:
      __pyx_t_15 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_16), (&__pyx_t_17)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2229, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_18 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_16, &__pyx_t_15, &__pyx_t_6, __pyx_t_17);
        if (unlikely(__pyx_t_18 == 0)) break;
        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 2229, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2229, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
+2230:                 dts._exception_blame = failing_ts
        __Pyx_INCREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GOTREF(__pyx_v_dts->_exception_blame);
        __Pyx_DECREF(__pyx_v_dts->_exception_blame);
        __pyx_v_dts->_exception_blame = ((PyObject *)__pyx_v_failing_ts);
+2231:                 if not dts._who_has:
        __pyx_t_14 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
        __pyx_t_5 = ((!__pyx_t_14) != 0);
        if (__pyx_t_5) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2232:                     recommendations[dts._key] = "erred"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_erred) < 0)) __PYX_ERR(0, 2232, __pyx_L3_error)
 2233: 
 2234:             report_msg = {
+2235:                 "op": "task-erred",
      __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2235, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_task_erred) < 0) __PYX_ERR(0, 2235, __pyx_L3_error)
+2236:                 "key": key,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 2235, __pyx_L3_error)
+2237:                 "exception": failing_ts._exception,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_exception, __pyx_v_failing_ts->_exception) < 0) __PYX_ERR(0, 2235, __pyx_L3_error)
+2238:                 "traceback": failing_ts._traceback,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_traceback, __pyx_v_failing_ts->_traceback) < 0) __PYX_ERR(0, 2235, __pyx_L3_error)
      __pyx_v_report_msg = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2239:             }
 2240:             cs: ClientState
+2241:             for cs in ts._who_wants:
      __pyx_t_16 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_15), (&__pyx_t_17)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2241, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_18 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_15, &__pyx_t_16, &__pyx_t_6, __pyx_t_17);
        if (unlikely(__pyx_t_18 == 0)) break;
        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 2241, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2241, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_6));
        __pyx_t_6 = 0;
+2242:                 client_msgs[cs._client_key] = [report_msg]
        __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2242, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_v_report_msg);
        __Pyx_GIVEREF(__pyx_v_report_msg);
        PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_report_msg);
        if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_cs->_client_key, __pyx_t_6) < 0)) __PYX_ERR(0, 2242, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2243: 
+2244:             ts.state = "erred"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_erred) < 0) __PYX_ERR(0, 2244, __pyx_L3_error)
 2245: 
 2246:             # TODO: waiting data?
+2247:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2247, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2248:         except Exception as e:
    __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_17) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 2248, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L34_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_13 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_13, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_12, &__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_17 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_13, __pyx_t_22);
          }
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ErrRestore(__pyx_t_8, __pyx_t_12, __pyx_t_11);
          __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_13 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_21;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2249:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_n_s_logger); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2249, __pyx_L34_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_exception); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2249, __pyx_L34_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_19 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
          __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
          if (likely(__pyx_t_19)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
            __Pyx_INCREF(__pyx_t_19);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_20, function);
          }
        }
        __pyx_t_9 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_19, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2249, __pyx_L34_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2250:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2250, __pyx_L34_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2250, __pyx_L34_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (__pyx_t_5) {
/* … */
        }
+2251:                 import pdb
          __pyx_t_9 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2251, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_v_pdb = __pyx_t_9;
          __pyx_t_9 = 0;
 2252: 
+2253:                 pdb.set_trace()
          __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2253, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_19 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
            __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
            if (likely(__pyx_t_19)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
              __Pyx_INCREF(__pyx_t_19);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_20, function);
            }
          }
          __pyx_t_9 = (__pyx_t_19) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_19) : __Pyx_PyObject_CallNoArg(__pyx_t_20);
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2253, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2254:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_6, __pyx_t_7);
        __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; 
        __PYX_ERR(0, 2254, __pyx_L34_error)
      }
 2255: 
+2256:     def transition_erred_released(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_21transition_erred_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_21transition_erred_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_erred_released (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_20transition_erred_released(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_20transition_erred_released(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_report_msg = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr23__pyx_v_dts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_erred_released", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_erred_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr23__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2257:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2258:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2258, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2258, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2258, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2259:             dts: TaskState
+2260:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2260, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2261:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2261, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2262: 
+2263:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2264:                 with log_errors(pdb=LOG_PDB):
        /*with:*/ {
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pdb, __pyx_t_7) < 0) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2264, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2264, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2264, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              goto __pyx_L19_try_end;
              __pyx_L14_error:;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_erred_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_4) < 0) __PYX_ERR(0, 2264, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_6);
                __Pyx_GOTREF(__pyx_t_7);
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_t_9 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2264, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2264, __pyx_L16_except_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                if (__pyx_t_5 < 0) __PYX_ERR(0, 2264, __pyx_L16_except_error)
                __pyx_t_18 = ((!(__pyx_t_5 != 0)) != 0);
                if (__pyx_t_18) {
                  __Pyx_GIVEREF(__pyx_t_6);
                  __Pyx_GIVEREF(__pyx_t_7);
                  __Pyx_XGIVEREF(__pyx_t_4);
                  __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_7, __pyx_t_4);
                  __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_4 = 0; 
                  __PYX_ERR(0, 2264, __pyx_L16_except_error)
                }
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                goto __pyx_L15_exception_handled;
              }
              __pyx_L16_except_error:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              goto __pyx_L3_error;
              __pyx_L15_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              __pyx_L19_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_8) {
                __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__12, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2264, __pyx_L3_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              }
              goto __pyx_L13;
            }
            __pyx_L13:;
          }
          goto __pyx_L29;
          __pyx_L10_error:;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L3_error;
          __pyx_L29:;
        }
+2265:                     assert all([dts._state != "erred" for dts in ts._dependencies])
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  { /* enter inner scope */
                    __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2265, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_7);
                    __pyx_t_13 = 0;
                    __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_14), (&__pyx_t_15)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2265, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    __Pyx_XDECREF(__pyx_t_6);
                    __pyx_t_6 = __pyx_t_4;
                    __pyx_t_4 = 0;
                    while (1) {
                      __pyx_t_16 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_14, &__pyx_t_13, &__pyx_t_4, __pyx_t_15);
                      if (unlikely(__pyx_t_16 == 0)) break;
                      if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 2265, __pyx_L22_error)
                      __Pyx_GOTREF(__pyx_t_4);
                      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2265, __pyx_L22_error)
                      __Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
                      __pyx_t_4 = 0;
                      __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_9genexpr23__pyx_v_dts->_state, __pyx_n_u_erred, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2265, __pyx_L22_error)
                      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2265, __pyx_L22_error)
                      __Pyx_GOTREF(__pyx_t_4);
                      if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 2265, __pyx_L22_error)
                      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                    __Pyx_XDECREF((PyObject *)__pyx_9genexpr23__pyx_v_dts); __pyx_9genexpr23__pyx_v_dts = 0;
                    goto __pyx_L25_exit_scope;
                    __pyx_L22_error:;
                    __Pyx_XDECREF((PyObject *)__pyx_9genexpr23__pyx_v_dts); __pyx_9genexpr23__pyx_v_dts = 0;
                    goto __pyx_L14_error;
                    __pyx_L25_exit_scope:;
                  } /* exit inner scope */
                  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2265, __pyx_L14_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2265, __pyx_L14_error)
                  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                  if (unlikely(!__pyx_t_5)) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2265, __pyx_L14_error)
                  }
                }
                #endif
+2266:                     assert ts._exception_blame
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2266, __pyx_L14_error)
                  if (unlikely(!__pyx_t_5)) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2266, __pyx_L14_error)
                  }
                }
                #endif
+2267:                     assert not ts._who_has
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2267, __pyx_L14_error)
                  }
                }
                #endif
+2268:                     assert not ts._waiting_on
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2268, __pyx_L14_error)
                  }
                }
                #endif
+2269:                     assert not ts._waiters
                #ifndef CYTHON_WITHOUT_ASSERTIONS
                if (unlikely(!Py_OptimizeFlag)) {
                  __pyx_t_5 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
                  if (unlikely(!((!__pyx_t_5) != 0))) {
                    PyErr_SetNone(PyExc_AssertionError);
                    __PYX_ERR(0, 2269, __pyx_L14_error)
                  }
                }
                #endif
 2270: 
+2271:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2271, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2272: 
+2273:             ts._exception = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_ts->_exception);
      __Pyx_DECREF(__pyx_v_ts->_exception);
      __pyx_v_ts->_exception = Py_None;
+2274:             ts._exception_blame = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
      __Pyx_DECREF(__pyx_v_ts->_exception_blame);
      __pyx_v_ts->_exception_blame = Py_None;
+2275:             ts._traceback = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_ts->_traceback);
      __Pyx_DECREF(__pyx_v_ts->_traceback);
      __pyx_v_ts->_traceback = Py_None;
 2276: 
+2277:             for dts in ts._dependents:
      __pyx_t_14 = 0;
      __pyx_t_7 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_13), (&__pyx_t_15)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2277, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_16 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_13, &__pyx_t_14, &__pyx_t_7, __pyx_t_15);
        if (unlikely(__pyx_t_16 == 0)) break;
        if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 2277, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2277, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_7));
        __pyx_t_7 = 0;
+2278:                 if dts._state == "erred":
        __pyx_t_18 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 2278, __pyx_L3_error)
        __pyx_t_5 = (__pyx_t_18 != 0);
        if (__pyx_t_5) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2279:                     recommendations[dts._key] = "waiting"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 2279, __pyx_L3_error)
 2280: 
+2281:             report_msg = {"op": "task-retried", "key": key}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2281, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_task_retried) < 0) __PYX_ERR(0, 2281, __pyx_L3_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 2281, __pyx_L3_error)
      __pyx_v_report_msg = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2282:             cs: ClientState
+2283:             for cs in ts._who_wants:
      __pyx_t_13 = 0;
      __pyx_t_7 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_14), (&__pyx_t_15)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2283, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_16 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_14, &__pyx_t_13, &__pyx_t_7, __pyx_t_15);
        if (unlikely(__pyx_t_16 == 0)) break;
        if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 2283, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2283, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_7));
        __pyx_t_7 = 0;
+2284:                 client_msgs[cs._client_key] = [report_msg]
        __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2284, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_v_report_msg);
        __Pyx_GIVEREF(__pyx_v_report_msg);
        PyList_SET_ITEM(__pyx_t_7, 0, __pyx_v_report_msg);
        if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_cs->_client_key, __pyx_t_7) < 0)) __PYX_ERR(0, 2284, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2285: 
+2286:             ts.state = "released"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_released) < 0) __PYX_ERR(0, 2286, __pyx_L3_error)
 2287: 
+2288:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2288, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2289:         except Exception as e:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_15) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_erred_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_6) < 0) __PYX_ERR(0, 2289, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_e = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L40_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_17 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_17, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_12, &__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_17, __pyx_t_22);
          }
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ErrRestore(__pyx_t_8, __pyx_t_12, __pyx_t_11);
          __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_17 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_21;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2290:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_n_s_logger); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2290, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_exception); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2290, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_19 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
          __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
          if (likely(__pyx_t_19)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
            __Pyx_INCREF(__pyx_t_19);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_20, function);
          }
        }
        __pyx_t_9 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_19, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2290, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2291:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2291, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2291, __pyx_L40_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (__pyx_t_5) {
/* … */
        }
+2292:                 import pdb
          __pyx_t_9 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2292, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_v_pdb = __pyx_t_9;
          __pyx_t_9 = 0;
 2293: 
+2294:                 pdb.set_trace()
          __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2294, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_19 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
            __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
            if (likely(__pyx_t_19)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
              __Pyx_INCREF(__pyx_t_19);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_20, function);
            }
          }
          __pyx_t_9 = (__pyx_t_19) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_19) : __Pyx_PyObject_CallNoArg(__pyx_t_20);
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2294, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2295:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_7, __pyx_t_6);
        __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; 
        __PYX_ERR(0, 2295, __pyx_L40_error)
      }
 2296: 
+2297:     def transition_waiting_released(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_23transition_waiting_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_23transition_waiting_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_released (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_22transition_waiting_released(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_22transition_waiting_released(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_waiting_released", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2298:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2299:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2299, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2299, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2299, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
+2300:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2300, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2301:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2301, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2302: 
+2303:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2304:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2304, __pyx_L3_error)
          }
        }
        #endif
+2305:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2305, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2305, __pyx_L3_error)
          }
        }
        #endif
 2306: 
+2307:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2307, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2308: 
 2309:             dts: TaskState
+2310:             for dts in ts._dependencies:
      __pyx_t_6 = 0;
      __pyx_t_9 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2310, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_9;
      __pyx_t_9 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_7, &__pyx_t_6, &__pyx_t_9, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2310, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2310, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
        __pyx_t_9 = 0;
+2311:                 s = dts._waiters
        __pyx_t_9 = __pyx_v_dts->_waiters;
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_9));
        __pyx_t_9 = 0;
+2312:                 if ts in s:
        if (unlikely(__pyx_v_s == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 2312, __pyx_L3_error)
        }
        __pyx_t_5 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_s, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2312, __pyx_L3_error)
        __pyx_t_11 = (__pyx_t_5 != 0);
        if (__pyx_t_11) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2313:                     s.discard(ts)
          if (unlikely(__pyx_v_s == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
            __PYX_ERR(0, 2313, __pyx_L3_error)
          }
          __pyx_t_12 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2313, __pyx_L3_error)
+2314:                     if not s and not dts._who_wants:
          __pyx_t_5 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
          __pyx_t_13 = ((!__pyx_t_5) != 0);
          if (__pyx_t_13) {
          } else {
            __pyx_t_11 = __pyx_t_13;
            goto __pyx_L14_bool_binop_done;
          }
          __pyx_t_13 = (__pyx_v_dts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_wants) != 0);
          __pyx_t_5 = ((!__pyx_t_13) != 0);
          __pyx_t_11 = __pyx_t_5;
          __pyx_L14_bool_binop_done:;
          if (__pyx_t_11) {
/* … */
          }
+2315:                         recommendations[dts._key] = "released"
            if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 2315, __pyx_L3_error)
+2316:             ts._waiting_on.clear()
      if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
        __PYX_ERR(0, 2316, __pyx_L3_error)
      }
      __pyx_t_12 = PySet_Clear(__pyx_v_ts->_waiting_on); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2316, __pyx_L3_error)
 2317: 
+2318:             ts.state = "released"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_released) < 0) __PYX_ERR(0, 2318, __pyx_L3_error)
 2319: 
+2320:             if ts._has_lost_dependencies:
      __pyx_t_11 = (__pyx_v_ts->_has_lost_dependencies != 0);
      if (__pyx_t_11) {
/* … */
        goto __pyx_L16;
      }
+2321:                 recommendations[key] = "forgotten"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 2321, __pyx_L3_error)
+2322:             elif not ts._exception_blame and (ts._who_wants or ts._waiters):
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2322, __pyx_L3_error)
      __pyx_t_13 = ((!__pyx_t_5) != 0);
      if (__pyx_t_13) {
      } else {
        __pyx_t_11 = __pyx_t_13;
        goto __pyx_L17_bool_binop_done;
      }
      __pyx_t_13 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
      if (!__pyx_t_13) {
      } else {
        __pyx_t_11 = __pyx_t_13;
        goto __pyx_L17_bool_binop_done;
      }
      __pyx_t_13 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
      __pyx_t_11 = __pyx_t_13;
      __pyx_L17_bool_binop_done:;
      if (__pyx_t_11) {
/* … */
        goto __pyx_L16;
      }
+2323:                 recommendations[key] = "waiting"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 2323, __pyx_L3_error)
 2324:             else:
+2325:                 ts._waiters.clear()
      /*else*/ {
        if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
          __PYX_ERR(0, 2325, __pyx_L3_error)
        }
        __pyx_t_12 = PySet_Clear(__pyx_v_ts->_waiters); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2325, __pyx_L3_error)
      }
      __pyx_L16:;
 2326: 
+2327:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2327, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2328:         except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_waiting_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_14) < 0) __PYX_ERR(0, 2328, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_v_e = __pyx_t_9;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L25_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_8 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2329:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2329, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2329, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_16, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2329, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2330:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2330, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 2330, __pyx_L25_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (__pyx_t_11) {
/* … */
        }
+2331:                 import pdb
          __pyx_t_15 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2331, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_v_pdb = __pyx_t_15;
          __pyx_t_15 = 0;
 2332: 
+2333:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2333, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2333, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2334:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_9, __pyx_t_14);
        __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_14 = 0; 
        __PYX_ERR(0, 2334, __pyx_L25_error)
      }
 2335: 
+2336:     def transition_processing_released(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_25transition_processing_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_25transition_processing_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_released (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_24transition_processing_released(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_24transition_processing_released(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_w = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_released", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2337:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2338:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2338, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2338, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2338, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2339:             dts: TaskState
+2340:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2340, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2341:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2341, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2342: 
+2343:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2344:                 assert ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2344, __pyx_L3_error)
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2344, __pyx_L3_error)
          }
        }
        #endif
+2345:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2345, __pyx_L3_error)
          }
        }
        #endif
+2346:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2346, __pyx_L3_error)
          }
        }
        #endif
+2347:                 assert self._tasks[key].state == "processing"
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(__pyx_v_self->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2347, __pyx_L3_error)
          }
          __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2347, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_state); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2347, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2347, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2347, __pyx_L3_error)
          }
        }
        #endif
 2348: 
+2349:             w: str = _remove_from_processing(self, ts)
      __pyx_t_6 = __pyx_f_11distributed_9scheduler__remove_from_processing(__pyx_v_self, __pyx_v_ts); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2349, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_w = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
+2350:             if w:
      __pyx_t_5 = (__pyx_v_w != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_w) != 0);
      if (__pyx_t_5) {
/* … */
      }
+2351:                 worker_msgs[w] = [{"op": "release-task", "key": key}]
        __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2351, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_op, __pyx_kp_u_release_task) < 0) __PYX_ERR(0, 2351, __pyx_L3_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 2351, __pyx_L3_error)
        __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2351, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
        __pyx_t_6 = 0;
        if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_w, __pyx_t_4) < 0)) __PYX_ERR(0, 2351, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2352: 
+2353:             ts.state = "released"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_released) < 0) __PYX_ERR(0, 2353, __pyx_L3_error)
 2354: 
+2355:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2355, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2356: 
+2357:             if ts._has_lost_dependencies:
      __pyx_t_5 = (__pyx_v_ts->_has_lost_dependencies != 0);
      if (__pyx_t_5) {
/* … */
        goto __pyx_L11;
      }
+2358:                 recommendations[key] = "forgotten"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 2358, __pyx_L3_error)
+2359:             elif ts._waiters or ts._who_wants:
      __pyx_t_7 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
      if (!__pyx_t_7) {
      } else {
        __pyx_t_5 = __pyx_t_7;
        goto __pyx_L12_bool_binop_done;
      }
      __pyx_t_7 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
      __pyx_t_5 = __pyx_t_7;
      __pyx_L12_bool_binop_done:;
      if (__pyx_t_5) {
/* … */
      }
      __pyx_L11:;
+2360:                 recommendations[key] = "waiting"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 2360, __pyx_L3_error)
 2361: 
+2362:             if recommendations.get(key) != "waiting":
      __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_recommendations, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2362, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_waiting, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2362, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_5) {
/* … */
      }
+2363:                 for dts in ts._dependencies:
        __pyx_t_8 = 0;
        __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2363, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_4);
        __pyx_t_4 = __pyx_t_6;
        __pyx_t_6 = 0;
        while (1) {
          __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_9, &__pyx_t_8, &__pyx_t_6, __pyx_t_10);
          if (unlikely(__pyx_t_11 == 0)) break;
          if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2363, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2363, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
          __pyx_t_6 = 0;
+2364:                     if dts._state != "released":
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_released, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2364, __pyx_L3_error)
          __pyx_t_7 = (__pyx_t_5 != 0);
          if (__pyx_t_7) {
/* … */
          }
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2365:                         s = dts._waiters
            __pyx_t_6 = __pyx_v_dts->_waiters;
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_6));
            __pyx_t_6 = 0;
+2366:                         s.discard(ts)
            if (unlikely(__pyx_v_s == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
              __PYX_ERR(0, 2366, __pyx_L3_error)
            }
            __pyx_t_12 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2366, __pyx_L3_error)
+2367:                         if not s and not dts._who_wants:
            __pyx_t_5 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
            __pyx_t_13 = ((!__pyx_t_5) != 0);
            if (__pyx_t_13) {
            } else {
              __pyx_t_7 = __pyx_t_13;
              goto __pyx_L19_bool_binop_done;
            }
            __pyx_t_13 = (__pyx_v_dts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_wants) != 0);
            __pyx_t_5 = ((!__pyx_t_13) != 0);
            __pyx_t_7 = __pyx_t_5;
            __pyx_L19_bool_binop_done:;
            if (__pyx_t_7) {
/* … */
            }
+2368:                             recommendations[dts._key] = "released"
              if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 2368, __pyx_L3_error)
+2369:                 ts._waiters.clear()
        if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
          __PYX_ERR(0, 2369, __pyx_L3_error)
        }
        __pyx_t_12 = PySet_Clear(__pyx_v_ts->_waiters); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2369, __pyx_L3_error)
 2370: 
+2371:             if self._validate:
      __pyx_t_7 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_7) {
/* … */
      }
+2372:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_7 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2372, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_7) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2372, __pyx_L3_error)
          }
        }
        #endif
 2373: 
+2374:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2374, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2375:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_14) < 0) __PYX_ERR(0, 2375, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L27_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2376:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2376, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2376, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_16, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2376, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2377:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2377, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2377, __pyx_L27_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (__pyx_t_7) {
/* … */
        }
+2378:                 import pdb
          __pyx_t_15 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2378, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_v_pdb = __pyx_t_15;
          __pyx_t_15 = 0;
 2379: 
+2380:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2380, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2380, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2381:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_6, __pyx_t_14);
        __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; 
        __PYX_ERR(0, 2381, __pyx_L27_error)
      }
 2382: 
+2383:     def transition_processing_erred(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_27transition_processing_erred(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_27transition_processing_erred(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_cause = 0;
  PyObject *__pyx_v_exception = 0;
  PyObject *__pyx_v_traceback = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_erred (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_cause,&__pyx_n_s_exception,&__pyx_n_s_traceback,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_26transition_processing_erred(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_cause, PyObject *__pyx_v_exception, PyObject *__pyx_v_traceback, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_failing_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_report_msg = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_processing_erred", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_v_failing_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2384:         self, key, cause=None, exception=None, traceback=None, **kwargs
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cause);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exception);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_traceback);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "transition_processing_erred") < 0)) __PYX_ERR(0, 2383, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    __pyx_v_cause = values[1];
    __pyx_v_exception = values[2];
    __pyx_v_traceback = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition_processing_erred", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2383, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_26transition_processing_erred(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_key, __pyx_v_cause, __pyx_v_exception, __pyx_v_traceback, __pyx_v_kwargs);
 2385:     ):
 2386:         ws: WorkerState
+2387:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2388:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2388, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2388, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2388, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2389:             dts: TaskState
 2390:             failing_ts: TaskState
+2391:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2391, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2392:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2392, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2393: 
+2394:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2395:                 assert cause or ts._exception_blame
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_cause); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2395, __pyx_L3_error)
          if (!__pyx_t_6) {
          } else {
            __pyx_t_5 = __pyx_t_6;
            goto __pyx_L10_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2395, __pyx_L3_error)
          __pyx_t_5 = __pyx_t_6;
          __pyx_L10_bool_binop_done:;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2395, __pyx_L3_error)
          }
        }
        #endif
+2396:                 assert ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2396, __pyx_L3_error)
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2396, __pyx_L3_error)
          }
        }
        #endif
+2397:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2397, __pyx_L3_error)
          }
        }
        #endif
+2398:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2398, __pyx_L3_error)
          }
        }
        #endif
 2399: 
+2400:             if ts._actor:
      __pyx_t_5 = (__pyx_v_ts->_actor != 0);
      if (__pyx_t_5) {
/* … */
      }
+2401:                 ws = ts._processing_on
        __pyx_t_4 = ((PyObject *)__pyx_v_ts->_processing_on);
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4);
        __pyx_t_4 = 0;
+2402:                 ws._actors.remove(ts)
        if (unlikely(__pyx_v_ws->_actors == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
          __PYX_ERR(0, 2402, __pyx_L3_error)
        }
        __pyx_t_7 = __Pyx_PySet_Remove(__pyx_v_ws->_actors, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2402, __pyx_L3_error)
 2403: 
+2404:             _remove_from_processing(self, ts)
      __pyx_t_4 = __pyx_f_11distributed_9scheduler__remove_from_processing(__pyx_v_self, __pyx_v_ts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2404, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2405: 
+2406:             if exception is not None:
      __pyx_t_5 = (__pyx_v_exception != Py_None);
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
/* … */
      }
+2407:                 ts._exception = exception
        __Pyx_INCREF(__pyx_v_exception);
        __Pyx_GIVEREF(__pyx_v_exception);
        __Pyx_GOTREF(__pyx_v_ts->_exception);
        __Pyx_DECREF(__pyx_v_ts->_exception);
        __pyx_v_ts->_exception = __pyx_v_exception;
+2408:             if traceback is not None:
      __pyx_t_6 = (__pyx_v_traceback != Py_None);
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (__pyx_t_5) {
/* … */
      }
+2409:                 ts._traceback = traceback
        __Pyx_INCREF(__pyx_v_traceback);
        __Pyx_GIVEREF(__pyx_v_traceback);
        __Pyx_GOTREF(__pyx_v_ts->_traceback);
        __Pyx_DECREF(__pyx_v_ts->_traceback);
        __pyx_v_ts->_traceback = __pyx_v_traceback;
+2410:             if cause is not None:
      __pyx_t_5 = (__pyx_v_cause != Py_None);
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
/* … */
        goto __pyx_L15;
      }
+2411:                 failing_ts = self._tasks[cause]
        if (unlikely(__pyx_v_self->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 2411, __pyx_L3_error)
        }
        __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_cause); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2411, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2411, __pyx_L3_error)
        __pyx_v_failing_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
        __pyx_t_4 = 0;
+2412:                 ts._exception_blame = failing_ts
        __Pyx_INCREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
        __Pyx_DECREF(__pyx_v_ts->_exception_blame);
        __pyx_v_ts->_exception_blame = ((PyObject *)__pyx_v_failing_ts);
 2413:             else:
+2414:                 failing_ts = ts._exception_blame
      /*else*/ {
        if (!(likely(((__pyx_v_ts->_exception_blame) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts->_exception_blame, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2414, __pyx_L3_error)
        __pyx_t_4 = __pyx_v_ts->_exception_blame;
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_failing_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
        __pyx_t_4 = 0;
      }
      __pyx_L15:;
 2415: 
+2416:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2416, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2417: 
+2418:             for dts in ts._dependents:
      __pyx_t_8 = 0;
      __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2418, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_11;
      __pyx_t_11 = 0;
      while (1) {
        __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_9, &__pyx_t_8, &__pyx_t_11, __pyx_t_10);
        if (unlikely(__pyx_t_12 == 0)) break;
        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2418, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2418, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_11));
        __pyx_t_11 = 0;
+2419:                 dts._exception_blame = failing_ts
        __Pyx_INCREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_failing_ts));
        __Pyx_GOTREF(__pyx_v_dts->_exception_blame);
        __Pyx_DECREF(__pyx_v_dts->_exception_blame);
        __pyx_v_dts->_exception_blame = ((PyObject *)__pyx_v_failing_ts);
+2420:                 recommendations[dts._key] = "erred"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_erred) < 0)) __PYX_ERR(0, 2420, __pyx_L3_error)
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2421: 
+2422:             for dts in ts._dependencies:
      __pyx_t_9 = 0;
      __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2422, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_11;
      __pyx_t_11 = 0;
      while (1) {
        __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_8, &__pyx_t_9, &__pyx_t_11, __pyx_t_10);
        if (unlikely(__pyx_t_12 == 0)) break;
        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2422, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2422, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_11));
        __pyx_t_11 = 0;
+2423:                 s = dts._waiters
        __pyx_t_11 = __pyx_v_dts->_waiters;
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_11));
        __pyx_t_11 = 0;
+2424:                 s.discard(ts)
        if (unlikely(__pyx_v_s == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
          __PYX_ERR(0, 2424, __pyx_L3_error)
        }
        __pyx_t_7 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2424, __pyx_L3_error)
+2425:                 if not s and not dts._who_wants:
        __pyx_t_5 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
        __pyx_t_13 = ((!__pyx_t_5) != 0);
        if (__pyx_t_13) {
        } else {
          __pyx_t_6 = __pyx_t_13;
          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_13 = (__pyx_v_dts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_wants) != 0);
        __pyx_t_5 = ((!__pyx_t_13) != 0);
        __pyx_t_6 = __pyx_t_5;
        __pyx_L21_bool_binop_done:;
        if (__pyx_t_6) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2426:                     recommendations[dts._key] = "released"
          if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 2426, __pyx_L3_error)
 2427: 
+2428:             ts._waiters.clear()  # do anything with this?
      if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
        __PYX_ERR(0, 2428, __pyx_L3_error)
      }
      __pyx_t_7 = PySet_Clear(__pyx_v_ts->_waiters); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2428, __pyx_L3_error)
 2429: 
+2430:             ts.state = "erred"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_erred) < 0) __PYX_ERR(0, 2430, __pyx_L3_error)
 2431: 
 2432:             report_msg = {
+2433:                 "op": "task-erred",
      __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2433, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_task_erred) < 0) __PYX_ERR(0, 2433, __pyx_L3_error)
+2434:                 "key": key,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 2433, __pyx_L3_error)
+2435:                 "exception": failing_ts._exception,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_exception, __pyx_v_failing_ts->_exception) < 0) __PYX_ERR(0, 2433, __pyx_L3_error)
+2436:                 "traceback": failing_ts._traceback,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_traceback, __pyx_v_failing_ts->_traceback) < 0) __PYX_ERR(0, 2433, __pyx_L3_error)
      __pyx_v_report_msg = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2437:             }
 2438:             cs: ClientState
+2439:             for cs in ts._who_wants:
      __pyx_t_8 = 0;
      __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2439, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_11;
      __pyx_t_11 = 0;
      while (1) {
        __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_9, &__pyx_t_8, &__pyx_t_11, __pyx_t_10);
        if (unlikely(__pyx_t_12 == 0)) break;
        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2439, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2439, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_11));
        __pyx_t_11 = 0;
+2440:                 client_msgs[cs._client_key] = [report_msg]
        __pyx_t_11 = PyList_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2440, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_v_report_msg);
        __Pyx_GIVEREF(__pyx_v_report_msg);
        PyList_SET_ITEM(__pyx_t_11, 0, __pyx_v_report_msg);
        if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_cs->_client_key, __pyx_t_11) < 0)) __PYX_ERR(0, 2440, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2441: 
+2442:             cs = self._clients["fire-and-forget"]
      if (unlikely(__pyx_v_self->_clients == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2442, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_clients, __pyx_kp_u_fire_and_forget); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2442, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2442, __pyx_L3_error)
      __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_4));
      __pyx_t_4 = 0;
+2443:             if ts in cs._wants_what:
      if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 2443, __pyx_L3_error)
      }
      __pyx_t_6 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_cs->_wants_what, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2443, __pyx_L3_error)
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (__pyx_t_5) {
/* … */
      }
+2444:                 _client_releases_keys(
        __pyx_t_14 = __pyx_f_11distributed_9scheduler__client_releases_keys(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_cs, __pyx_v_recommendations); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2444, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        (void)(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 2445:                     self,
 2446:                     cs=cs,
+2447:                     keys=[key],
        __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2447, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_key);
/* … */
        __pyx_t_11 = __pyx_t_4;
        __Pyx_INCREF(__pyx_t_11);
 2448:                     recommendations=recommendations,
 2449:                 )
 2450: 
+2451:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2452:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2452, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2452, __pyx_L3_error)
          }
        }
        #endif
 2453: 
+2454:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2454, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L7_try_return;
+2455:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_processing_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_4, &__pyx_t_11) < 0) __PYX_ERR(0, 2455, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L32_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_10 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2456:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2456, __pyx_L32_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2456, __pyx_L32_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_16, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2456, __pyx_L32_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2457:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2457, __pyx_L32_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2457, __pyx_L32_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (__pyx_t_5) {
/* … */
        }
+2458:                 import pdb
          __pyx_t_15 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2458, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_v_pdb = __pyx_t_15;
          __pyx_t_15 = 0;
 2459: 
+2460:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2460, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2460, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2461:             raise
        __Pyx_GIVEREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_4, __pyx_t_11);
        __pyx_t_14 = 0; __pyx_t_4 = 0; __pyx_t_11 = 0; 
        __PYX_ERR(0, 2461, __pyx_L32_error)
      }
 2462: 
+2463:     def transition_no_worker_released(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_29transition_no_worker_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_29transition_no_worker_released(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_no_worker_released (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_28transition_no_worker_released(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_28transition_no_worker_released(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_no_worker_released", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_no_worker_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2464:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2465:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2465, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2465, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2465, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
 2466:             dts: TaskState
+2467:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2467, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2468:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2468, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2469: 
+2470:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2471:                 assert self._tasks[key].state == "no-worker"
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(__pyx_v_self->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2471, __pyx_L3_error)
          }
          __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2471, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_state); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2471, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_kp_u_no_worker, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2471, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2471, __pyx_L3_error)
          }
        }
        #endif
+2472:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2472, __pyx_L3_error)
          }
        }
        #endif
+2473:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2473, __pyx_L3_error)
          }
        }
        #endif
 2474: 
+2475:             self._unrunnable.remove(ts)
      if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 2475, __pyx_L3_error)
      }
      __pyx_t_7 = __Pyx_PySet_Remove(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2475, __pyx_L3_error)
+2476:             ts.state = "released"
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_released) < 0) __PYX_ERR(0, 2476, __pyx_L3_error)
 2477: 
+2478:             for dts in ts._dependencies:
      __pyx_t_8 = 0;
      __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2478, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_6);
      __pyx_t_6 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, __pyx_t_10);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2478, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2478, __pyx_L3_error)
        __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
        __pyx_t_4 = 0;
+2479:                 dts._waiters.discard(ts)
        if (unlikely(__pyx_v_dts->_waiters == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
          __PYX_ERR(0, 2479, __pyx_L3_error)
        }
        __pyx_t_7 = __Pyx_PySet_Discard(__pyx_v_dts->_waiters, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2479, __pyx_L3_error)
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 2480: 
+2481:             ts._waiters.clear()
      if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
        __PYX_ERR(0, 2481, __pyx_L3_error)
      }
      __pyx_t_7 = PySet_Clear(__pyx_v_ts->_waiters); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2481, __pyx_L3_error)
 2482: 
+2483:             return {}, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2483, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2483, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_t_6 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2484:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_no_worker_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_12) < 0) __PYX_ERR(0, 2484, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L17_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          }
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_16;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2485:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2485, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_exception); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2485, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
          }
        }
        __pyx_t_13 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_14, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2485, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2486:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2486, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2486, __pyx_L17_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_5) {
/* … */
        }
+2487:                 import pdb
          __pyx_t_13 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2487, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_v_pdb = __pyx_t_13;
          __pyx_t_13 = 0;
 2488: 
+2489:                 pdb.set_trace()
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2489, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_14 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_14)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_14);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          __pyx_t_13 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2489, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2490:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_6, __pyx_t_12);
        __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_12 = 0; 
        __PYX_ERR(0, 2490, __pyx_L17_error)
      }
 2491: 
 2492:     @ccall
+2493:     def remove_key(self, key):
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_31remove_key(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_remove_key(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key, int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_key", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_remove_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2493, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_31remove_key)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2493, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.remove_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_31remove_key(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_31remove_key(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_key (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_30remove_key(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_30remove_key(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_key", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_remove_key(__pyx_v_self, __pyx_v_key, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.remove_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2494:         ts: TaskState = self._tasks.pop(key)
  if (unlikely(__pyx_v_self->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
    __PYX_ERR(0, 2494, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_Pop(__pyx_v_self->_tasks, __pyx_v_key, ((PyObject *)NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2494, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+2495:         assert ts._state == "forgotten"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2495, __pyx_L1_error)
    if (unlikely(!(__pyx_t_5 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 2495, __pyx_L1_error)
    }
  }
  #endif
+2496:         self._unrunnable.discard(ts)
  if (unlikely(__pyx_v_self->_unrunnable == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
    __PYX_ERR(0, 2496, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PySet_Discard(__pyx_v_self->_unrunnable, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 2496, __pyx_L1_error)
 2497:         cs: ClientState
+2498:         for cs in ts._who_wants:
  __pyx_t_7 = 0;
  __pyx_t_2 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_8, &__pyx_t_7, &__pyx_t_2, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 2498, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_2));
    __pyx_t_2 = 0;
+2499:             cs._wants_what.remove(ts)
    if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 2499, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PySet_Remove(__pyx_v_cs->_wants_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 2499, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2500:         ts._who_wants.clear()
  if (unlikely(__pyx_v_ts->_who_wants == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 2500, __pyx_L1_error)
  }
  __pyx_t_6 = PySet_Clear(__pyx_v_ts->_who_wants); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 2500, __pyx_L1_error)
+2501:         ts._processing_on = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_ts->_processing_on);
  __Pyx_DECREF(((PyObject *)__pyx_v_ts->_processing_on));
  __pyx_v_ts->_processing_on = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None);
+2502:         ts._exception_blame = ts._exception = ts._traceback = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
  __Pyx_DECREF(__pyx_v_ts->_exception_blame);
  __pyx_v_ts->_exception_blame = Py_None;
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_ts->_exception);
  __Pyx_DECREF(__pyx_v_ts->_exception);
  __pyx_v_ts->_exception = Py_None;
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_ts->_traceback);
  __Pyx_DECREF(__pyx_v_ts->_traceback);
  __pyx_v_ts->_traceback = Py_None;
+2503:         self._task_metadata.pop(key, None)
  if (unlikely(__pyx_v_self->_task_metadata == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
    __PYX_ERR(0, 2503, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_Pop(__pyx_v_self->_task_metadata, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2504: 
+2505:     def transition_memory_forgotten(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_33transition_memory_forgotten(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_33transition_memory_forgotten(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_memory_forgotten (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_32transition_memory_forgotten(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_32transition_memory_forgotten(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_memory_forgotten", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_memory_forgotten", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2506:         ws: WorkerState
+2507:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2508:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2508, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2508, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2508, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
+2509:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2509, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2510:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2510, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2511: 
+2512:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2513:                 assert ts._state == "memory"
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2513, __pyx_L3_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2513, __pyx_L3_error)
          }
        }
        #endif
+2514:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2514, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2514, __pyx_L3_error)
          }
        }
        #endif
+2515:                 assert not ts._waiting_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2515, __pyx_L3_error)
          }
        }
        #endif
+2516:                 if not ts._run_spec:
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2516, __pyx_L3_error)
        __pyx_t_6 = ((!__pyx_t_5) != 0);
        if (__pyx_t_6) {
          goto __pyx_L10;
        }
 2517:                     # It's ok to forget a pure data task
 2518:                     pass
+2519:                 elif ts._has_lost_dependencies:
        __pyx_t_6 = (__pyx_v_ts->_has_lost_dependencies != 0);
        if (__pyx_t_6) {
          goto __pyx_L10;
        }
 2520:                     # It's ok to forget a task with forgotten dependencies
 2521:                     pass
+2522:                 elif not ts._who_wants and not ts._waiters and not ts._dependents:
        __pyx_t_5 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
        __pyx_t_7 = ((!__pyx_t_5) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_6 = __pyx_t_7;
          goto __pyx_L11_bool_binop_done;
        }
        __pyx_t_7 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
        __pyx_t_5 = ((!__pyx_t_7) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_6 = __pyx_t_5;
          goto __pyx_L11_bool_binop_done;
        }
        __pyx_t_5 = (__pyx_v_ts->_dependents != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_dependents) != 0);
        __pyx_t_7 = ((!__pyx_t_5) != 0);
        __pyx_t_6 = __pyx_t_7;
        __pyx_L11_bool_binop_done:;
        if (__pyx_t_6) {
          goto __pyx_L10;
        }
 2523:                     # It's ok to forget a task that nobody needs
 2524:                     pass
 2525:                 else:
+2526:                     assert 0, (ts,)
        /*else*/ {
          #ifndef CYTHON_WITHOUT_ASSERTIONS
          if (unlikely(!Py_OptimizeFlag)) {
            if (unlikely(!0)) {
              __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2526, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_INCREF(((PyObject *)__pyx_v_ts));
              __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
              PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_ts));
              __pyx_t_8 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2526, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __PYX_ERR(0, 2526, __pyx_L3_error)
            }
          }
          #endif
        }
        __pyx_L10:;
 2527: 
+2528:             recommendations: dict = {}
      __pyx_t_8 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2528, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
 2529: 
+2530:             if ts._actor:
      __pyx_t_6 = (__pyx_v_ts->_actor != 0);
      if (__pyx_t_6) {
/* … */
      }
+2531:                 for ws in ts._who_has:
        __pyx_t_9 = 0;
        __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2531, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_8);
        __pyx_t_8 = __pyx_t_4;
        __pyx_t_4 = 0;
        while (1) {
          __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_8, __pyx_t_10, &__pyx_t_9, &__pyx_t_4, __pyx_t_11);
          if (unlikely(__pyx_t_12 == 0)) break;
          if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2531, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 2531, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4));
          __pyx_t_4 = 0;
+2532:                     ws._actors.discard(ts)
          if (unlikely(__pyx_v_ws->_actors == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
            __PYX_ERR(0, 2532, __pyx_L3_error)
          }
          __pyx_t_13 = __Pyx_PySet_Discard(__pyx_v_ws->_actors, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 2532, __pyx_L3_error)
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 2533: 
+2534:             _propagate_forgotten(self, ts, recommendations, worker_msgs)
      __pyx_t_8 = __pyx_f_11distributed_9scheduler__propagate_forgotten(__pyx_v_self, __pyx_v_ts, __pyx_v_recommendations, __pyx_v_worker_msgs); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2534, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 2535: 
+2536:             client_msgs = _task_to_client_msgs(self, ts)
      __pyx_t_8 = __pyx_f_11distributed_9scheduler__task_to_client_msgs(__pyx_v_self, __pyx_v_ts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2536, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF_SET(__pyx_v_client_msgs, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;
+2537:             self.remove_key(key)
      __pyx_t_8 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->remove_key(__pyx_v_self, __pyx_v_key, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2537, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 2538: 
+2539:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2539, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      goto __pyx_L7_try_return;
+2540:         except Exception as e:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_memory_forgotten", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_4, &__pyx_t_14) < 0) __PYX_ERR(0, 2540, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L22_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2541:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2541, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2541, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_16, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2541, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2542:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2542, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2542, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (__pyx_t_6) {
/* … */
        }
+2543:                 import pdb
          __pyx_t_15 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2543, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_v_pdb = __pyx_t_15;
          __pyx_t_15 = 0;
 2544: 
+2545:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2545, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2545, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+2546:             raise
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_4, __pyx_t_14);
        __pyx_t_8 = 0; __pyx_t_4 = 0; __pyx_t_14 = 0; 
        __PYX_ERR(0, 2546, __pyx_L22_error)
      }
 2547: 
+2548:     def transition_released_forgotten(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_35transition_released_forgotten(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_35transition_released_forgotten(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_forgotten (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_34transition_released_forgotten(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_34transition_released_forgotten(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition_released_forgotten", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_forgotten", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2549:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2550:             ts: TaskState = self._tasks[key]
      if (unlikely(__pyx_v_self->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2550, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_self->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2550, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2550, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4);
      __pyx_t_4 = 0;
+2551:             worker_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2551, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2552:             client_msgs: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2552, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
 2553: 
+2554:             if self._validate:
      __pyx_t_5 = (__pyx_v_self->_validate != 0);
      if (__pyx_t_5) {
/* … */
      }
+2555:                 assert ts._state in ("released", "erred")
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __Pyx_INCREF(__pyx_v_ts->_state);
          __pyx_t_6 = __pyx_v_ts->_state;
          __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_n_u_released, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2555, __pyx_L3_error)
          __pyx_t_8 = (__pyx_t_7 != 0);
          if (!__pyx_t_8) {
          } else {
            __pyx_t_5 = __pyx_t_8;
            goto __pyx_L10_bool_binop_done;
          }
          __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 2555, __pyx_L3_error)
          __pyx_t_7 = (__pyx_t_8 != 0);
          __pyx_t_5 = __pyx_t_7;
          __pyx_L10_bool_binop_done:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2555, __pyx_L3_error)
          }
        }
        #endif
+2556:                 assert not ts._who_has
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2556, __pyx_L3_error)
          }
        }
        #endif
+2557:                 assert not ts._processing_on
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2557, __pyx_L3_error)
          if (unlikely(!((!__pyx_t_5) != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 2557, __pyx_L3_error)
          }
        }
        #endif
+2558:                 assert not ts._waiting_on, (ts, ts._waiting_on)
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
          if (unlikely(!((!__pyx_t_5) != 0))) {
            __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2558, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_INCREF(((PyObject *)__pyx_v_ts));
            __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
            PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_ts));
            __Pyx_INCREF(__pyx_v_ts->_waiting_on);
            __Pyx_GIVEREF(__pyx_v_ts->_waiting_on);
            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_ts->_waiting_on);
            __pyx_t_9 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2558, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_9);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __PYX_ERR(0, 2558, __pyx_L3_error)
          }
        }
        #endif
+2559:                 if not ts._run_spec:
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2559, __pyx_L3_error)
        __pyx_t_7 = ((!__pyx_t_5) != 0);
        if (__pyx_t_7) {
          goto __pyx_L12;
        }
 2560:                     # It's ok to forget a pure data task
 2561:                     pass
+2562:                 elif ts._has_lost_dependencies:
        __pyx_t_7 = (__pyx_v_ts->_has_lost_dependencies != 0);
        if (__pyx_t_7) {
          goto __pyx_L12;
        }
 2563:                     # It's ok to forget a task with forgotten dependencies
 2564:                     pass
+2565:                 elif not ts._who_wants and not ts._waiters and not ts._dependents:
        __pyx_t_5 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
        __pyx_t_8 = ((!__pyx_t_5) != 0);
        if (__pyx_t_8) {
        } else {
          __pyx_t_7 = __pyx_t_8;
          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_8 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
        __pyx_t_5 = ((!__pyx_t_8) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_7 = __pyx_t_5;
          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_5 = (__pyx_v_ts->_dependents != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_dependents) != 0);
        __pyx_t_8 = ((!__pyx_t_5) != 0);
        __pyx_t_7 = __pyx_t_8;
        __pyx_L13_bool_binop_done:;
        if (__pyx_t_7) {
          goto __pyx_L12;
        }
 2566:                     # It's ok to forget a task that nobody needs
 2567:                     pass
 2568:                 else:
+2569:                     assert 0, (ts,)
        /*else*/ {
          #ifndef CYTHON_WITHOUT_ASSERTIONS
          if (unlikely(!Py_OptimizeFlag)) {
            if (unlikely(!0)) {
              __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2569, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_INCREF(((PyObject *)__pyx_v_ts));
              __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
              PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_ts));
              __pyx_t_4 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2569, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __PYX_ERR(0, 2569, __pyx_L3_error)
            }
          }
          #endif
        }
        __pyx_L12:;
 2570: 
+2571:             recommendations: dict = {}
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2571, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
+2572:             _propagate_forgotten(self, ts, recommendations, worker_msgs)
      __pyx_t_4 = __pyx_f_11distributed_9scheduler__propagate_forgotten(__pyx_v_self, __pyx_v_ts, __pyx_v_recommendations, __pyx_v_worker_msgs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2572, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2573: 
+2574:             client_msgs = _task_to_client_msgs(self, ts)
      __pyx_t_4 = __pyx_f_11distributed_9scheduler__task_to_client_msgs(__pyx_v_self, __pyx_v_ts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2574, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_client_msgs, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+2575:             self.remove_key(key)
      __pyx_t_4 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->remove_key(__pyx_v_self, __pyx_v_key, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2575, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2576: 
+2577:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2577, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+2578:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.SchedulerState.transition_released_forgotten", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_11) < 0) __PYX_ERR(0, 2578, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_v_e = __pyx_t_9;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L21_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          }
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+2579:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2579, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2579, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
          }
        }
        __pyx_t_12 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_13, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2579, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+2580:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2580, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2580, __pyx_L21_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (__pyx_t_7) {
/* … */
        }
+2581:                 import pdb
          __pyx_t_12 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2581, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_v_pdb = __pyx_t_12;
          __pyx_t_12 = 0;
 2582: 
+2583:                 pdb.set_trace()
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2583, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_13 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
            if (likely(__pyx_t_13)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_14, function);
            }
          }
          __pyx_t_12 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2583, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+2584:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_9, __pyx_t_11);
        __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_11 = 0; 
        __PYX_ERR(0, 2584, __pyx_L21_error)
      }
 2585: 
 2586:     ##############################
 2587:     # Assigning Tasks to Workers #
 2588:     ##############################
 2589: 
 2590:     @ccall
 2591:     @exceptval(check=False)
+2592:     def check_idle_saturated(self, ws: WorkerState, occ: double = -1.0):
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_37check_idle_saturated(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_check_idle_saturated(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch, struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_check_idle_saturated *__pyx_optional_args) {
  double __pyx_v_occ = __pyx_k__13;
  Py_ssize_t __pyx_v_total_nthreads;
  Py_ssize_t __pyx_v_nc;
  Py_ssize_t __pyx_v_p;
  double __pyx_v_total_occupancy;
  double __pyx_v_avg;
  PyObject *__pyx_v_idle = NULL;
  PyObject *__pyx_v_saturated = 0;
  double __pyx_v_pending;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_idle_saturated", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_occ = __pyx_optional_args->occ;
    }
  }
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check_idle_saturated); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_37check_idle_saturated)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_occ); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2592, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_6 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_ws), __pyx_t_3};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2592, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_ws), __pyx_t_3};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2592, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        {
          __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2592, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2592, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.check_idle_saturated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_idle);
  __Pyx_XDECREF(__pyx_v_saturated);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_37check_idle_saturated(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_36check_idle_saturated[] = "Update the status of the idle and saturated state\n\n        The scheduler keeps track of workers that are ..\n\n        -  Saturated: have enough work to stay busy\n        -  Idle: do not have enough work to stay busy\n\n        They are considered saturated if they both have enough tasks to occupy\n        all of their threads, and if the expected runtime of those tasks is\n        large enough.\n\n        This is useful for load balancing and adaptivity.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_37check_idle_saturated(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  double __pyx_v_occ;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_idle_saturated (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ws,&__pyx_n_s_occ,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_occ);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_idle_saturated") < 0)) __PYX_ERR(0, 2592, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[0]);
    if (values[1]) {
      __pyx_v_occ = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_occ == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2592, __pyx_L3_error)
    } else {
      __pyx_v_occ = __pyx_k__13;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("check_idle_saturated", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2592, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.check_idle_saturated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 2592, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_36check_idle_saturated(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ws, __pyx_v_occ);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_36check_idle_saturated(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, double __pyx_v_occ) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_idle_saturated", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.occ = __pyx_v_occ;
  __pyx_t_1 = __pyx_vtabptr_11distributed_9scheduler_SchedulerState->check_idle_saturated(__pyx_v_self, __pyx_v_ws, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.check_idle_saturated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_k__13 = (-1.0);
  __pyx_k__13 = (-1.0);
/* … */
struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_check_idle_saturated {
  int __pyx_n;
  double occ;
};
 2593:         """Update the status of the idle and saturated state
 2594: 
 2595:         The scheduler keeps track of workers that are ..
 2596: 
 2597:         -  Saturated: have enough work to stay busy
 2598:         -  Idle: do not have enough work to stay busy
 2599: 
 2600:         They are considered saturated if they both have enough tasks to occupy
 2601:         all of their threads, and if the expected runtime of those tasks is
 2602:         large enough.
 2603: 
 2604:         This is useful for load balancing and adaptivity.
 2605:         """
+2606:         total_nthreads: Py_ssize_t = self._total_nthreads
  __pyx_t_8 = __pyx_v_self->_total_nthreads;
  __pyx_v_total_nthreads = __pyx_t_8;
+2607:         if total_nthreads == 0 or ws.status == Status.closed:
  __pyx_t_10 = ((__pyx_v_total_nthreads == 0) != 0);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ws), __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_closed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2607, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 2607, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = __pyx_t_10;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_9) {
/* … */
  }
+2608:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+2609:         if occ < 0:
  __pyx_t_9 = ((__pyx_v_occ < 0.0) != 0);
  if (__pyx_t_9) {
/* … */
  }
+2610:             occ = ws._occupancy
    __pyx_t_11 = __pyx_v_ws->_occupancy;
    __pyx_v_occ = __pyx_t_11;
 2611: 
+2612:         nc: Py_ssize_t = ws._nthreads
  __pyx_t_8 = __pyx_v_ws->_nthreads;
  __pyx_v_nc = __pyx_t_8;
+2613:         p: Py_ssize_t = len(ws._processing)
  __pyx_t_2 = __pyx_v_ws->_processing;
  __Pyx_INCREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 2613, __pyx_L1_error)
  }
  __pyx_t_8 = PyDict_Size(__pyx_t_2); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_p = __pyx_t_8;
+2614:         total_occupancy: double = self._total_occupancy
  __pyx_t_11 = __pyx_v_self->_total_occupancy;
  __pyx_v_total_occupancy = __pyx_t_11;
+2615:         avg: double = total_occupancy / total_nthreads
  if (unlikely(__pyx_v_total_nthreads == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 2615, __pyx_L1_error)
  }
  __pyx_v_avg = (__pyx_v_total_occupancy / ((double)__pyx_v_total_nthreads));
 2616: 
+2617:         idle = self._idle
  __pyx_t_2 = __pyx_v_self->_idle;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_idle = __pyx_t_2;
  __pyx_t_2 = 0;
+2618:         saturated: set = self._saturated
  __pyx_t_2 = __pyx_v_self->_saturated;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_saturated = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+2619:         if p < nc or occ < nc * avg / 2:
  __pyx_t_10 = ((__pyx_v_p < __pyx_v_nc) != 0);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_10 = ((__pyx_v_occ < ((__pyx_v_nc * __pyx_v_avg) / 2.0)) != 0);
  __pyx_t_9 = __pyx_t_10;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L7;
  }
+2620:             idle[ws._address] = ws
    if (unlikely(PyObject_SetItem(__pyx_v_idle, __pyx_v_ws->_address, ((PyObject *)__pyx_v_ws)) < 0)) __PYX_ERR(0, 2620, __pyx_L1_error)
+2621:             saturated.discard(ws)
    if (unlikely(__pyx_v_saturated == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
      __PYX_ERR(0, 2621, __pyx_L1_error)
    }
    __pyx_t_12 = __Pyx_PySet_Discard(__pyx_v_saturated, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2621, __pyx_L1_error)
 2622:         else:
+2623:             idle.pop(ws._address, None)
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_idle, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_ws->_address, Py_None};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2623, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_ws->_address, Py_None};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2623, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2623, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ws->_address);
      __Pyx_GIVEREF(__pyx_v_ws->_address);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_ws->_address);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, Py_None);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2623, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2624: 
+2625:             if p > nc:
    __pyx_t_9 = ((__pyx_v_p > __pyx_v_nc) != 0);
    if (__pyx_t_9) {
/* … */
    }
+2626:                 pending: double = occ * (p - nc) / (p * nc)
      __pyx_t_11 = (__pyx_v_occ * (__pyx_v_p - __pyx_v_nc));
      __pyx_t_8 = (__pyx_v_p * __pyx_v_nc);
      if (unlikely(__pyx_t_8 == 0)) {
        PyErr_SetString(PyExc_ZeroDivisionError, "float division");
        __PYX_ERR(0, 2626, __pyx_L1_error)
      }
      __pyx_v_pending = (__pyx_t_11 / ((double)__pyx_t_8));
+2627:                 if 0.4 < pending > 1.9 * avg:
      __pyx_t_9 = (0.4 < __pyx_v_pending);
      if (__pyx_t_9) {
        __pyx_t_9 = (__pyx_v_pending > (1.9 * __pyx_v_avg));
      }
      __pyx_t_10 = (__pyx_t_9 != 0);
      if (__pyx_t_10) {
/* … */
      }
+2628:                     saturated.add(ws)
        if (unlikely(__pyx_v_saturated == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
          __PYX_ERR(0, 2628, __pyx_L1_error)
        }
        __pyx_t_12 = PySet_Add(__pyx_v_saturated, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2628, __pyx_L1_error)
+2629:                     return
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L0;
 2630: 
+2631:             saturated.discard(ws)
    if (unlikely(__pyx_v_saturated == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
      __PYX_ERR(0, 2631, __pyx_L1_error)
    }
    __pyx_t_12 = __Pyx_PySet_Discard(__pyx_v_saturated, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 2631, __pyx_L1_error)
  }
  __pyx_L7:;
 2632: 
 2633:     @ccall
+2634:     def get_comm_cost(self, ts: TaskState, ws: WorkerState) -> double:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_39get_comm_cost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static double __pyx_f_11distributed_9scheduler_14SchedulerState_get_comm_cost(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_deps = 0;
  Py_ssize_t __pyx_v_nbytes;
  double __pyx_v_bandwidth;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_comm_cost", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_comm_cost); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_39get_comm_cost)) {
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2634, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2634, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2634, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, ((PyObject *)__pyx_v_ts));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_ws));
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2634, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2634, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_comm_cost", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_39get_comm_cost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_38get_comm_cost[] = "\n        Get the estimated communication cost (in s.) to compute the task\n        on the given worker.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_39get_comm_cost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_comm_cost (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_ws,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_comm_cost", 1, 2, 2, 1); __PYX_ERR(0, 2634, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_comm_cost") < 0)) __PYX_ERR(0, 2634, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_comm_cost", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2634, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_comm_cost", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2634, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 2634, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_38get_comm_cost(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_ws);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_38get_comm_cost(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_comm_cost", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_get_comm_cost(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2634, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_comm_cost", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2635:         """
 2636:         Get the estimated communication cost (in s.) to compute the task
 2637:         on the given worker.
 2638:         """
 2639:         dts: TaskState
+2640:         deps: set = ts._dependencies - ws._has_what
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_ts->_dependencies, __pyx_v_ws->_has_what); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 2640, __pyx_L1_error)
  __pyx_v_deps = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2641:         nbytes: Py_ssize_t = 0
  __pyx_v_nbytes = 0;
+2642:         bandwidth: double = self._bandwidth
  __pyx_t_7 = __pyx_v_self->_bandwidth;
  __pyx_v_bandwidth = __pyx_t_7;
+2643:         for dts in deps:
  __pyx_t_8 = 0;
  __pyx_t_2 = __Pyx_set_iterator(__pyx_v_deps, 1, (&__pyx_t_9), (&__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_8, &__pyx_t_2, __pyx_t_5);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2643, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
    __pyx_t_2 = 0;
+2644:             nbytes += dts._nbytes
    __pyx_v_nbytes = (__pyx_v_nbytes + __pyx_v_dts->_nbytes);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2645:         return nbytes / bandwidth
  if (unlikely(__pyx_v_bandwidth == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 2645, __pyx_L1_error)
  }
  __pyx_r = (((double)__pyx_v_nbytes) / __pyx_v_bandwidth);
  goto __pyx_L0;
 2646: 
 2647:     @ccall
+2648:     def get_task_duration(self, ts: TaskState, default: double = -1) -> double:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_41get_task_duration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static double __pyx_f_11distributed_9scheduler_14SchedulerState_get_task_duration(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, int __pyx_skip_dispatch, struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_get_task_duration *__pyx_optional_args) {
  double __pyx_v_default = ((double)-1.0);
  double __pyx_v_duration;
  PyObject *__pyx_v_s = 0;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_duration", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default = __pyx_optional_args->__pyx_default;
    }
  }
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_task_duration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_41get_task_duration)) {
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_default); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2648, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_6 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_ts), __pyx_t_3};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2648, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_ts), __pyx_t_3};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2648, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        {
          __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2648, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2648, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2648, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_8;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_task_duration", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_41get_task_duration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_40get_task_duration[] = "\n        Get the estimated computation cost of the given task\n        (not including any communication cost).\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_41get_task_duration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  double __pyx_v_default;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_duration (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_default,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_default);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_task_duration") < 0)) __PYX_ERR(0, 2648, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    if (values[1]) {
      __pyx_v_default = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_default == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2648, __pyx_L3_error)
    } else {
      __pyx_v_default = ((double)-1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_task_duration", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2648, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_task_duration", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2648, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_40get_task_duration(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_default);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_40get_task_duration(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, double __pyx_v_default) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_duration", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.__pyx_default = __pyx_v_default;
  __pyx_t_1 = __pyx_vtabptr_11distributed_9scheduler_SchedulerState->get_task_duration(__pyx_v_self, __pyx_v_ts, 1, &__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2648, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.get_task_duration", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_11distributed_9scheduler_14SchedulerState_get_task_duration {
  int __pyx_n;
  double __pyx_default;
};
 2649:         """
 2650:         Get the estimated computation cost of the given task
 2651:         (not including any communication cost).
 2652:         """
+2653:         duration: double = ts._prefix._duration_average
  __pyx_t_8 = __pyx_v_ts->_prefix->_duration_average;
  __pyx_v_duration = __pyx_t_8;
+2654:         if duration < 0:
  __pyx_t_9 = ((__pyx_v_duration < 0.0) != 0);
  if (__pyx_t_9) {
/* … */
  }
+2655:             s: set = self._unknown_durations[ts._prefix._name]
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_self->_unknown_durations, __pyx_v_ts->_prefix->_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 2655, __pyx_L1_error)
    __pyx_v_s = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+2656:             s.add(ts)
    if (unlikely(__pyx_v_s == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
      __PYX_ERR(0, 2656, __pyx_L1_error)
    }
    __pyx_t_10 = PySet_Add(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 2656, __pyx_L1_error)
+2657:             if default < 0:
    __pyx_t_9 = ((__pyx_v_default < 0.0) != 0);
    if (__pyx_t_9) {
/* … */
      goto __pyx_L4;
    }
+2658:                 duration = UNKNOWN_TASK_DURATION
      __pyx_v_duration = __pyx_v_11distributed_9scheduler_UNKNOWN_TASK_DURATION;
 2659:             else:
+2660:                 duration = default
    /*else*/ {
      __pyx_v_duration = __pyx_v_default;
    }
    __pyx_L4:;
 2661: 
+2662:         return duration
  __pyx_r = __pyx_v_duration;
  goto __pyx_L0;
 2663: 
 2664:     @ccall
 2665:     @exceptval(check=False)
+2666:     def valid_workers(self, ts: TaskState) -> set:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_43valid_workers(PyObject *__pyx_v_self, PyObject *__pyx_v_ts); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_valid_workers(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_s = 0;
  PyObject *__pyx_v_hr = 0;
  PyObject *__pyx_v_sl = 0;
  PyObject *__pyx_v_ss = 0;
  PyObject *__pyx_v_dw = 0;
  PyObject *__pyx_v_ww = 0;
  PyObject *__pyx_9genexpr24__pyx_v_w = NULL;
  PyObject *__pyx_9genexpr25__pyx_v_h = NULL;
  PyObject *__pyx_9genexpr26__pyx_v_h = NULL;
  PyObject *__pyx_9genexpr27__pyx_v_resource = NULL;
  PyObject *__pyx_9genexpr27__pyx_v_required = NULL;
  PyObject *__pyx_9genexpr28__pyx_v_w = NULL;
  PyObject *__pyx_9genexpr28__pyx_v_supplied = NULL;
  PyObject *__pyx_9genexpr29__pyx_v_w = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("valid_workers", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_valid_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2666, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_43valid_workers)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_ts));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2666, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(PySet_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 2666, __pyx_L1_error)
        __pyx_r = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.valid_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_hr);
  __Pyx_XDECREF(__pyx_v_sl);
  __Pyx_XDECREF(__pyx_v_ss);
  __Pyx_XDECREF(__pyx_v_dw);
  __Pyx_XDECREF(__pyx_v_ww);
  __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_w);
  __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_h);
  __Pyx_XDECREF(__pyx_9genexpr26__pyx_v_h);
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_resource);
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_required);
  __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_w);
  __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_supplied);
  __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_w);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_43valid_workers(PyObject *__pyx_v_self, PyObject *__pyx_v_ts); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_42valid_workers[] = "Return set of currently valid workers for key\n\n        If all workers are valid then this returns ``None``.\n        This checks tracks the following state:\n\n        *  worker_restrictions\n        *  host_restrictions\n        *  resource_restrictions\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_43valid_workers(PyObject *__pyx_v_self, PyObject *__pyx_v_ts) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("valid_workers (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2666, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_42valid_workers(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_ts));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_42valid_workers(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("valid_workers", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_valid_workers(__pyx_v_self, __pyx_v_ts, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.valid_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2667:         """Return set of currently valid workers for key
 2668: 
 2669:         If all workers are valid then this returns ``None``.
 2670:         This checks tracks the following state:
 2671: 
 2672:         *  worker_restrictions
 2673:         *  host_restrictions
 2674:         *  resource_restrictions
 2675:         """
+2676:         s: set = None
  __Pyx_INCREF(Py_None);
  __pyx_v_s = ((PyObject*)Py_None);
 2677: 
+2678:         if ts._worker_restrictions:
  __pyx_t_5 = (__pyx_v_ts->_worker_restrictions != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_worker_restrictions) != 0);
  if (__pyx_t_5) {
/* … */
  }
+2679:             s = {w for w in ts._worker_restrictions if w in self._workers_dv}
    { /* enter inner scope */
      __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2679, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = 0;
      __pyx_t_3 = __Pyx_set_iterator(__pyx_v_ts->_worker_restrictions, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2679, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_6, &__pyx_t_3, __pyx_t_8);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2679, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_9genexpr24__pyx_v_w, __pyx_t_3);
        __pyx_t_3 = 0;
        if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 2679, __pyx_L6_error)
        }
        __pyx_t_5 = (__Pyx_PyDict_ContainsTF(__pyx_9genexpr24__pyx_v_w, __pyx_v_self->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2679, __pyx_L6_error)
        __pyx_t_10 = (__pyx_t_5 != 0);
        if (__pyx_t_10) {
          if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_9genexpr24__pyx_v_w))) __PYX_ERR(0, 2679, __pyx_L6_error)
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_w); __pyx_9genexpr24__pyx_v_w = 0;
      goto __pyx_L10_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_w); __pyx_9genexpr24__pyx_v_w = 0;
      goto __pyx_L1_error;
      __pyx_L10_exit_scope:;
    } /* exit inner scope */
    __Pyx_DECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
 2680: 
+2681:         if ts._host_restrictions:
  __pyx_t_10 = (__pyx_v_ts->_host_restrictions != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_host_restrictions) != 0);
  if (__pyx_t_10) {
/* … */
  }
 2682:             # Resolve the alias here rather than early, for the worker
 2683:             # may not be connected when host_restrictions is populated
+2684:             hr: list = [self.coerce_hostname(h) for h in ts._host_restrictions]
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2684, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = 0;
      __pyx_t_3 = __Pyx_set_iterator(__pyx_v_ts->_host_restrictions, 1, (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2684, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_6, &__pyx_t_7, &__pyx_t_3, __pyx_t_8);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2684, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_9genexpr25__pyx_v_h, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_self->__pyx_vtab)->coerce_hostname(__pyx_v_self, __pyx_9genexpr25__pyx_v_h, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2684, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 2684, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_h); __pyx_9genexpr25__pyx_v_h = 0;
      goto __pyx_L17_exit_scope;
      __pyx_L14_error:;
      __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_h); __pyx_9genexpr25__pyx_v_h = 0;
      goto __pyx_L1_error;
      __pyx_L17_exit_scope:;
    } /* exit inner scope */
    __pyx_v_hr = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 2685:             # XXX need HostState?
+2686:             sl: list = [
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2686, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_1);
+2687:                 self._host_info[h]["addresses"] for h in hr if h in self._host_info
      __pyx_t_2 = __pyx_v_hr; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
      for (;;) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 2687, __pyx_L20_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2687, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
        __Pyx_XDECREF_SET(__pyx_9genexpr26__pyx_v_h, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_9genexpr26__pyx_v_h, __pyx_v_self->_host_info, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 2687, __pyx_L20_error)
        __pyx_t_5 = (__pyx_t_10 != 0);
        if (__pyx_t_5) {
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_self->_host_info, __pyx_9genexpr26__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2687, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_n_u_addresses); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2687, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 2686, __pyx_L20_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_9genexpr26__pyx_v_h); __pyx_9genexpr26__pyx_v_h = 0;
      goto __pyx_L24_exit_scope;
      __pyx_L20_error:;
      __Pyx_XDECREF(__pyx_9genexpr26__pyx_v_h); __pyx_9genexpr26__pyx_v_h = 0;
      goto __pyx_L1_error;
      __pyx_L24_exit_scope:;
    } /* exit inner scope */
    __pyx_v_sl = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 2688:             ]
+2689:             ss: set = set.union(*sl) if sl else set()
    __pyx_t_5 = (PyList_GET_SIZE(__pyx_v_sl) != 0);
    if (__pyx_t_5) {
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PySet_Type)), __pyx_n_s_union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PySequence_Tuple(__pyx_v_sl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!(likely(PySet_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 2689, __pyx_L1_error)
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_v_ss = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+2690:             if s is None:
    __pyx_t_5 = (__pyx_v_s == ((PyObject*)Py_None));
    __pyx_t_10 = (__pyx_t_5 != 0);
    if (__pyx_t_10) {
/* … */
      goto __pyx_L25;
    }
+2691:                 s = ss
      __Pyx_INCREF(__pyx_v_ss);
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_v_ss);
 2692:             else:
+2693:                 s |= ss
    /*else*/ {
      __pyx_t_1 = PyNumber_InPlaceOr(__pyx_v_s, __pyx_v_ss); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
    }
    __pyx_L25:;
 2694: 
+2695:         if ts._resource_restrictions:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_resource_restrictions); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 2695, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
+2696:             dw: dict = {
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2696, __pyx_L29_error)
      __Pyx_GOTREF(__pyx_t_1);
+2697:                 resource: {
        { /* enter inner scope */
          __pyx_t_2 = PySet_New(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2697, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_2);
+2698:                     w
              if (unlikely(PySet_Add(__pyx_t_2, (PyObject*)__pyx_9genexpr28__pyx_v_w))) __PYX_ERR(0, 2698, __pyx_L34_error)
+2699:                     for w, supplied in self._resources[resource].items()
          __pyx_t_11 = 0;
          __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_v_self->_resources, __pyx_9genexpr27__pyx_v_resource); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2699, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_13);
          if (unlikely(__pyx_t_13 == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 2699, __pyx_L34_error)
          }
          __pyx_t_14 = __Pyx_dict_iterator(__pyx_t_13, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_9)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2699, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_4);
          __pyx_t_4 = __pyx_t_14;
          __pyx_t_14 = 0;
          while (1) {
            __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_12, &__pyx_t_11, &__pyx_t_14, &__pyx_t_13, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_15 == 0)) break;
            if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 2699, __pyx_L34_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_XDECREF_SET(__pyx_9genexpr28__pyx_v_w, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_XDECREF_SET(__pyx_9genexpr28__pyx_v_supplied, __pyx_t_13);
            __pyx_t_13 = 0;
+2700:                     if supplied >= required
            __pyx_t_13 = PyObject_RichCompare(__pyx_9genexpr28__pyx_v_supplied, __pyx_9genexpr27__pyx_v_required, Py_GE); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2700, __pyx_L34_error)
            __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 2700, __pyx_L34_error)
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (__pyx_t_10) {
/* … */
            }
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_supplied); __pyx_9genexpr28__pyx_v_supplied = 0;
          __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_w); __pyx_9genexpr28__pyx_v_w = 0;
          goto __pyx_L38_exit_scope;
          __pyx_L34_error:;
          __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_supplied); __pyx_9genexpr28__pyx_v_supplied = 0;
          __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_w); __pyx_9genexpr28__pyx_v_w = 0;
          goto __pyx_L29_error;
          __pyx_L38_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_9genexpr27__pyx_v_resource, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 2697, __pyx_L29_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_required); __pyx_9genexpr27__pyx_v_required = 0;
      __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_resource); __pyx_9genexpr27__pyx_v_resource = 0;
      goto __pyx_L39_exit_scope;
      __pyx_L29_error:;
      __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_required); __pyx_9genexpr27__pyx_v_required = 0;
      __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_resource); __pyx_9genexpr27__pyx_v_resource = 0;
      goto __pyx_L1_error;
      __pyx_L39_exit_scope:;
    } /* exit inner scope */
    __pyx_v_dw = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 2701:                 }
+2702:                 for resource, required in ts._resource_restrictions.items()
      __pyx_t_6 = 0;
      if (unlikely(__pyx_v_ts->_resource_restrictions == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 2702, __pyx_L29_error)
      }
      __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_ts->_resource_restrictions, 1, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2702, __pyx_L29_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_7, &__pyx_t_6, &__pyx_t_4, &__pyx_t_2, NULL, __pyx_t_8);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2702, __pyx_L29_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v_resource, __pyx_t_4);
        __pyx_t_4 = 0;
        __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v_required, __pyx_t_2);
        __pyx_t_2 = 0;
 2703:             }
 2704: 
+2705:             ww: set = set.intersection(*dw.values())
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PySet_Type)), __pyx_n_s_intersection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyDict_Values(__pyx_v_dw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!(likely(PySet_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 2705, __pyx_L1_error)
    __pyx_v_ww = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+2706:             if s is None:
    __pyx_t_10 = (__pyx_v_s == ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_10 != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L40;
    }
+2707:                 s = ww
      __Pyx_INCREF(__pyx_v_ww);
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_v_ww);
 2708:             else:
+2709:                 s &= ww
    /*else*/ {
      __pyx_t_3 = PyNumber_InPlaceAnd(__pyx_v_s, __pyx_v_ww); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L40:;
 2710: 
+2711:         if s is not None:
  __pyx_t_5 = (__pyx_v_s != ((PyObject*)Py_None));
  __pyx_t_10 = (__pyx_t_5 != 0);
  if (__pyx_t_10) {
/* … */
  }
+2712:             s = {self._workers_dv[w] for w in s}
    { /* enter inner scope */
      __pyx_t_3 = PySet_New(NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2712, __pyx_L44_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_set_iterator(__pyx_v_s, 1, (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2712, __pyx_L44_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_1;
      __pyx_t_1 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_6, &__pyx_t_7, &__pyx_t_1, __pyx_t_8);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2712, __pyx_L44_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_9genexpr29__pyx_v_w, __pyx_t_1);
        __pyx_t_1 = 0;
        if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 2712, __pyx_L44_error)
        }
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->_workers_dv, __pyx_9genexpr29__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2712, __pyx_L44_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(PySet_Add(__pyx_t_3, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 2712, __pyx_L44_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_w); __pyx_9genexpr29__pyx_v_w = 0;
      goto __pyx_L47_exit_scope;
      __pyx_L44_error:;
      __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_w); __pyx_9genexpr29__pyx_v_w = 0;
      goto __pyx_L1_error;
      __pyx_L47_exit_scope:;
    } /* exit inner scope */
    __Pyx_DECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
 2713: 
+2714:         return s
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;
 2715: 
 2716:     @ccall
+2717:     def consume_resources(self, ts: TaskState, ws: WorkerState):
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_45consume_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_consume_resources(CYTHON_UNUSED struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_required = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("consume_resources", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_consume_resources); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_45consume_resources)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2717, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2717, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2717, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, ((PyObject *)__pyx_v_ts));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_ws));
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2717, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.consume_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_required);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_45consume_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_45consume_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("consume_resources (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_ws,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("consume_resources", 1, 2, 2, 1); __PYX_ERR(0, 2717, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "consume_resources") < 0)) __PYX_ERR(0, 2717, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("consume_resources", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2717, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.consume_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2717, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 2717, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_44consume_resources(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_ws);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_44consume_resources(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("consume_resources", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_consume_resources(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.consume_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2718:         if ts._resource_restrictions:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_resource_restrictions); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2718, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
+2719:             for r, required in ts._resource_restrictions.items():
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_ts->_resource_restrictions == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 2719, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_ts->_resource_restrictions, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_8, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_required, __pyx_t_3);
      __pyx_t_3 = 0;
+2720:                 ws._used_resources[r] += required
      if (unlikely(__pyx_v_ws->_used_resources == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2720, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_v_ws->_used_resources);
      __pyx_t_11 = __pyx_v_ws->_used_resources;
      __Pyx_INCREF(__pyx_v_r);
      __pyx_t_3 = __pyx_v_r;
      if (unlikely(__pyx_t_11 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2720, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_v_required); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(__pyx_t_11 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2720, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_t_11, __pyx_t_3, __pyx_t_6) < 0)) __PYX_ERR(0, 2720, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2721: 
 2722:     @ccall
+2723:     def release_resources(self, ts: TaskState, ws: WorkerState):
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_47release_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_release_resources(CYTHON_UNUSED struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_required = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release_resources", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_release_resources); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2723, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_47release_resources)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2723, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2723, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2723, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, ((PyObject *)__pyx_v_ts));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_ws));
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2723, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.release_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_required);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_47release_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_47release_resources(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release_resources (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_ws,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("release_resources", 1, 2, 2, 1); __PYX_ERR(0, 2723, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_resources") < 0)) __PYX_ERR(0, 2723, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("release_resources", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2723, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.release_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2723, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 2723, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_46release_resources(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_ws);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_46release_resources(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release_resources", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_release_resources(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.release_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2724:         if ts._resource_restrictions:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_resource_restrictions); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2724, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
+2725:             for r, required in ts._resource_restrictions.items():
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_ts->_resource_restrictions == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 2725, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_ts->_resource_restrictions, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2725, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_8, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_required, __pyx_t_3);
      __pyx_t_3 = 0;
+2726:                 ws._used_resources[r] -= required
      if (unlikely(__pyx_v_ws->_used_resources == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2726, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_v_ws->_used_resources);
      __pyx_t_11 = __pyx_v_ws->_used_resources;
      __Pyx_INCREF(__pyx_v_r);
      __pyx_t_3 = __pyx_v_r;
      if (unlikely(__pyx_t_11 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2726, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyNumber_InPlaceSubtract(__pyx_t_2, __pyx_v_required); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(__pyx_t_11 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 2726, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_t_11, __pyx_t_3, __pyx_t_6) < 0)) __PYX_ERR(0, 2726, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2727: 
 2728:     @ccall
+2729:     def coerce_hostname(self, host):
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_49coerce_hostname(PyObject *__pyx_v_self, PyObject *__pyx_v_host); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_coerce_hostname(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_host, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coerce_hostname", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coerce_hostname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_49coerce_hostname)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_host) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_host);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.coerce_hostname", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_49coerce_hostname(PyObject *__pyx_v_self, PyObject *__pyx_v_host); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_48coerce_hostname[] = "\n        Coerce the hostname of a worker.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_49coerce_hostname(PyObject *__pyx_v_self, PyObject *__pyx_v_host) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coerce_hostname (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_48coerce_hostname(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), ((PyObject *)__pyx_v_host));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_48coerce_hostname(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, PyObject *__pyx_v_host) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coerce_hostname", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_coerce_hostname(__pyx_v_self, __pyx_v_host, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.coerce_hostname", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2730:         """
 2731:         Coerce the hostname of a worker.
 2732:         """
+2733:         if host in self._aliases:
  if (unlikely(__pyx_v_self->_aliases == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 2733, __pyx_L1_error)
  }
  __pyx_t_5 = (__Pyx_PyDict_ContainsTF(__pyx_v_host, __pyx_v_self->_aliases, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2733, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
  }
+2734:             return self._workers_dv[self._aliases[host]].host
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_self->_workers_dv == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 2734, __pyx_L1_error)
    }
    if (unlikely(__pyx_v_self->_aliases == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 2734, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->_aliases, __pyx_v_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_self->_workers_dv, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 2735:         else:
+2736:             return host
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_host);
    __pyx_r = __pyx_v_host;
    goto __pyx_L0;
  }
 2737: 
 2738:     @ccall
 2739:     @exceptval(check=False)
+2740:     def worker_objective(self, ts: TaskState, ws: WorkerState) -> tuple:
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_51worker_objective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_11distributed_9scheduler_14SchedulerState_worker_objective(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, int __pyx_skip_dispatch) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  Py_ssize_t __pyx_v_nbytes;
  Py_ssize_t __pyx_v_comm_bytes;
  double __pyx_v_bandwidth;
  double __pyx_v_stack_time;
  double __pyx_v_start_time;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("worker_objective", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_worker_objective); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2740, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_11distributed_9scheduler_14SchedulerState_51worker_objective)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2740, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_ts), ((PyObject *)__pyx_v_ws)};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2740, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2740, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(((PyObject *)__pyx_v_ts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, ((PyObject *)__pyx_v_ts));
          __Pyx_INCREF(((PyObject *)__pyx_v_ws));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_ws));
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2740, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 2740, __pyx_L1_error)
        __pyx_r = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.worker_objective", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_51worker_objective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_14SchedulerState_50worker_objective[] = "\n        Objective function to determine which worker should get the task\n\n        Minimize expected start time.  If a tie then break with data storage.\n        ";
static PyObject *__pyx_pw_11distributed_9scheduler_14SchedulerState_51worker_objective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("worker_objective (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts,&__pyx_n_s_ws,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ws)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("worker_objective", 1, 2, 2, 1); __PYX_ERR(0, 2740, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "worker_objective") < 0)) __PYX_ERR(0, 2740, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[0]);
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("worker_objective", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2740, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.worker_objective", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 2740, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 2740, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_14SchedulerState_50worker_objective(((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_v_self), __pyx_v_ts, __pyx_v_ws);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_14SchedulerState_50worker_objective(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("worker_objective", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11distributed_9scheduler_14SchedulerState_worker_objective(__pyx_v_self, __pyx_v_ts, __pyx_v_ws, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.SchedulerState.worker_objective", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2741:         """
 2742:         Objective function to determine which worker should get the task
 2743: 
 2744:         Minimize expected start time.  If a tie then break with data storage.
 2745:         """
 2746:         dts: TaskState
 2747:         nbytes: Py_ssize_t
+2748:         comm_bytes: Py_ssize_t = 0
  __pyx_v_comm_bytes = 0;
+2749:         for dts in ts._dependencies:
  __pyx_t_7 = 0;
  __pyx_t_2 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_8, &__pyx_t_7, &__pyx_t_2, __pyx_t_5);
    if (unlikely(__pyx_t_9 == 0)) break;
    if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 2749, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
    __pyx_t_2 = 0;
+2750:             if ws not in dts._who_has:
    if (unlikely(__pyx_v_dts->_who_has == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 2750, __pyx_L1_error)
    }
    __pyx_t_10 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ws), __pyx_v_dts->_who_has, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 2750, __pyx_L1_error)
    __pyx_t_11 = (__pyx_t_10 != 0);
    if (__pyx_t_11) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2751:                 nbytes = dts.get_nbytes()
      __pyx_t_12 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_dts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2751, __pyx_L1_error)
      __pyx_v_nbytes = __pyx_t_12;
+2752:                 comm_bytes += nbytes
      __pyx_v_comm_bytes = (__pyx_v_comm_bytes + __pyx_v_nbytes);
 2753: 
+2754:         bandwidth: double = self._bandwidth
  __pyx_t_13 = __pyx_v_self->_bandwidth;
  __pyx_v_bandwidth = __pyx_t_13;
+2755:         stack_time: double = ws._occupancy / ws._nthreads
  if (unlikely(__pyx_v_ws->_nthreads == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 2755, __pyx_L1_error)
  }
  __pyx_v_stack_time = (__pyx_v_ws->_occupancy / ((double)__pyx_v_ws->_nthreads));
+2756:         start_time: double = stack_time + comm_bytes / bandwidth
  if (unlikely(__pyx_v_bandwidth == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 2756, __pyx_L1_error)
  }
  __pyx_v_start_time = (__pyx_v_stack_time + (((double)__pyx_v_comm_bytes) / __pyx_v_bandwidth));
 2757: 
+2758:         if ts._actor:
  __pyx_t_11 = (__pyx_v_ts->_actor != 0);
  if (__pyx_t_11) {
/* … */
  }
+2759:             return (len(ws._actors), start_time, ws._nbytes)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_v_ws->_actors;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 2759, __pyx_L1_error)
    }
    __pyx_t_8 = PySet_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2759, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_start_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_ws->_nbytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_6);
    __pyx_t_6 = 0;
    goto __pyx_L0;
 2760:         else:
+2761:             return (start_time, ws._nbytes)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = PyFloat_FromDouble(__pyx_v_start_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_ws->_nbytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
 2762: 
 2763: 
+2764: class Scheduler(SchedulerState, ServerNode):
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_ServerNode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_ptype_11distributed_9scheduler_SchedulerState));
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_15);
  __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_16, __pyx_n_s_Scheduler, __pyx_n_s_Scheduler, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, __pyx_kp_s_Dynamic_distributed_task_schedul); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
/* … */
  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_Scheduler, __pyx_t_16, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_CyFunction_InitClassCell(__pyx_t_13, __pyx_t_9) < 0) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Scheduler, __pyx_t_9) < 0) __PYX_ERR(0, 2764, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 2765:     """Dynamic distributed task scheduler
 2766: 
 2767:     The scheduler tracks the current state of workers, data, and computations.
 2768:     The scheduler listens for events and responds by controlling workers
 2769:     appropriately.  It continuously tries to use the workers to execute an ever
 2770:     growing dask graph.
 2771: 
 2772:     All events are handled quickly, in linear time with respect to their input
 2773:     (which is often of constant size) and generally within a millisecond.  To
 2774:     accomplish this the scheduler tracks a lot of state.  Every operation
 2775:     maintains the consistency of this state.
 2776: 
 2777:     The scheduler communicates with the outside world through Comm objects.
 2778:     It maintains a consistent and valid view of the world even when listening
 2779:     to several clients at once.
 2780: 
 2781:     A Scheduler is typically started either with the ``dask-scheduler``
 2782:     executable::
 2783: 
 2784:          $ dask-scheduler
 2785:          Scheduler started at 127.0.0.1:8786
 2786: 
 2787:     Or within a LocalCluster a Client starts up without connection
 2788:     information::
 2789: 
 2790:         >>> c = Client()  # doctest: +SKIP
 2791:         >>> c.cluster.scheduler  # doctest: +SKIP
 2792:         Scheduler(...)
 2793: 
 2794:     Users typically do not interact with the scheduler directly but rather with
 2795:     the client object ``Client``.
 2796: 
 2797:     **State**
 2798: 
 2799:     The scheduler contains the following state variables.  Each variable is
 2800:     listed along with what it stores and a brief description.
 2801: 
 2802:     * **tasks:** ``{task key: TaskState}``
 2803:         Tasks currently known to the scheduler
 2804:     * **unrunnable:** ``{TaskState}``
 2805:         Tasks in the "no-worker" state
 2806: 
 2807:     * **workers:** ``{worker key: WorkerState}``
 2808:         Workers currently connected to the scheduler
 2809:     * **idle:** ``{WorkerState}``:
 2810:         Set of workers that are not fully utilized
 2811:     * **saturated:** ``{WorkerState}``:
 2812:         Set of workers that are not over-utilized
 2813: 
 2814:     * **host_info:** ``{hostname: dict}``:
 2815:         Information about each worker host
 2816: 
 2817:     * **clients:** ``{client key: ClientState}``
 2818:         Clients currently connected to the scheduler
 2819: 
 2820:     * **services:** ``{str: port}``:
 2821:         Other services running on this scheduler, like Bokeh
 2822:     * **loop:** ``IOLoop``:
 2823:         The running Tornado IOLoop
 2824:     * **client_comms:** ``{client key: Comm}``
 2825:         For each client, a Comm object used to receive task requests and
 2826:         report task status updates.
 2827:     * **stream_comms:** ``{worker key: Comm}``
 2828:         For each worker, a Comm object from which we both accept stimuli and
 2829:         report results
 2830:     * **task_duration:** ``{key-prefix: time}``
 2831:         Time we expect certain functions to take, e.g. ``{'sum': 0.25}``
 2832:     """
 2833: 
+2834:     default_port = 8786
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_default_port, __pyx_int_8786) < 0) __PYX_ERR(0, 2834, __pyx_L1_error)
+2835:     _instances = weakref.WeakSet()
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_weakref); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_WeakSet); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_12 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_instances, __pyx_t_12) < 0) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 2836: 
+2837:     def __init__(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_loop = 0;
  PyObject *__pyx_v_delete_interval = 0;
  PyObject *__pyx_v_synchronize_worker_interval = 0;
  PyObject *__pyx_v_services = 0;
  PyObject *__pyx_v_service_kwargs = 0;
  PyObject *__pyx_v_allowed_failures = 0;
  PyObject *__pyx_v_extensions = 0;
  PyObject *__pyx_v_validate = 0;
  PyObject *__pyx_v_scheduler_file = 0;
  PyObject *__pyx_v_security = 0;
  PyObject *__pyx_v_worker_ttl = 0;
  PyObject *__pyx_v_idle_timeout = 0;
  PyObject *__pyx_v_interface = 0;
  PyObject *__pyx_v_host = 0;
  PyObject *__pyx_v_port = 0;
  PyObject *__pyx_v_protocol = 0;
  PyObject *__pyx_v_dashboard_address = 0;
  PyObject *__pyx_v_dashboard = 0;
  PyObject *__pyx_v_http_prefix = 0;
  PyObject *__pyx_v_preload = 0;
  PyObject *__pyx_v_preload_argv = 0;
  PyObject *__pyx_v_plugins = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_loop,&__pyx_n_s_delete_interval,&__pyx_n_s_synchronize_worker_interval,&__pyx_n_s_services,&__pyx_n_s_service_kwargs,&__pyx_n_s_allowed_failures,&__pyx_n_s_extensions,&__pyx_n_s_validate,&__pyx_n_s_scheduler_file,&__pyx_n_s_security,&__pyx_n_s_worker_ttl,&__pyx_n_s_idle_timeout,&__pyx_n_s_interface,&__pyx_n_s_host,&__pyx_n_s_port,&__pyx_n_s_protocol,&__pyx_n_s_dashboard_address,&__pyx_n_s_dashboard,&__pyx_n_s_http_prefix,&__pyx_n_s_preload,&__pyx_n_s_preload_argv,&__pyx_n_s_plugins,0};
    PyObject* values[23] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_loop, PyObject *__pyx_v_delete_interval, PyObject *__pyx_v_synchronize_worker_interval, PyObject *__pyx_v_services, PyObject *__pyx_v_service_kwargs, PyObject *__pyx_v_allowed_failures, PyObject *__pyx_v_extensions, PyObject *__pyx_v_validate, PyObject *__pyx_v_scheduler_file, PyObject *__pyx_v_security, PyObject *__pyx_v_worker_ttl, PyObject *__pyx_v_idle_timeout, PyObject *__pyx_v_interface, PyObject *__pyx_v_host, PyObject *__pyx_v_port, PyObject *__pyx_v_protocol, PyObject *__pyx_v_dashboard_address, PyObject *__pyx_v_dashboard, PyObject *__pyx_v_http_prefix, PyObject *__pyx_v_preload, PyObject *__pyx_v_preload_argv, PyObject *__pyx_v_plugins, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_http_server_modules = NULL;
  PyObject *__pyx_v_show_dashboard = NULL;
  int __pyx_v_missing_bokeh;
  PyObject *__pyx_v_distributed = NULL;
  PyObject *__pyx_v_routes = NULL;
  PyObject *__pyx_v_tasks = NULL;
  PyObject *__pyx_v_old_attr = NULL;
  PyObject *__pyx_v_new_attr = NULL;
  PyObject *__pyx_v_wrap = NULL;
  PyObject *__pyx_v_func = NULL;
  PyObject *__pyx_v_unrunnable = NULL;
  PyObject *__pyx_v_clients = NULL;
  PyObject *__pyx_v_workers = NULL;
  PyObject *__pyx_v_host_info = NULL;
  PyObject *__pyx_v_resources = NULL;
  PyObject *__pyx_v_aliases = NULL;
  PyObject *__pyx_v_worker_handlers = NULL;
  PyObject *__pyx_v_client_handlers = NULL;
  PyObject *__pyx_v_connection_limit = NULL;
  PyObject *__pyx_v_pc = NULL;
  PyObject *__pyx_v_ext = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_allowed_failures);
  __Pyx_INCREF(__pyx_v_extensions);
  __Pyx_INCREF(__pyx_v_validate);
  __Pyx_INCREF(__pyx_v_security);
  __Pyx_INCREF(__pyx_v_worker_ttl);
  __Pyx_INCREF(__pyx_v_idle_timeout);
  __Pyx_INCREF(__pyx_v_preload);
  __Pyx_INCREF(__pyx_v_preload_argv);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_http_server_modules);
  __Pyx_XDECREF(__pyx_v_show_dashboard);
  __Pyx_XDECREF(__pyx_v_distributed);
  __Pyx_XDECREF(__pyx_v_routes);
  __Pyx_XDECREF(__pyx_v_tasks);
  __Pyx_XDECREF(__pyx_v_old_attr);
  __Pyx_XDECREF(__pyx_v_new_attr);
  __Pyx_XDECREF(__pyx_v_wrap);
  __Pyx_XDECREF(__pyx_v_func);
  __Pyx_XDECREF(__pyx_v_unrunnable);
  __Pyx_XDECREF(__pyx_v_clients);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XDECREF(__pyx_v_host_info);
  __Pyx_XDECREF(__pyx_v_resources);
  __Pyx_XDECREF(__pyx_v_aliases);
  __Pyx_XDECREF(__pyx_v_worker_handlers);
  __Pyx_XDECREF(__pyx_v_client_handlers);
  __Pyx_XDECREF(__pyx_v_connection_limit);
  __Pyx_XDECREF(__pyx_v_pc);
  __Pyx_XDECREF(__pyx_v_ext);
  __Pyx_XDECREF(__pyx_v_allowed_failures);
  __Pyx_XDECREF(__pyx_v_extensions);
  __Pyx_XDECREF(__pyx_v_validate);
  __Pyx_XDECREF(__pyx_v_security);
  __Pyx_XDECREF(__pyx_v_worker_ttl);
  __Pyx_XDECREF(__pyx_v_idle_timeout);
  __Pyx_XDECREF(__pyx_v_preload);
  __Pyx_XDECREF(__pyx_v_preload_argv);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__155 = PyTuple_Pack(45, __pyx_n_s_self, __pyx_n_s_loop, __pyx_n_s_delete_interval, __pyx_n_s_synchronize_worker_interval, __pyx_n_s_services, __pyx_n_s_service_kwargs, __pyx_n_s_allowed_failures, __pyx_n_s_extensions, __pyx_n_s_validate, __pyx_n_s_scheduler_file, __pyx_n_s_security, __pyx_n_s_worker_ttl, __pyx_n_s_idle_timeout, __pyx_n_s_interface, __pyx_n_s_host, __pyx_n_s_port, __pyx_n_s_protocol, __pyx_n_s_dashboard_address, __pyx_n_s_dashboard, __pyx_n_s_http_prefix, __pyx_n_s_preload, __pyx_n_s_preload_argv, __pyx_n_s_plugins, __pyx_n_s_kwargs, __pyx_n_s_http_server_modules, __pyx_n_s_show_dashboard, __pyx_n_s_missing_bokeh, __pyx_n_s_distributed, __pyx_n_s_routes, __pyx_n_s_tasks, __pyx_n_s_old_attr, __pyx_n_s_new_attr, __pyx_n_s_wrap, __pyx_n_s_func, __pyx_n_s_unrunnable, __pyx_n_s_clients, __pyx_n_s_workers, __pyx_n_s_host_info, __pyx_n_s_resources, __pyx_n_s_aliases, __pyx_n_s_worker_handlers, __pyx_n_s_client_handlers, __pyx_n_s_connection_limit, __pyx_n_s_pc, __pyx_n_s_ext); if (unlikely(!__pyx_tuple__155)) __PYX_ERR(0, 2837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__155);
  __Pyx_GIVEREF(__pyx_tuple__155);
  __pyx_codeobj__156 = (PyObject*)__Pyx_PyCode_New(23, 0, 45, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 2837, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__156)) __PYX_ERR(0, 2837, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_1__init__, 0, __pyx_n_s_Scheduler___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__156)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_t_12);
  PyList_Append(__pyx_t_13, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__157);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_12) < 0) __PYX_ERR(0, 2837, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__157 = PyTuple_Pack(22, ((PyObject *)Py_None), ((PyObject*)__pyx_kp_u_500ms), ((PyObject*)__pyx_kp_u_60s), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_kp_u__14), ((PyObject *)Py_None), ((PyObject*)__pyx_empty_tuple), ((PyObject*)__pyx_empty_tuple)); if (unlikely(!__pyx_tuple__157)) __PYX_ERR(0, 2837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__157);
  __Pyx_GIVEREF(__pyx_tuple__157);
 2838:         self,
+2839:         loop=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject*)__pyx_kp_u_500ms));
    values[3] = ((PyObject *)((PyObject*)__pyx_kp_u_60s));
 2840:         delete_interval="500ms",
 2841:         synchronize_worker_interval="60s",
+2842:         services=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+2843:         service_kwargs=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+2844:         allowed_failures=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+2845:         extensions=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+2846:         validate=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
+2847:         scheduler_file=None,
    values[9] = ((PyObject *)((PyObject *)Py_None));
+2848:         security=None,
    values[10] = ((PyObject *)((PyObject *)Py_None));
+2849:         worker_ttl=None,
    values[11] = ((PyObject *)((PyObject *)Py_None));
+2850:         idle_timeout=None,
    values[12] = ((PyObject *)((PyObject *)Py_None));
+2851:         interface=None,
    values[13] = ((PyObject *)((PyObject *)Py_None));
+2852:         host=None,
    values[14] = ((PyObject *)((PyObject *)Py_None));
    values[15] = ((PyObject *)((PyObject *)__pyx_int_0));
 2853:         port=0,
+2854:         protocol=None,
    values[16] = ((PyObject *)((PyObject *)Py_None));
+2855:         dashboard_address=None,
    values[17] = ((PyObject *)((PyObject *)Py_None));
+2856:         dashboard=None,
    values[18] = ((PyObject *)((PyObject *)Py_None));
    values[19] = ((PyObject *)((PyObject*)__pyx_kp_u__14));
 2857:         http_prefix="/",
+2858:         preload=None,
    values[20] = ((PyObject *)((PyObject *)Py_None));
+2859:         preload_argv=(),
    values[21] = ((PyObject *)((PyObject*)__pyx_empty_tuple));
+2860:         plugins=(),
    values[22] = ((PyObject *)((PyObject*)__pyx_empty_tuple));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loop);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete_interval);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_synchronize_worker_interval);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_services);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_service_kwargs);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allowed_failures);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extensions);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_validate);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scheduler_file);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_security);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker_ttl);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idle_timeout);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interface);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_host);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dashboard_address);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dashboard);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_http_prefix);
          if (value) { values[19] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 20:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_preload);
          if (value) { values[20] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 21:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_preload_argv);
          if (value) { values[21] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 22:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_plugins);
          if (value) { values[22] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2837, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_loop = values[1];
    __pyx_v_delete_interval = values[2];
    __pyx_v_synchronize_worker_interval = values[3];
    __pyx_v_services = values[4];
    __pyx_v_service_kwargs = values[5];
    __pyx_v_allowed_failures = values[6];
    __pyx_v_extensions = values[7];
    __pyx_v_validate = values[8];
    __pyx_v_scheduler_file = values[9];
    __pyx_v_security = values[10];
    __pyx_v_worker_ttl = values[11];
    __pyx_v_idle_timeout = values[12];
    __pyx_v_interface = values[13];
    __pyx_v_host = values[14];
    __pyx_v_port = values[15];
    __pyx_v_protocol = values[16];
    __pyx_v_dashboard_address = values[17];
    __pyx_v_dashboard = values[18];
    __pyx_v_http_prefix = values[19];
    __pyx_v_preload = values[20];
    __pyx_v_preload_argv = values[21];
    __pyx_v_plugins = values[22];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 23, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2837, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler___init__(__pyx_self, __pyx_v_self, __pyx_v_loop, __pyx_v_delete_interval, __pyx_v_synchronize_worker_interval, __pyx_v_services, __pyx_v_service_kwargs, __pyx_v_allowed_failures, __pyx_v_extensions, __pyx_v_validate, __pyx_v_scheduler_file, __pyx_v_security, __pyx_v_worker_ttl, __pyx_v_idle_timeout, __pyx_v_interface, __pyx_v_host, __pyx_v_port, __pyx_v_protocol, __pyx_v_dashboard_address, __pyx_v_dashboard, __pyx_v_http_prefix, __pyx_v_preload, __pyx_v_preload_argv, __pyx_v_plugins, __pyx_v_kwargs);
 2861:         **kwargs,
 2862:     ):
+2863:         self._setup_logging(logger)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_setup_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2864: 
 2865:         # Attributes
+2866:         if allowed_failures is None:
  __pyx_t_5 = (__pyx_v_allowed_failures == Py_None);
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
  }
+2867:             allowed_failures = dask.config.get("distributed.scheduler.allowed-failures")
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_allowed_fa) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_allowed_fa);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_allowed_failures, __pyx_t_1);
    __pyx_t_1 = 0;
+2868:         self.allowed_failures = allowed_failures
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_allowed_failures, __pyx_v_allowed_failures) < 0) __PYX_ERR(0, 2868, __pyx_L1_error)
+2869:         if validate is None:
  __pyx_t_6 = (__pyx_v_validate == Py_None);
  __pyx_t_5 = (__pyx_t_6 != 0);
  if (__pyx_t_5) {
/* … */
  }
+2870:             validate = dask.config.get("distributed.scheduler.validate")
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_validate) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_validate);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_validate, __pyx_t_1);
    __pyx_t_1 = 0;
+2871:         self.proc = psutil.Process()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_psutil); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Process); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_proc, __pyx_t_1) < 0) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2872:         self.delete_interval = parse_timedelta(delete_interval, default="ms")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_delete_interval);
  __Pyx_GIVEREF(__pyx_v_delete_interval);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_delete_interval);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_default, __pyx_n_u_ms) < 0) __PYX_ERR(0, 2872, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_delete_interval, __pyx_t_4) < 0) __PYX_ERR(0, 2872, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2873:         self.synchronize_worker_interval = parse_timedelta(
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_synchronize_worker_interval);
  __Pyx_GIVEREF(__pyx_v_synchronize_worker_interval);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_synchronize_worker_interval);
/* … */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_synchronize_worker_interval, __pyx_t_1) < 0) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2874:             synchronize_worker_interval, default="ms"
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_default, __pyx_n_u_ms) < 0) __PYX_ERR(0, 2874, __pyx_L1_error)
 2875:         )
+2876:         self.digests = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_digests, Py_None) < 0) __PYX_ERR(0, 2876, __pyx_L1_error)
+2877:         self.service_specs = services or {}
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_services); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2877, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __Pyx_INCREF(__pyx_v_services);
    __pyx_t_1 = __pyx_v_services;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L5_bool_binop_done:;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_service_specs, __pyx_t_1) < 0) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2878:         self.service_kwargs = service_kwargs or {}
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_service_kwargs); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2878, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __Pyx_INCREF(__pyx_v_service_kwargs);
    __pyx_t_1 = __pyx_v_service_kwargs;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L7_bool_binop_done:;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_service_kwargs, __pyx_t_1) < 0) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2879:         self.services = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_services, __pyx_t_1) < 0) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2880:         self.scheduler_file = scheduler_file
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scheduler_file, __pyx_v_scheduler_file) < 0) __PYX_ERR(0, 2880, __pyx_L1_error)
+2881:         worker_ttl = worker_ttl or dask.config.get("distributed.scheduler.worker-ttl")
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_worker_ttl); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2881, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __Pyx_INCREF(__pyx_v_worker_ttl);
    __pyx_t_1 = __pyx_v_worker_ttl;
    goto __pyx_L9_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_kp_u_distributed_scheduler_worker_ttl) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_worker_ttl);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L9_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_worker_ttl, __pyx_t_1);
  __pyx_t_1 = 0;
+2882:         self.worker_ttl = parse_timedelta(worker_ttl) if worker_ttl else None
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_worker_ttl); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2882, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_worker_ttl) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_worker_ttl);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_worker_ttl, __pyx_t_1) < 0) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2883:         idle_timeout = idle_timeout or dask.config.get(
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_idle_timeout); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2883, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __Pyx_INCREF(__pyx_v_idle_timeout);
    __pyx_t_1 = __pyx_v_idle_timeout;
    goto __pyx_L11_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_kp_u_distributed_scheduler_idle_timeo) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_idle_timeo);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L11_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_idle_timeout, __pyx_t_1);
  __pyx_t_1 = 0;
 2884:             "distributed.scheduler.idle-timeout"
 2885:         )
+2886:         if idle_timeout:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_idle_timeout); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2886, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L13;
  }
+2887:             self.idle_timeout = parse_timedelta(idle_timeout)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_idle_timeout) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_idle_timeout);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout, __pyx_t_1) < 0) __PYX_ERR(0, 2887, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2888:         else:
+2889:             self.idle_timeout = None
  /*else*/ {
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout, Py_None) < 0) __PYX_ERR(0, 2889, __pyx_L1_error)
  }
  __pyx_L13:;
+2890:         self.idle_since = time()
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_idle_since, __pyx_t_1) < 0) __PYX_ERR(0, 2890, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2891:         self.time_started = self.idle_since  # compatibility for dask-gateway
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_since); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_time_started, __pyx_t_1) < 0) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2892:         self._lock = asyncio.Lock()
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Lock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lock, __pyx_t_1) < 0) __PYX_ERR(0, 2892, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2893:         self.bandwidth_workers = defaultdict(float)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)(&PyFloat_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyFloat_Type)));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_workers, __pyx_t_1) < 0) __PYX_ERR(0, 2893, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2894:         self.bandwidth_types = defaultdict(float)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)(&PyFloat_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyFloat_Type)));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_types, __pyx_t_1) < 0) __PYX_ERR(0, 2894, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2895: 
+2896:         if not preload:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_preload); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2896, __pyx_L1_error)
  __pyx_t_6 = ((!__pyx_t_5) != 0);
  if (__pyx_t_6) {
/* … */
  }
+2897:             preload = dask.config.get("distributed.scheduler.preload")
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_preload) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_preload);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_preload, __pyx_t_1);
    __pyx_t_1 = 0;
+2898:         if not preload_argv:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_preload_argv); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2898, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_6) != 0);
  if (__pyx_t_5) {
/* … */
  }
+2899:             preload_argv = dask.config.get("distributed.scheduler.preload-argv")
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_preload_ar) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_preload_ar);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_preload_argv, __pyx_t_1);
    __pyx_t_1 = 0;
+2900:         self.preloads = preloading.process_preloads(self, preload, preload_argv)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_preloading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_process_preloads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_preload, __pyx_v_preload_argv};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2900, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_preload, __pyx_v_preload_argv};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2900, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2900, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_self);
    __Pyx_INCREF(__pyx_v_preload);
    __Pyx_GIVEREF(__pyx_v_preload);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_v_preload);
    __Pyx_INCREF(__pyx_v_preload_argv);
    __Pyx_GIVEREF(__pyx_v_preload_argv);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_7, __pyx_v_preload_argv);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2900, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_preloads, __pyx_t_1) < 0) __PYX_ERR(0, 2900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2901: 
+2902:         if isinstance(security, dict):
  __pyx_t_5 = PyDict_Check(__pyx_v_security); 
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
  }
+2903:             security = Security(**security)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Security); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_security == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(0, 2903, __pyx_L1_error)
    }
    if (likely(PyDict_CheckExact(__pyx_v_security))) {
      __pyx_t_3 = PyDict_Copy(__pyx_v_security); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    } else {
      __pyx_t_3 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_security, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_security, __pyx_t_4);
    __pyx_t_4 = 0;
+2904:         self.security = security or Security()
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_security); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2904, __pyx_L1_error)
  if (!__pyx_t_6) {
  } else {
    __Pyx_INCREF(__pyx_v_security);
    __pyx_t_4 = __pyx_v_security;
    goto __pyx_L17_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Security); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L17_bool_binop_done:;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_security, __pyx_t_4) < 0) __PYX_ERR(0, 2904, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2905:         assert isinstance(self.security, Security)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_security); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Security); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = PyObject_IsInstance(__pyx_t_4, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 2905, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_6 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 2905, __pyx_L1_error)
    }
  }
  #endif
+2906:         self.connection_args = self.security.get_connection_args("scheduler")
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_security); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get_connection_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_n_u_scheduler) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_u_scheduler);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_connection_args, __pyx_t_3) < 0) __PYX_ERR(0, 2906, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2907:         self.connection_args["handshake_overrides"] = {  # common denominator
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_connection_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_u_handshake_overrides, __pyx_t_3) < 0)) __PYX_ERR(0, 2907, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2908:             "pickle-protocol": 4
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_u_pickle_protocol, __pyx_int_4) < 0) __PYX_ERR(0, 2908, __pyx_L1_error)
 2909:         }
 2910: 
+2911:         self._start_address = addresses_from_user_args(
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_addresses_from_user_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_start_address, __pyx_t_4) < 0) __PYX_ERR(0, 2911, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2912:             host=host,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_host, __pyx_v_host) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
+2913:             port=port,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_port, __pyx_v_port) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
+2914:             interface=interface,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_interface, __pyx_v_interface) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
+2915:             protocol=protocol,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_protocol, __pyx_v_protocol) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
+2916:             security=security,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_security, __pyx_v_security) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
+2917:             default_port=self.default_port,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_default_port); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_default_port, __pyx_t_4) < 0) __PYX_ERR(0, 2912, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2918:         )
 2919: 
+2920:         http_server_modules = dask.config.get("distributed.scheduler.http.routes")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_kp_u_distributed_scheduler_http_route) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_u_distributed_scheduler_http_route);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_http_server_modules = __pyx_t_4;
  __pyx_t_4 = 0;
+2921:         show_dashboard = dashboard or (dashboard is None and dashboard_address)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_dashboard); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2921, __pyx_L1_error)
  if (!__pyx_t_6) {
  } else {
    __Pyx_INCREF(__pyx_v_dashboard);
    __pyx_t_4 = __pyx_v_dashboard;
    goto __pyx_L19_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_dashboard == Py_None);
  if (__pyx_t_6) {
  } else {
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L19_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_v_dashboard_address);
  __pyx_t_4 = __pyx_v_dashboard_address;
  __pyx_L19_bool_binop_done:;
  __pyx_v_show_dashboard = __pyx_t_4;
  __pyx_t_4 = 0;
+2922:         missing_bokeh = False
  __pyx_v_missing_bokeh = 0;
 2923:         # install vanilla route if show_dashboard but bokeh is not installed
+2924:         if show_dashboard:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_show_dashboard); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2924, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+2925:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L28_try_end;
      __pyx_L23_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L24_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_L28_try_end:;
    }
+2926:                 import distributed.dashboard.scheduler
        __pyx_t_4 = __Pyx_Import(__pyx_n_s_distributed_dashboard_scheduler, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2926, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_v_distributed = __pyx_t_4;
        __pyx_t_4 = 0;
+2927:             except ImportError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_7) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 2927, __pyx_L25_except_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_3);
+2928:                 missing_bokeh = True
        __pyx_v_missing_bokeh = 1;
+2929:                 http_server_modules.append("distributed.http.scheduler.missing_bokeh")
        __pyx_t_11 = __Pyx_PyObject_Append(__pyx_v_http_server_modules, __pyx_kp_u_distributed_http_scheduler_missi); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2929, __pyx_L25_except_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L24_exception_handled;
      }
      goto __pyx_L25_except_error;
      __pyx_L25_except_error:;
+2930:         routes = get_handlers(
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_handlers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_routes = __pyx_t_4;
  __pyx_t_4 = 0;
+2931:             server=self, modules=http_server_modules, prefix=http_prefix
  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_server, __pyx_v_self) < 0) __PYX_ERR(0, 2931, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_modules, __pyx_v_http_server_modules) < 0) __PYX_ERR(0, 2931, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_prefix, __pyx_v_http_prefix) < 0) __PYX_ERR(0, 2931, __pyx_L1_error)
 2932:         )
+2933:         self.start_http_server(routes, dashboard_address, default_port=8787)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_start_http_server); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_routes);
  __Pyx_GIVEREF(__pyx_v_routes);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_routes);
  __Pyx_INCREF(__pyx_v_dashboard_address);
  __Pyx_GIVEREF(__pyx_v_dashboard_address);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_dashboard_address);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_default_port, __pyx_int_8787) < 0) __PYX_ERR(0, 2933, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2934:         if show_dashboard and not missing_bokeh:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_show_dashboard); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2934, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L32_bool_binop_done;
  }
  __pyx_t_5 = ((!(__pyx_v_missing_bokeh != 0)) != 0);
  __pyx_t_6 = __pyx_t_5;
  __pyx_L32_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
  }
+2935:             distributed.dashboard.scheduler.connect(
    if (unlikely(!__pyx_v_distributed)) { __Pyx_RaiseUnboundLocalError("distributed"); __PYX_ERR(0, 2935, __pyx_L1_error) }
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_distributed, __pyx_n_s_dashboard); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_connect); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_self);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
/* … */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2936:                 self.http_application, self.http_server, self, prefix=http_prefix
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_http_application); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_http_server); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_prefix, __pyx_v_http_prefix) < 0) __PYX_ERR(0, 2936, __pyx_L1_error)
 2937:             )
 2938: 
 2939:         # Communication state
+2940:         self.loop = loop or IOLoop.current()
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_loop); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2940, __pyx_L1_error)
  if (!__pyx_t_6) {
  } else {
    __Pyx_INCREF(__pyx_v_loop);
    __pyx_t_3 = __pyx_v_loop;
    goto __pyx_L34_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IOLoop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_current); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_L34_bool_binop_done:;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_loop, __pyx_t_3) < 0) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2941:         self.client_comms = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_client_comms, __pyx_t_3) < 0) __PYX_ERR(0, 2941, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2942:         self.stream_comms = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_stream_comms, __pyx_t_3) < 0) __PYX_ERR(0, 2942, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2943:         self._worker_coroutines = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_worker_coroutines, __pyx_t_3) < 0) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2944:         self._ipython_kernel = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ipython_kernel, Py_None) < 0) __PYX_ERR(0, 2944, __pyx_L1_error)
 2945: 
 2946:         # Task state
+2947:         tasks = dict()
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tasks = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+2948:         for old_attr, new_attr, wrap in [
  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2948, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __Pyx_INCREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_tuple__16);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_12 >= 4) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 2948, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2948, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (likely(__pyx_t_3 != Py_None)) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2948, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_13);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2948, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2948, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2948, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2948, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_old_attr, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_attr, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_wrap, __pyx_t_13);
    __pyx_t_13 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2949:             ("priority", "priority", None),
  __pyx_tuple__15 = PyTuple_Pack(3, __pyx_n_u_priority, __pyx_n_u_priority, Py_None); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 2949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
+2950:             ("dependencies", "dependencies", _legacy_task_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_dependencies);
  __Pyx_GIVEREF(__pyx_n_u_dependencies);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_dependencies);
  __Pyx_INCREF(__pyx_n_u_dependencies);
  __Pyx_GIVEREF(__pyx_n_u_dependencies);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_dependencies);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3);
  __pyx_t_3 = 0;
+2951:             ("dependents", "dependents", _legacy_task_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_dependents);
  __Pyx_GIVEREF(__pyx_n_u_dependents);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_dependents);
  __Pyx_INCREF(__pyx_n_u_dependents);
  __Pyx_GIVEREF(__pyx_n_u_dependents);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_dependents);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_3 = 0;
+2952:             ("retries", "retries", None),
  __pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_u_retries, __pyx_n_u_retries, Py_None); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
 2953:         ]:
+2954:             func = operator.attrgetter(new_attr)
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_operator); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_13, __pyx_v_new_attr) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_new_attr);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_func, __pyx_t_3);
    __pyx_t_3 = 0;
+2955:             if wrap is not None:
    __pyx_t_6 = (__pyx_v_wrap != Py_None);
    __pyx_t_5 = (__pyx_t_6 != 0);
    if (__pyx_t_5) {
/* … */
    }
+2956:                 func = compose(wrap, func)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compose); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2956, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2956, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2956, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_13) {
          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13); __pyx_t_13 = NULL;
        }
        __Pyx_INCREF(__pyx_v_wrap);
        __Pyx_GIVEREF(__pyx_v_wrap);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_v_wrap);
        __Pyx_INCREF(__pyx_v_func);
        __Pyx_GIVEREF(__pyx_v_func);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_v_func);
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_3);
      __pyx_t_3 = 0;
+2957:             setattr(self, old_attr, _StateLegacyMapping(tasks, func))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_StateLegacyMapping); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2957, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2957, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_13 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2957, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_tasks);
      __Pyx_GIVEREF(__pyx_v_tasks);
      PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_v_tasks);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_func);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2957, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_old_attr, __pyx_t_3); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2957, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2958: 
+2959:         for old_attr, new_attr, wrap in [
  __pyx_t_2 = PyTuple_New(13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_1);
  __Pyx_INCREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
  PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_tuple__18);
  __Pyx_INCREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
  PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_tuple__19);
  __Pyx_INCREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
  PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_tuple__20);
  __Pyx_INCREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
  PyTuple_SET_ITEM(__pyx_t_2, 8, __pyx_tuple__21);
  __Pyx_INCREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
  PyTuple_SET_ITEM(__pyx_t_2, 9, __pyx_tuple__22);
  __Pyx_INCREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
  PyTuple_SET_ITEM(__pyx_t_2, 10, __pyx_tuple__23);
  __Pyx_INCREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
  PyTuple_SET_ITEM(__pyx_t_2, 11, __pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_2, 12, __pyx_t_14);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_13 = 0;
  __pyx_t_1 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = __pyx_t_2; __Pyx_INCREF(__pyx_t_14); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_12 >= 13) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 2959, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_14, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2959, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    if (likely(__pyx_t_2 != Py_None)) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2959, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2959, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_old_attr, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_attr, __pyx_t_13);
    __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_wrap, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+2960:             ("nbytes", "nbytes", None),
  __pyx_tuple__17 = PyTuple_Pack(3, __pyx_n_u_nbytes, __pyx_n_u_nbytes, Py_None); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
+2961:             ("who_wants", "who_wants", _legacy_client_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_client_key_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_u_who_wants);
  __Pyx_GIVEREF(__pyx_n_u_who_wants);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_who_wants);
  __Pyx_INCREF(__pyx_n_u_who_wants);
  __Pyx_GIVEREF(__pyx_n_u_who_wants);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_who_wants);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __pyx_t_2 = 0;
+2962:             ("who_has", "who_has", _legacy_worker_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_worker_key_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_n_u_who_has);
  __Pyx_GIVEREF(__pyx_n_u_who_has);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_u_who_has);
  __Pyx_INCREF(__pyx_n_u_who_has);
  __Pyx_GIVEREF(__pyx_n_u_who_has);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_u_who_has);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
  __pyx_t_2 = 0;
+2963:             ("waiting", "waiting_on", _legacy_task_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_INCREF(__pyx_n_u_waiting);
  __Pyx_GIVEREF(__pyx_n_u_waiting);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_n_u_waiting);
  __Pyx_INCREF(__pyx_n_u_waiting_on);
  __Pyx_GIVEREF(__pyx_n_u_waiting_on);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_n_u_waiting_on);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_2);
  __pyx_t_2 = 0;
+2964:             ("waiting_data", "waiters", _legacy_task_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_waiting_data);
  __Pyx_GIVEREF(__pyx_n_u_waiting_data);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_waiting_data);
  __Pyx_INCREF(__pyx_n_u_waiters);
  __Pyx_GIVEREF(__pyx_n_u_waiters);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_waiters);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);
  __pyx_t_2 = 0;
+2965:             ("rprocessing", "processing_on", None),
  __pyx_tuple__18 = PyTuple_Pack(3, __pyx_n_u_rprocessing, __pyx_n_u_processing_on, Py_None); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 2965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
+2966:             ("host_restrictions", "host_restrictions", None),
  __pyx_tuple__19 = PyTuple_Pack(3, __pyx_n_u_host_restrictions, __pyx_n_u_host_restrictions, Py_None); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 2966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
+2967:             ("worker_restrictions", "worker_restrictions", None),
  __pyx_tuple__20 = PyTuple_Pack(3, __pyx_n_u_worker_restrictions, __pyx_n_u_worker_restrictions, Py_None); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 2967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
+2968:             ("resource_restrictions", "resource_restrictions", None),
  __pyx_tuple__21 = PyTuple_Pack(3, __pyx_n_u_resource_restrictions, __pyx_n_u_resource_restrictions, Py_None); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 2968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
+2969:             ("suspicious_tasks", "suspicious", None),
  __pyx_tuple__22 = PyTuple_Pack(3, __pyx_n_u_suspicious_tasks, __pyx_n_u_suspicious, Py_None); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 2969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
+2970:             ("exceptions", "exception", None),
  __pyx_tuple__23 = PyTuple_Pack(3, __pyx_n_u_exceptions, __pyx_n_u_exception, Py_None); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 2970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
+2971:             ("tracebacks", "traceback", None),
  __pyx_tuple__24 = PyTuple_Pack(3, __pyx_n_u_tracebacks, __pyx_n_u_traceback, Py_None); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 2971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
+2972:             ("exceptions_blame", "exception_blame", _task_key_or_none),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_task_key_or_none); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_n_u_exceptions_blame);
  __Pyx_GIVEREF(__pyx_n_u_exceptions_blame);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_n_u_exceptions_blame);
  __Pyx_INCREF(__pyx_n_u_exception_blame);
  __Pyx_GIVEREF(__pyx_n_u_exception_blame);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_n_u_exception_blame);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_2);
  __pyx_t_2 = 0;
 2973:         ]:
+2974:             func = operator.attrgetter(new_attr)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_operator); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_4, __pyx_v_new_attr) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_new_attr);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_func, __pyx_t_2);
    __pyx_t_2 = 0;
+2975:             if wrap is not None:
    __pyx_t_5 = (__pyx_v_wrap != Py_None);
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (__pyx_t_6) {
/* … */
    }
+2976:                 func = compose(wrap, func)
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_compose); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2976, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_13)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2976, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2976, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2976, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_INCREF(__pyx_v_wrap);
        __Pyx_GIVEREF(__pyx_v_wrap);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_v_wrap);
        __Pyx_INCREF(__pyx_v_func);
        __Pyx_GIVEREF(__pyx_v_func);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_v_func);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2976, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_2);
      __pyx_t_2 = 0;
+2977:             setattr(self, old_attr, _OptionalStateLegacyMapping(tasks, func))
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_OptionalStateLegacyMapping); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2977, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2977, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_tasks);
      __Pyx_GIVEREF(__pyx_v_tasks);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_tasks);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_v_func);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_old_attr, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2977, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2978: 
+2979:         for old_attr, new_attr, wrap in [
  __pyx_t_14 = __pyx_tuple__26; __Pyx_INCREF(__pyx_t_14); __pyx_t_12 = 0;
  for (;;) {
    if (__pyx_t_12 >= 1) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 2979, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_14, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2979, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    if (likely(__pyx_t_2 != Py_None)) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2979, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      #else
      __pyx_t_13 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2979, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_old_attr, __pyx_t_13);
    __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_attr, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_wrap, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_tuple__25); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 2979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);
+2980:             ("loose_restrictions", "loose_restrictions", None)
  __pyx_tuple__25 = PyTuple_Pack(3, __pyx_n_u_loose_restrictions, __pyx_n_u_loose_restrictions, Py_None); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 2980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
 2981:         ]:
+2982:             func = operator.attrgetter(new_attr)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_operator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_new_attr) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_new_attr);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_func, __pyx_t_2);
    __pyx_t_2 = 0;
+2983:             if wrap is not None:
    __pyx_t_6 = (__pyx_v_wrap != Py_None);
    __pyx_t_5 = (__pyx_t_6 != 0);
    if (__pyx_t_5) {
/* … */
    }
+2984:                 func = compose(wrap, func)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compose); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2984, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2984, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_13 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2984, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_v_wrap);
        __Pyx_GIVEREF(__pyx_v_wrap);
        PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_v_wrap);
        __Pyx_INCREF(__pyx_v_func);
        __Pyx_GIVEREF(__pyx_v_func);
        PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_func);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2984, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_2);
      __pyx_t_2 = 0;
+2985:             setattr(self, old_attr, _StateLegacySet(tasks, func))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_StateLegacySet); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2985, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2985, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_tasks, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2985, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_tasks);
      __Pyx_GIVEREF(__pyx_v_tasks);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_v_tasks);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_v_func);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_old_attr, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 2985, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2986: 
+2987:         self.generation = 0
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_generation, __pyx_int_0) < 0) __PYX_ERR(0, 2987, __pyx_L1_error)
+2988:         self._last_client = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_last_client, Py_None) < 0) __PYX_ERR(0, 2988, __pyx_L1_error)
+2989:         self._last_time = 0
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_last_time, __pyx_int_0) < 0) __PYX_ERR(0, 2989, __pyx_L1_error)
+2990:         unrunnable = set()
  __pyx_t_14 = PySet_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_v_unrunnable = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
 2991: 
+2992:         self.datasets = dict()
  __pyx_t_14 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_datasets, __pyx_t_14) < 0) __PYX_ERR(0, 2992, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 2993: 
 2994:         # Prefix-keyed containers
 2995: 
 2996:         # Client state
+2997:         clients = dict()
  __pyx_t_14 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_v_clients = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
+2998:         for old_attr, new_attr, wrap in [
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_t_14; __Pyx_INCREF(__pyx_t_2); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  for (;;) {
    if (__pyx_t_12 >= 1) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_12); __Pyx_INCREF(__pyx_t_14); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 2998, __pyx_L1_error)
    #else
    __pyx_t_14 = PySequence_ITEM(__pyx_t_2, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    #endif
    if (likely(__pyx_t_14 != Py_None)) {
      PyObject* sequence = __pyx_t_14;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2998, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_13);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2998, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2998, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2998, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      #endif
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2998, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_old_attr, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_attr, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_wrap, __pyx_t_13);
    __pyx_t_13 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2999:             ("wants_what", "wants_what", _legacy_task_key_set)
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_wants_what);
  __Pyx_GIVEREF(__pyx_n_u_wants_what);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_wants_what);
  __Pyx_INCREF(__pyx_n_u_wants_what);
  __Pyx_GIVEREF(__pyx_n_u_wants_what);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_wants_what);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_14);
  __pyx_t_14 = 0;
 3000:         ]:
+3001:             func = operator.attrgetter(new_attr)
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_operator); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_13, __pyx_v_new_attr) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_new_attr);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_func, __pyx_t_14);
    __pyx_t_14 = 0;
+3002:             if wrap is not None:
    __pyx_t_5 = (__pyx_v_wrap != Py_None);
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (__pyx_t_6) {
/* … */
    }
+3003:                 func = compose(wrap, func)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_compose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3003, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3003, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_14);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3003, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_14);
      } else
      #endif
      {
        __pyx_t_4 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (__pyx_t_13) {
          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_13); __pyx_t_13 = NULL;
        }
        __Pyx_INCREF(__pyx_v_wrap);
        __Pyx_GIVEREF(__pyx_v_wrap);
        PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_wrap);
        __Pyx_INCREF(__pyx_v_func);
        __Pyx_GIVEREF(__pyx_v_func);
        PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_v_func);
        __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_14);
      __pyx_t_14 = 0;
+3004:             setattr(self, old_attr, _StateLegacyMapping(clients, func))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_StateLegacyMapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3004, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_clients, __pyx_v_func};
      __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3004, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_14);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_clients, __pyx_v_func};
      __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3004, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_14);
    } else
    #endif
    {
      __pyx_t_13 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_clients);
      __Pyx_GIVEREF(__pyx_v_clients);
      PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_v_clients);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_func);
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_13, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_old_attr, __pyx_t_14); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 3004, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3005: 
 3006:         # Worker state
+3007:         workers = sortedcontainers.SortedDict()
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_sortedcontainers); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_SortedDict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_workers = __pyx_t_2;
  __pyx_t_2 = 0;
+3008:         for old_attr, new_attr, wrap in [
  __pyx_t_2 = PyTuple_New(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__27);
  __Pyx_INCREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__28);
  __Pyx_INCREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_tuple__29);
  __Pyx_INCREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_tuple__30);
  __Pyx_INCREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_tuple__31);
  __Pyx_INCREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
  PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_t_14);
  __pyx_t_1 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = __pyx_t_2; __Pyx_INCREF(__pyx_t_14); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_12 >= 8) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3008, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_14, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    if (likely(__pyx_t_2 != Py_None)) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3008, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 3008, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_old_attr, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_attr, __pyx_t_13);
    __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_wrap, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3009:             ("nthreads", "nthreads", None),
  __pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_u_nthreads, __pyx_n_u_nthreads, Py_None); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 3009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
+3010:             ("worker_bytes", "nbytes", None),
  __pyx_tuple__28 = PyTuple_Pack(3, __pyx_n_u_worker_bytes, __pyx_n_u_nbytes, Py_None); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 3010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
+3011:             ("worker_resources", "resources", None),
  __pyx_tuple__29 = PyTuple_Pack(3, __pyx_n_u_worker_resources, __pyx_n_u_resources, Py_None); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 3011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
+3012:             ("used_resources", "used_resources", None),
  __pyx_tuple__30 = PyTuple_Pack(3, __pyx_n_u_used_resources, __pyx_n_u_used_resources, Py_None); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 3012, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
+3013:             ("occupancy", "occupancy", None),
  __pyx_tuple__31 = PyTuple_Pack(3, __pyx_n_u_occupancy, __pyx_n_u_occupancy, Py_None); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 3013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
+3014:             ("worker_info", "metrics", None),
  __pyx_tuple__32 = PyTuple_Pack(3, __pyx_n_u_worker_info, __pyx_n_u_metrics, Py_None); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 3014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
+3015:             ("processing", "processing", _legacy_task_key_dict),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_task_key_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_processing_2);
  __Pyx_GIVEREF(__pyx_n_u_processing_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_processing_2);
  __Pyx_INCREF(__pyx_n_u_processing_2);
  __Pyx_GIVEREF(__pyx_n_u_processing_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_processing_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);
  __pyx_t_2 = 0;
+3016:             ("has_what", "has_what", _legacy_task_key_set),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_legacy_task_key_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3016, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3016, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_n_u_has_what);
  __Pyx_GIVEREF(__pyx_n_u_has_what);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_n_u_has_what);
  __Pyx_INCREF(__pyx_n_u_has_what);
  __Pyx_GIVEREF(__pyx_n_u_has_what);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_n_u_has_what);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_2);
  __pyx_t_2 = 0;
 3017:         ]:
+3018:             func = operator.attrgetter(new_attr)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_operator); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_4, __pyx_v_new_attr) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_new_attr);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_func, __pyx_t_2);
    __pyx_t_2 = 0;
+3019:             if wrap is not None:
    __pyx_t_6 = (__pyx_v_wrap != Py_None);
    __pyx_t_5 = (__pyx_t_6 != 0);
    if (__pyx_t_5) {
/* … */
    }
+3020:                 func = compose(wrap, func)
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_compose); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3020, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_13)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3020, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_wrap, __pyx_v_func};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3020, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3020, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_INCREF(__pyx_v_wrap);
        __Pyx_GIVEREF(__pyx_v_wrap);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_v_wrap);
        __Pyx_INCREF(__pyx_v_func);
        __Pyx_GIVEREF(__pyx_v_func);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_v_func);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3020, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_2);
      __pyx_t_2 = 0;
+3021:             setattr(self, old_attr, _StateLegacyMapping(workers, func))
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_StateLegacyMapping); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3021, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_workers, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3021, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_workers, __pyx_v_func};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3021, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3021, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_workers);
      __Pyx_GIVEREF(__pyx_v_workers);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_workers);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_v_func);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3021, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_old_attr, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 3021, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3022: 
+3023:         host_info = defaultdict(dict)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_13, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyDict_Type)));
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_host_info = __pyx_t_14;
  __pyx_t_14 = 0;
+3024:         resources = defaultdict(dict)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_13, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyDict_Type)));
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_resources = __pyx_t_14;
  __pyx_t_14 = 0;
+3025:         aliases = dict()
  __pyx_t_14 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_v_aliases = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
 3026: 
+3027:         self._task_state_collections = [unrunnable]
  __pyx_t_14 = PyList_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_v_unrunnable);
  __Pyx_GIVEREF(__pyx_v_unrunnable);
  PyList_SET_ITEM(__pyx_t_14, 0, __pyx_v_unrunnable);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_task_state_collections, __pyx_t_14) < 0) __PYX_ERR(0, 3027, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3028: 
+3029:         self._worker_collections = [
  __pyx_t_14 = PyList_New(4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_v_workers);
  PyList_SET_ITEM(__pyx_t_14, 0, __pyx_v_workers);
  __Pyx_INCREF(__pyx_v_host_info);
  __Pyx_GIVEREF(__pyx_v_host_info);
  PyList_SET_ITEM(__pyx_t_14, 1, __pyx_v_host_info);
  __Pyx_INCREF(__pyx_v_resources);
  __Pyx_GIVEREF(__pyx_v_resources);
  PyList_SET_ITEM(__pyx_t_14, 2, __pyx_v_resources);
  __Pyx_INCREF(__pyx_v_aliases);
  __Pyx_GIVEREF(__pyx_v_aliases);
  PyList_SET_ITEM(__pyx_t_14, 3, __pyx_v_aliases);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_worker_collections, __pyx_t_14) < 0) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3030:             workers,
 3031:             host_info,
 3032:             resources,
 3033:             aliases,
 3034:         ]
 3035: 
+3036:         self.plugins = list(plugins)
  __pyx_t_14 = PySequence_List(__pyx_v_plugins); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_plugins, __pyx_t_14) < 0) __PYX_ERR(0, 3036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3037:         self.transition_log = deque(
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_deque); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_transition_log, __pyx_t_13) < 0) __PYX_ERR(0, 3037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+3038:             maxlen=dask.config.get("distributed.scheduler.transition-log-length")
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_13 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_kp_u_distributed_scheduler_transition) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_distributed_scheduler_transition);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_maxlen, __pyx_t_13) < 0) __PYX_ERR(0, 3038, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 3039:         )
+3040:         self.log = deque(
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_deque); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
/* … */
  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_log, __pyx_t_14) < 0) __PYX_ERR(0, 3040, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3041:             maxlen=dask.config.get("distributed.scheduler.transition-log-length")
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_14 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_kp_u_distributed_scheduler_transition) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_distributed_scheduler_transition);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_maxlen, __pyx_t_14) < 0) __PYX_ERR(0, 3041, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3042:         )
+3043:         self.events = defaultdict(lambda: deque(maxlen=100000))
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___lambda4(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_8__init___lambda4 = {"lambda4", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___lambda4, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___lambda4(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda4 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda4(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda4(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda4", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_deque); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_maxlen, __pyx_int_100000) < 0) __PYX_ERR(0, 3043, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.__init__.lambda4", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_8__init___lambda4, 0, __pyx_n_s_Scheduler___init___locals_lambda, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_13);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_events, __pyx_t_14) < 0) __PYX_ERR(0, 3043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3044:         self.event_counts = defaultdict(int)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_13, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_event_counts, __pyx_t_14) < 0) __PYX_ERR(0, 3044, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3045:         self.worker_plugins = []
  __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_worker_plugins, __pyx_t_14) < 0) __PYX_ERR(0, 3045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3046: 
 3047:         worker_handlers = {
+3048:             "task-finished": self.handle_task_finished,
  __pyx_t_14 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handle_task_finished); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_task_finished, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3049:             "task-erred": self.handle_task_erred,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handle_task_erred); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_task_erred, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3050:             "release": self.handle_release_data,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handle_release_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_release, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3051:             "release-worker-data": self.release_worker_data,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_release_worker_data_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_release_worker_data, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3052:             "add-keys": self.add_keys,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_keys_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_add_keys, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3053:             "missing-data": self.handle_missing_data,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handle_missing_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_missing_data, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3054:             "long-running": self.handle_long_running,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handle_long_running); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_long_running, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3055:             "reschedule": self.reschedule,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reschedule); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_reschedule, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3056:             "keep-alive": lambda *args, **kwargs: None,
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___1lambda5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_8__init___1lambda5 = {"lambda5", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___1lambda5, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_8__init___1lambda5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda5 (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "lambda5", 1))) return NULL;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_lambda_funcdef_lambda5(__pyx_self, __pyx_v_args, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda5(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda5", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_8__init___1lambda5, 0, __pyx_n_s_Scheduler___init___locals_lambda, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_keep_alive, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3057:             "log-event": self.log_worker_event,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_worker_event); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_log_event, __pyx_t_2) < 0) __PYX_ERR(0, 3048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_worker_handlers = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
 3058:         }
 3059: 
 3060:         client_handlers = {
+3061:             "update-graph": self.update_graph,
  __pyx_t_14 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update_graph_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_update_graph, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3062:             "update-graph-hlg": self.update_graph_hlg,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update_graph_hlg_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_update_graph_hlg, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3063:             "client-desires-keys": self.client_desires_keys,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_desires_keys_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_client_desires_keys, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3064:             "update-data": self.update_data,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update_data_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_update_data, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3065:             "report-key": self.report_on_key,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report_on_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_report_key, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3066:             "client-releases-keys": self.client_releases_keys,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_releases_keys_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_client_releases_keys, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3067:             "heartbeat-client": self.client_heartbeat,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_heartbeat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_heartbeat_client, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3068:             "close-client": self.remove_client,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_remove_client); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_close_client, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3069:             "restart": self.restart,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_restart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_restart, __pyx_t_2) < 0) __PYX_ERR(0, 3061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_client_handlers = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
 3070:         }
 3071: 
+3072:         self.handlers = {
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_handlers, __pyx_t_14) < 0) __PYX_ERR(0, 3072, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3073:             "register-client": self.add_client,
  __pyx_t_14 = __Pyx_PyDict_NewPresized(44); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_client); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_register_client, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3074:             "scatter": self.scatter,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scatter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_scatter, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3075:             "register-worker": self.add_worker,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_kp_u_register_worker, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3076:             "unregister": self.remove_worker,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_unregister, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3077:             "gather": self.gather,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_gather); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_gather, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3078:             "cancel": self.stimulus_cancel,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stimulus_cancel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_cancel, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3079:             "retry": self.stimulus_retry,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stimulus_retry); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_retry, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3080:             "feed": self.feed,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_feed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_feed, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3081:             "terminate": self.close,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_terminate, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3082:             "broadcast": self.broadcast,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_broadcast); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_broadcast, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3083:             "proxy": self.proxy,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_proxy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_proxy, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3084:             "ncores": self.get_ncores,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_ncores); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_ncores, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3085:             "has_what": self.get_has_what,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_has_what); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_has_what, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3086:             "who_has": self.get_who_has,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_who_has); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_who_has, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3087:             "processing": self.get_processing,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_processing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_processing_2, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3088:             "call_stack": self.get_call_stack,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_call_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_call_stack, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3089:             "profile": self.get_profile,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_profile); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3089, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_profile, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3090:             "performance_report": self.performance_report,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_performance_report); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3090, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_performance_report, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3091:             "get_logs": self.get_logs,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_logs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_get_logs, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3092:             "logs": self.get_logs,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_logs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_logs, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3093:             "worker_logs": self.get_worker_logs,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_worker_logs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_worker_logs, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3094:             "log_event": self.log_worker_event,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_worker_event); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_log_event_2, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3095:             "events": self.get_events,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_events, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3096:             "nbytes": self.get_nbytes,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_nbytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_nbytes, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3097:             "versions": self.versions,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_versions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_versions, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3098:             "add_keys": self.add_keys,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_keys_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_add_keys_2, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3099:             "rebalance": self.rebalance,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rebalance); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3099, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_rebalance, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3100:             "replicate": self.replicate,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_replicate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_replicate, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3101:             "start_ipython": self.start_ipython,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_start_ipython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_start_ipython, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3102:             "run_function": self.run_function,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_run_function); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_run_function, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3103:             "update_data": self.update_data,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update_data_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_update_data_2, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3104:             "set_resources": self.add_resources,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_resources); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_set_resources, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3105:             "retire_workers": self.retire_workers,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_retire_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_retire_workers, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3106:             "get_metadata": self.get_metadata,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_get_metadata, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3107:             "set_metadata": self.set_metadata,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_set_metadata, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3108:             "heartbeat_worker": self.heartbeat_worker,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_heartbeat_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_heartbeat_worker, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3109:             "get_task_status": self.get_task_status,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_task_status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_get_task_status, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3110:             "get_task_stream": self.get_task_stream,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_task_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_get_task_stream, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3111:             "register_worker_plugin": self.register_worker_plugin,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_register_worker_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_register_worker_plugin, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3112:             "adaptive_target": self.adaptive_target,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_adaptive_target); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_adaptive_target, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3113:             "workers_to_close": self.workers_to_close,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_workers_to_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_workers_to_close, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3114:             "subscribe_worker_status": self.subscribe_worker_status,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_subscribe_worker_status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_subscribe_worker_status, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3115:             "start_task_metadata": self.start_task_metadata,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_start_task_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_start_task_metadata, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3116:             "stop_task_metadata": self.stop_task_metadata,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stop_task_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_u_stop_task_metadata, __pyx_t_2) < 0) __PYX_ERR(0, 3073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3117:         }
 3118: 
+3119:         self._transitions = {
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_transitions, __pyx_t_14) < 0) __PYX_ERR(0, 3119, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3120:             ("released", "waiting"): self.transition_released_waiting,
  __pyx_t_14 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_released_waiting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__33, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_u_released, __pyx_n_u_waiting); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
+3121:             ("waiting", "released"): self.transition_waiting_released,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_waiting_released); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__34, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__34 = PyTuple_Pack(2, __pyx_n_u_waiting, __pyx_n_u_released); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 3121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);
+3122:             ("waiting", "processing"): self.transition_waiting_processing,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_waiting_processing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__35, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__35 = PyTuple_Pack(2, __pyx_n_u_waiting, __pyx_n_u_processing_2); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 3122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
+3123:             ("waiting", "memory"): self.transition_waiting_memory,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_waiting_memory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__36, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__36 = PyTuple_Pack(2, __pyx_n_u_waiting, __pyx_n_u_memory_2); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 3123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);
+3124:             ("processing", "released"): self.transition_processing_released,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_processing_released); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__37, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__37 = PyTuple_Pack(2, __pyx_n_u_processing_2, __pyx_n_u_released); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 3124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
+3125:             ("processing", "memory"): self.transition_processing_memory,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_processing_memory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__38, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__38 = PyTuple_Pack(2, __pyx_n_u_processing_2, __pyx_n_u_memory_2); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 3125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__38);
  __Pyx_GIVEREF(__pyx_tuple__38);
+3126:             ("processing", "erred"): self.transition_processing_erred,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_processing_erred); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__39, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__39 = PyTuple_Pack(2, __pyx_n_u_processing_2, __pyx_n_u_erred); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 3126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
+3127:             ("no-worker", "released"): self.transition_no_worker_released,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_no_worker_released); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__40, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__40 = PyTuple_Pack(2, __pyx_kp_u_no_worker, __pyx_n_u_released); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 3127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);
+3128:             ("no-worker", "waiting"): self.transition_no_worker_waiting,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_no_worker_waiting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__41, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_kp_u_no_worker, __pyx_n_u_waiting); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 3128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);
+3129:             ("released", "forgotten"): self.transition_released_forgotten,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_released_forgotten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__42, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__42 = PyTuple_Pack(2, __pyx_n_u_released, __pyx_n_u_forgotten); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 3129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);
+3130:             ("memory", "forgotten"): self.transition_memory_forgotten,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_memory_forgotten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__43, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_u_memory_2, __pyx_n_u_forgotten); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 3130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
+3131:             ("erred", "forgotten"): self.transition_released_forgotten,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_released_forgotten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__44, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__44 = PyTuple_Pack(2, __pyx_n_u_erred, __pyx_n_u_forgotten); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 3131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);
+3132:             ("erred", "released"): self.transition_erred_released,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_erred_released); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__45, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__45 = PyTuple_Pack(2, __pyx_n_u_erred, __pyx_n_u_released); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 3132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
+3133:             ("memory", "released"): self.transition_memory_released,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_memory_released); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__46, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__46 = PyTuple_Pack(2, __pyx_n_u_memory_2, __pyx_n_u_released); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 3133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);
+3134:             ("released", "erred"): self.transition_released_erred,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_released_erred); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_14, __pyx_tuple__47, __pyx_t_2) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_u_released, __pyx_n_u_erred); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 3134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
 3135:         }
 3136: 
+3137:         connection_limit = get_fileno_limit() / 2
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_fileno_limit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_TrueDivideObjC(__pyx_t_14, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_connection_limit = __pyx_t_2;
  __pyx_t_2 = 0;
 3138: 
+3139:         super().__init__(
  __pyx_t_2 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_2) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 3139, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+3140:             aliases=aliases,
  __pyx_t_13 = __Pyx_PyDict_NewPresized(14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_aliases, __pyx_v_aliases) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3141:             handlers=self.handlers,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_handlers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_handlers, __pyx_t_4) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3142:             stream_handlers=merge(worker_handlers, client_handlers),
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_merge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_worker_handlers, __pyx_v_client_handlers};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3142, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_worker_handlers, __pyx_v_client_handlers};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3142, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_worker_handlers);
    __Pyx_GIVEREF(__pyx_v_worker_handlers);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_7, __pyx_v_worker_handlers);
    __Pyx_INCREF(__pyx_v_client_handlers);
    __Pyx_GIVEREF(__pyx_v_client_handlers);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_7, __pyx_v_client_handlers);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_stream_handlers, __pyx_t_4) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3143:             io_loop=self.loop,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_io_loop, __pyx_t_4) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3144:             connection_limit=connection_limit,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_connection_limit, __pyx_v_connection_limit) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3145:             deserialize=False,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_deserialize, Py_False) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3146:             connection_args=self.connection_args,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_connection_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_connection_args, __pyx_t_4) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3147:             clients=clients,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_clients, __pyx_v_clients) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3148:             workers=workers,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_workers, __pyx_v_workers) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3149:             host_info=host_info,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_host_info, __pyx_v_host_info) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3150:             resources=resources,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_resources, __pyx_v_resources) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3151:             tasks=tasks,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_tasks, __pyx_v_tasks) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3152:             unrunnable=unrunnable,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_unrunnable, __pyx_v_unrunnable) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
+3153:             validate=validate,
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_validate, __pyx_v_validate) < 0) __PYX_ERR(0, 3140, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_13;
  __pyx_t_13 = 0;
+3154:             **kwargs,
  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kwargs) < 0) __PYX_ERR(0, 3154, __pyx_L1_error)
 3155:         )
 3156: 
+3157:         if self.worker_ttl:
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_worker_ttl); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (__pyx_t_5) {
/* … */
  }
+3158:             pc = PeriodicCallback(self.check_worker_ttl, self.worker_ttl)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PeriodicCallback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_check_worker_ttl); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_worker_ttl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_14, __pyx_t_4};
      __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3158, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_14, __pyx_t_4};
      __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3158, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_15 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_7, __pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_7, __pyx_t_4);
      __pyx_t_14 = 0;
      __pyx_t_4 = 0;
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_pc = __pyx_t_13;
    __pyx_t_13 = 0;
+3159:             self.periodic_callbacks["worker-ttl"] = pc
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_periodic_callbacks); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (unlikely(PyObject_SetItem(__pyx_t_13, __pyx_kp_u_worker_ttl_2, __pyx_v_pc) < 0)) __PYX_ERR(0, 3159, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 3160: 
+3161:         if self.idle_timeout:
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3161, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (__pyx_t_5) {
/* … */
  }
+3162:             pc = PeriodicCallback(self.check_idle, self.idle_timeout / 4)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PeriodicCallback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_check_idle); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = __Pyx_PyInt_TrueDivideObjC(__pyx_t_4, __pyx_int_4, 4, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_15, __pyx_t_14};
      __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3162, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_15, __pyx_t_14};
      __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3162, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3162, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_t_14);
      __pyx_t_15 = 0;
      __pyx_t_14 = 0;
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3162, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_pc, __pyx_t_13);
    __pyx_t_13 = 0;
+3163:             self.periodic_callbacks["idle-timeout"] = pc
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_periodic_callbacks); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3163, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (unlikely(PyObject_SetItem(__pyx_t_13, __pyx_kp_u_idle_timeout_2, __pyx_v_pc) < 0)) __PYX_ERR(0, 3163, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 3164: 
+3165:         if extensions is None:
  __pyx_t_5 = (__pyx_v_extensions == Py_None);
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
  }
+3166:             extensions = list(DEFAULT_EXTENSIONS)
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_DEFAULT_EXTENSIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3166, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = PySequence_List(__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3166, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF_SET(__pyx_v_extensions, __pyx_t_2);
    __pyx_t_2 = 0;
+3167:             if dask.config.get("distributed.scheduler.work-stealing"):
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_dask); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_1, __pyx_kp_u_distributed_scheduler_work_steal) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_u_distributed_scheduler_work_steal);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3167, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
/* … */
    }
+3168:                 extensions.append(WorkStealing)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_WorkStealing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3168, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_Append(__pyx_v_extensions, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 3168, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3169:         for ext in extensions:
  if (likely(PyList_CheckExact(__pyx_v_extensions)) || PyTuple_CheckExact(__pyx_v_extensions)) {
    __pyx_t_2 = __pyx_v_extensions; __Pyx_INCREF(__pyx_t_2); __pyx_t_12 = 0;
    __pyx_t_16 = NULL;
  } else {
    __pyx_t_12 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_extensions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_16 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3169, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_16)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_13 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_12); __Pyx_INCREF(__pyx_t_13); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3169, __pyx_L1_error)
        #else
        __pyx_t_13 = PySequence_ITEM(__pyx_t_2, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        #endif
      } else {
        if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_12); __Pyx_INCREF(__pyx_t_13); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3169, __pyx_L1_error)
        #else
        __pyx_t_13 = PySequence_ITEM(__pyx_t_2, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        #endif
      }
    } else {
      __pyx_t_13 = __pyx_t_16(__pyx_t_2);
      if (unlikely(!__pyx_t_13)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3169, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_13);
    }
    __Pyx_XDECREF_SET(__pyx_v_ext, __pyx_t_13);
    __pyx_t_13 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3170:             ext(self)
    __Pyx_INCREF(__pyx_v_ext);
    __pyx_t_1 = __pyx_v_ext; __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_13 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_14, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_self);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 3171: 
+3172:         setproctitle("dask-scheduler [not started]")
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_setproctitle); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_1, __pyx_kp_u_dask_scheduler_not_started) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_u_dask_scheduler_not_started);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3173:         Scheduler._instances.add(self)
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_Scheduler); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_instances); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_add); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_1, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_self);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3174:         self.rpc.allow_offload = False
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_allow_offload, Py_False) < 0) __PYX_ERR(0, 3174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3175:         self.status = Status.undefined
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_undefined); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_status, __pyx_t_13) < 0) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 3176: 
 3177:     ##################
 3178:     # Administration #
 3179:     ##################
 3180: 
+3181:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_3__repr__ = {"__repr__", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_3__repr__, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_2__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__158 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_parent); if (unlikely(!__pyx_tuple__158)) __PYX_ERR(0, 3181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__158);
  __Pyx_GIVEREF(__pyx_tuple__158);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_3__repr__, 0, __pyx_n_s_Scheduler___repr, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__159)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_repr, __pyx_t_12) < 0) __PYX_ERR(0, 3181, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__159 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__158, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_repr, 3181, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__159)) __PYX_ERR(0, 3181, __pyx_L1_error)
+3182:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3183:         return '<Scheduler: "%s" processes: %d cores: %d>' % (
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Scheduler_2);
  __pyx_t_2 += 13;
  __Pyx_GIVEREF(__pyx_kp_u_Scheduler_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Scheduler_2);
/* … */
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
+3184:             self.address,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_processes);
  __pyx_t_2 += 13;
  __Pyx_GIVEREF(__pyx_kp_u_processes);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_processes);
+3185:             len(parent._workers),
  __pyx_t_5 = __pyx_v_parent->_workers;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_cores);
  __pyx_t_2 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_cores);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_cores);
+3186:             parent._total_nthreads,
  __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_parent->_total_nthreads, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u__3);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__3);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u__3);
 3187:         )
 3188: 
+3189:     def identity(self, comm=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_5identity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_4identity[] = " Basic information about ourselves and our cluster ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_5identity = {"identity", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_5identity, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_4identity};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_5identity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("identity (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "identity") < 0)) __PYX_ERR(0, 3189, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("identity", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3189, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.identity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_4identity(__pyx_self, __pyx_v_self, __pyx_v_comm);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_4identity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_9genexpr30__pyx_v_key = NULL;
  PyObject *__pyx_9genexpr30__pyx_v_v = NULL;
  PyObject *__pyx_9genexpr31__pyx_v_worker = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("identity", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.identity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_key);
  __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_v);
  __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_worker);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__160 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_parent, __pyx_n_s_d, __pyx_n_s_key, __pyx_n_s_v, __pyx_n_s_worker); if (unlikely(!__pyx_tuple__160)) __PYX_ERR(0, 3189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__160);
  __Pyx_GIVEREF(__pyx_tuple__160);
  __pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_identity, 3189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) __PYX_ERR(0, 3189, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_5identity, 0, __pyx_n_s_Scheduler_identity, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__161)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__162);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_identity, __pyx_t_12) < 0) __PYX_ERR(0, 3189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__162 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__162)) __PYX_ERR(0, 3189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__162);
  __Pyx_GIVEREF(__pyx_tuple__162);
 3190:         """ Basic information about ourselves and our cluster """
+3191:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 3192:         d = {
+3193:             "type": type(self).__name__,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_type, __pyx_t_2) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3194:             "id": str(self.id),
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_t_3) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3195:             "address": self.address,
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_address, __pyx_t_3) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  { /* enter inner scope */
+3196:             "services": {key: v.port for (key, v) in self.services.items()},
    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3196, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_services); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3196, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(__pyx_t_7 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 3196, __pyx_L5_error)
    }
    __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_n_s_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3196, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_8;
    __pyx_t_8 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 3196, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF_SET(__pyx_9genexpr30__pyx_v_key, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_9genexpr30__pyx_v_v, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr30__pyx_v_v, __pyx_n_s_port); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3196, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_9genexpr30__pyx_v_key, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 3196, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_key); __pyx_9genexpr30__pyx_v_key = 0;
    __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_v); __pyx_9genexpr30__pyx_v_v = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_key); __pyx_9genexpr30__pyx_v_key = 0;
    __Pyx_XDECREF(__pyx_9genexpr30__pyx_v_v); __pyx_9genexpr30__pyx_v_v = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_services, __pyx_t_3) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3197:             "started": self.time_started,
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_time_started); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_started, __pyx_t_3) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  { /* enter inner scope */
+3198:             "workers": {
    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3198, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_3);
+3199:                 worker.address: worker.identity() for worker in parent._workers.values()
    __pyx_t_5 = 0;
    if (unlikely(__pyx_v_parent->_workers == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 3199, __pyx_L11_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_workers, 0, __pyx_n_s_values, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3199, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_5, NULL, &__pyx_t_7, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 3199, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF_SET(__pyx_9genexpr31__pyx_v_worker, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr31__pyx_v_worker, __pyx_n_s_address); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3199, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr31__pyx_v_worker, __pyx_n_s_identity); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3199, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3199, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_t_7, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 3199, __pyx_L11_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_worker); __pyx_9genexpr31__pyx_v_worker = 0;
    goto __pyx_L14_exit_scope;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_worker); __pyx_9genexpr31__pyx_v_worker = 0;
    goto __pyx_L1_error;
    __pyx_L14_exit_scope:;
  } /* exit inner scope */
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_workers, __pyx_t_3) < 0) __PYX_ERR(0, 3193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_d = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3200:             },
 3201:         }
+3202:         return d
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_d);
  __pyx_r = __pyx_v_d;
  goto __pyx_L0;
 3203: 
+3204:     def get_worker_service_addr(self, worker, service_name, protocol=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_7get_worker_service_addr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_6get_worker_service_addr[] = "\n        Get the (host, port) address of the named service on the *worker*.\n        Returns None if the service doesn't exist.\n\n        Parameters\n        ----------\n        worker : address\n        service_name : str\n            Common services include 'bokeh' and 'nanny'\n        protocol : boolean\n            Whether or not to include a full address with protocol (True)\n            or just a (host, port) pair\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_7get_worker_service_addr = {"get_worker_service_addr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_7get_worker_service_addr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_6get_worker_service_addr};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_7get_worker_service_addr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_service_name = 0;
  PyObject *__pyx_v_protocol = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_worker_service_addr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,&__pyx_n_s_service_name,&__pyx_n_s_protocol,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_worker_service_addr", 0, 3, 4, 1); __PYX_ERR(0, 3204, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_service_name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_worker_service_addr", 0, 3, 4, 2); __PYX_ERR(0, 3204, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_worker_service_addr") < 0)) __PYX_ERR(0, 3204, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
    __pyx_v_service_name = values[2];
    __pyx_v_protocol = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_worker_service_addr", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3204, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_worker_service_addr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_6get_worker_service_addr(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_service_name, __pyx_v_protocol);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_6get_worker_service_addr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker, PyObject *__pyx_v_service_name, PyObject *__pyx_v_protocol) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_port = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_worker_service_addr", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_worker_service_addr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_port);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_10generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__163 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_service_name, __pyx_n_s_protocol, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_port); if (unlikely(!__pyx_tuple__163)) __PYX_ERR(0, 3204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__163);
  __Pyx_GIVEREF(__pyx_tuple__163);
  __pyx_codeobj__164 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_worker_service_addr, 3204, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__164)) __PYX_ERR(0, 3204, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_7get_worker_service_addr, 0, __pyx_n_s_Scheduler_get_worker_service_add, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__164)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__165);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_worker_service_addr, __pyx_t_12) < 0) __PYX_ERR(0, 3204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__165 = PyTuple_Pack(1, ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__165)) __PYX_ERR(0, 3204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__165);
  __Pyx_GIVEREF(__pyx_tuple__165);
 3205:         """
 3206:         Get the (host, port) address of the named service on the *worker*.
 3207:         Returns None if the service doesn't exist.
 3208: 
 3209:         Parameters
 3210:         ----------
 3211:         worker : address
 3212:         service_name : str
 3213:             Common services include 'bokeh' and 'nanny'
 3214:         protocol : boolean
 3215:             Whether or not to include a full address with protocol (True)
 3216:             or just a (host, port) pair
 3217:         """
+3218:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3219:         ws: WorkerState = parent._workers[worker]
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_parent->_workers, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3219, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3220:         port = ws._services.get(service_name)
  if (unlikely(__pyx_v_ws->_services == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 3220, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_ws->_services, __pyx_v_service_name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_port = __pyx_t_1;
  __pyx_t_1 = 0;
+3221:         if port is None:
  __pyx_t_2 = (__pyx_v_port == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+3222:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+3223:         elif protocol:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_protocol); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3223, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+3224:             return "%(protocol)s://%(host)s:%(port)d" % {
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_protocol_s_host_s_port_d, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+3225:                 "protocol": ws._address.split("://")[0],
    __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_ws->_address == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "split");
      __PYX_ERR(0, 3225, __pyx_L1_error)
    }
    __pyx_t_4 = PyUnicode_Split(__pyx_v_ws->_address, __pyx_kp_u__48, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_protocol, __pyx_t_5) < 0) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3226:                 "host": ws.host,
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ws), __pyx_n_s_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_host, __pyx_t_5) < 0) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3227:                 "port": port,
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_port, __pyx_v_port) < 0) __PYX_ERR(0, 3225, __pyx_L1_error)
 3228:             }
 3229:         else:
+3230:             return ws.host, port
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ws), __pyx_n_s_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
    __Pyx_INCREF(__pyx_v_port);
    __Pyx_GIVEREF(__pyx_v_port);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_port);
    __pyx_t_5 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 3231: 
+3232:     async def start(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9start(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_8start[] = " Clear out old state and restart all running coroutines ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_9start = {"start", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_9start, METH_O, __pyx_doc_11distributed_9scheduler_9Scheduler_8start};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9start(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_8start(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_8start(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_9_start(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_9_start, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3232, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_10generator1, __pyx_codeobj__49, (PyObject *) __pyx_cur_scope, __pyx_n_s_start, __pyx_n_s_Scheduler_start, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3232, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    gen->classobj = __Pyx_CyFunction_GetClassObj(__pyx_self);
    __Pyx_INCREF(gen->classobj);
    __Pyx_GIVEREF(gen->classobj);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_10generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3232, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_13generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__166 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_c, __pyx_n_s_addr, __pyx_n_s_listen_ip, __pyx_n_s_listener, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_f, __pyx_n_s_fn, __pyx_n_s_del_scheduler_file, __pyx_n_s_del_scheduler_file, __pyx_n_s_preload, __pyx_n_s_plugin); if (unlikely(!__pyx_tuple__166)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__166);
  __Pyx_GIVEREF(__pyx_tuple__166);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_9start, 0, __pyx_n_s_Scheduler_start, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_t_12);
  PyList_Append(__pyx_t_13, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_start, __pyx_t_12) < 0) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_start, 3232, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 3232, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start {
  PyObject_HEAD
  PyObject *__pyx_v_addr;
  PyObject *__pyx_v_c;
  PyObject *__pyx_v_del_scheduler_file;
  PyObject *__pyx_v_f;
  PyObject *__pyx_v_fn;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_listen_ip;
  PyObject *__pyx_v_listener;
  PyObject *__pyx_9genexpr32__pyx_v_plugin;
  PyObject *__pyx_v_preload;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

 3233:         """ Clear out old state and restart all running coroutines """
+3234:         await super().start()
  __pyx_t_2 =  __pyx_generator->classobj;
  if (!__pyx_t_2) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 3234, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_cur_scope->__pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3234, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 3234, __pyx_L1_error)
    }
  }
+3235:         assert self.status != Status.running
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_running); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3235, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3235, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 3235, __pyx_L1_error)
    }
  }
  #endif
 3236: 
+3237:         enable_gc_diagnosis()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_enable_gc_diagnosis); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3238: 
+3239:         self.clear_task_state()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_clear_task_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3240: 
+3241:         with suppress(AttributeError):
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_suppress); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_builtin_AttributeError) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_builtin_AttributeError);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3241, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3241, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.start", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 3241, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3241, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3241, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_4 < 0) __PYX_ERR(0, 3241, __pyx_L11_except_error)
          __pyx_t_13 = ((!(__pyx_t_4 != 0)) != 0);
          if (__pyx_t_13) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_1);
            __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 3241, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_5) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
    goto __pyx_L20;
    __pyx_L5_error:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L1_error;
    __pyx_L20:;
  }
+3242:             for c in self._worker_coroutines:
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_coroutines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3242, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
            __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3242, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3242, __pyx_L9_error)
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_2))) {
                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3242, __pyx_L9_error)
                #else
                __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3242, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                #endif
              } else {
                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3242, __pyx_L9_error)
                #else
                __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3242, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                #endif
              }
            } else {
              __pyx_t_3 = __pyx_t_11(__pyx_t_2);
              if (unlikely(!__pyx_t_3)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 3242, __pyx_L9_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_c);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_c, __pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_3);
            __pyx_t_3 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3243:                 c.cancel()
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_c, __pyx_n_s_cancel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3243, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_6 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
              }
            }
            __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3243, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3244: 
+3245:         for addr in self._start_address:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_start_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3245, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3245, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3245, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3245, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_addr);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_addr, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3246:             await self.listen(
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_listen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_addr);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_addr);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_addr);
/* … */
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_14);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_t_3);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_10;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_11;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 2;
      return __pyx_r;
      __pyx_L23_resume_from_await:;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_3);
      __pyx_t_10 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_11 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3246, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3246, __pyx_L1_error)
      }
    }
 3247:                 addr,
+3248:                 allow_offload=False,
    __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3248, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_allow_offload, Py_False) < 0) __PYX_ERR(0, 3248, __pyx_L1_error)
+3249:                 handshake_overrides={"pickle-protocol": 4, "compression": None},
    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (PyDict_SetItem(__pyx_t_15, __pyx_kp_u_pickle_protocol, __pyx_int_4) < 0) __PYX_ERR(0, 3249, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_compression, Py_None) < 0) __PYX_ERR(0, 3249, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_handshake_overrides, __pyx_t_15) < 0) __PYX_ERR(0, 3248, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_6 = __pyx_t_14;
    __pyx_t_14 = 0;
+3250:                 **self.security.get_listen_args("scheduler"),
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_security); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3250, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_get_listen_args); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3250, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_16, function);
      }
    }
    __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_15, __pyx_n_u_scheduler) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_n_u_scheduler);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3250, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(__pyx_t_14 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(0, 3250, __pyx_L1_error)
    }
    if (__Pyx_MergeKeywords(__pyx_t_6, __pyx_t_14) < 0) __PYX_ERR(0, 3250, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3251:             )
+3252:             self.ip = get_address_host(self.listen_address)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_listen_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_14 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_ip, __pyx_t_14) < 0) __PYX_ERR(0, 3252, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3253:             listen_ip = self.ip
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_ip); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_listen_ip);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_listen_ip, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_14);
    __pyx_t_14 = 0;
 3254: 
+3255:             if listen_ip == "0.0.0.0":
    __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_listen_ip, __pyx_kp_u_0_0_0_0, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3255, __pyx_L1_error)
    if (__pyx_t_13) {
/* … */
    }
+3256:                 listen_ip = ""
      __Pyx_INCREF(__pyx_kp_u__50);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_listen_ip);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_listen_ip, __pyx_kp_u__50);
      __Pyx_GIVEREF(__pyx_kp_u__50);
 3257: 
+3258:         if self.address.startswith("inproc://"):
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_address); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_3 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_14, __pyx_kp_u_inproc) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_u_inproc);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_13) {
/* … */
  }
+3259:             listen_ip = "localhost"
    __Pyx_INCREF(__pyx_n_u_localhost);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_listen_ip);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_listen_ip, __pyx_n_u_localhost);
    __Pyx_GIVEREF(__pyx_n_u_localhost);
 3260: 
 3261:         # Services listen on all addresses
+3262:         self.start_services(listen_ip)
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_start_services); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (unlikely(!__pyx_cur_scope->__pyx_v_listen_ip)) { __Pyx_RaiseUnboundLocalError("listen_ip"); __PYX_ERR(0, 3262, __pyx_L1_error) }
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_3 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_14, __pyx_cur_scope->__pyx_v_listen_ip) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_cur_scope->__pyx_v_listen_ip);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3263: 
+3264:         for listener in self.listeners:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_listeners); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3264, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3264, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3264, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 3264, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3264, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_11(__pyx_t_6);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3264, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_listener);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_listener, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3265:             logger.info("  Scheduler at: %25s", listener.contact_address)
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_listener, __pyx_n_s_contact_address); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_1 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Scheduler_at_25s, __pyx_t_14};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3265, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Scheduler_at_25s, __pyx_t_14};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3265, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    {
      __pyx_t_16 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3265, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_Scheduler_at_25s);
      __Pyx_GIVEREF(__pyx_kp_u_Scheduler_at_25s);
      PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_17, __pyx_kp_u_Scheduler_at_25s);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_17, __pyx_t_14);
      __pyx_t_14 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3265, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3266:         for k, v in self.services.items():
  __pyx_t_10 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_services); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely(__pyx_t_3 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3266, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_dict_iterator(__pyx_t_3, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_18, &__pyx_t_10, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_17);
    if (unlikely(__pyx_t_19 == 0)) break;
    if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 3266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
+3267:             logger.info("%11s at: %25s", k, "%s:%d" % (listen_ip, v.port))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_20 = 0;
    __pyx_t_21 = 127;
    if (unlikely(!__pyx_cur_scope->__pyx_v_listen_ip)) { __Pyx_RaiseUnboundLocalError("listen_ip"); __PYX_ERR(0, 3267, __pyx_L1_error) }
    __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_cur_scope->__pyx_v_listen_ip), __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_21;
    __pyx_t_20 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_14);
    __pyx_t_14 = 0;
    __Pyx_INCREF(__pyx_kp_u__51);
    __pyx_t_20 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__51);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__51);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_v, __pyx_n_s_port); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_1 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_14), __pyx_n_u_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_21;
    __pyx_t_20 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_20, __pyx_t_21); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_19 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_16);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_16, function);
        __pyx_t_19 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_16)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_11s_at_25s, __pyx_cur_scope->__pyx_v_k, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_19, 3+__pyx_t_19); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3267, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_16)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_11s_at_25s, __pyx_cur_scope->__pyx_v_k, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_19, 3+__pyx_t_19); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3267, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(3+__pyx_t_19); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3267, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_11s_at_25s);
      __Pyx_GIVEREF(__pyx_kp_u_11s_at_25s);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_19, __pyx_kp_u_11s_at_25s);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_k);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_19, __pyx_cur_scope->__pyx_v_k);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_19, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3267, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 3268: 
+3269:         self.loop.add_callback(self.reevaluate_occupancy)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add_callback); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_reevaluate_occupancy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_6 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_14, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 3270: 
+3271:         if self.scheduler_file:
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_scheduler_file); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3271, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_13) {
/* … */
  }
+3272:             with open(self.scheduler_file, "w") as f:
    /*with:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_scheduler_file); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_6);
      __Pyx_INCREF(__pyx_n_u_w);
      __Pyx_GIVEREF(__pyx_n_u_w);
      PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_n_u_w);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_16, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_6, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_6, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3272, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_16 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3272, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __pyx_t_16;
      __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      /*try:*/ {
        {
          /*try:*/ {
            __Pyx_GIVEREF(__pyx_t_3);
            __pyx_cur_scope->__pyx_v_f = __pyx_t_3;
            __pyx_t_3 = 0;
/* … */
          }
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L40_try_end;
          __pyx_L35_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.start", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_3, &__pyx_t_16) < 0) __PYX_ERR(0, 3272, __pyx_L37_except_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_6 = PyTuple_Pack(3, __pyx_t_14, __pyx_t_3, __pyx_t_16); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3272, __pyx_L37_except_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3272, __pyx_L37_except_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (__pyx_t_13 < 0) __PYX_ERR(0, 3272, __pyx_L37_except_error)
            __pyx_t_4 = ((!(__pyx_t_13 != 0)) != 0);
            if (__pyx_t_4) {
              __Pyx_GIVEREF(__pyx_t_14);
              __Pyx_GIVEREF(__pyx_t_3);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_3, __pyx_t_16);
              __pyx_t_14 = 0; __pyx_t_3 = 0; __pyx_t_16 = 0; 
              __PYX_ERR(0, 3272, __pyx_L37_except_error)
            }
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            goto __pyx_L36_exception_handled;
          }
          __pyx_L37_except_error:;
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
          goto __pyx_L1_error;
          __pyx_L36_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
          __pyx_L40_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_5) {
            __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__12, NULL);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3272, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
          goto __pyx_L34;
        }
        __pyx_L34:;
      }
      goto __pyx_L44;
      __pyx_L31_error:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L1_error;
      __pyx_L44:;
    }
+3273:                 json.dump(self.identity(), f, indent=2)
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_json); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dump); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_identity); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_14 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
              __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_16);
              if (likely(__pyx_t_14)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                __Pyx_INCREF(__pyx_t_14);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_16, function);
              }
            }
            __pyx_t_3 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_3);
            PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_3);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_f);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_f);
            PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_cur_scope->__pyx_v_f);
            __pyx_t_3 = 0;
            __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_indent, __pyx_int_2) < 0) __PYX_ERR(0, 3273, __pyx_L35_error)
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_16, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3273, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3274: 
+3275:             fn = self.scheduler_file  # remove file when we close the process
    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_scheduler_file); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_GIVEREF(__pyx_t_16);
    __pyx_cur_scope->__pyx_v_fn = __pyx_t_16;
    __pyx_t_16 = 0;
 3276: 
+3277:             def del_scheduler_file():
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_5start_1del_scheduler_file(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_5start_1del_scheduler_file = {"del_scheduler_file", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_5start_1del_scheduler_file, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_5start_1del_scheduler_file(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("del_scheduler_file (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_5start_del_scheduler_file(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_5start_del_scheduler_file(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("del_scheduler_file", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_9_start *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start.del_scheduler_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_5start_1del_scheduler_file, 0, __pyx_n_s_Scheduler_start_locals_del_sched, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_GIVEREF(__pyx_t_16);
    __pyx_cur_scope->__pyx_v_del_scheduler_file = __pyx_t_16;
    __pyx_t_16 = 0;
/* … */
  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_del_scheduler_file, 3277, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 3277, __pyx_L1_error)
+3278:                 if os.path.exists(fn):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exists); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_fn)) { __Pyx_RaiseClosureNameError("fn"); __PYX_ERR(0, 3278, __pyx_L1_error) }
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_fn) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_fn);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
/* … */
  }
+3279:                     os.remove(fn)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_remove); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_v_fn)) { __Pyx_RaiseClosureNameError("fn"); __PYX_ERR(0, 3279, __pyx_L1_error) }
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_fn) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_fn);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3280: 
+3281:             weakref.finalize(self, del_scheduler_file)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_weakref); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_finalize); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_del_scheduler_file};
      __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3281, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_16);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_del_scheduler_file};
      __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3281, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_16);
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3281, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_17, __pyx_cur_scope->__pyx_v_self);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_del_scheduler_file);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_del_scheduler_file);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_17, __pyx_cur_scope->__pyx_v_del_scheduler_file);
      __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_6, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3281, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 3282: 
+3283:         for preload in self.preloads:
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_preloads); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (likely(PyList_CheckExact(__pyx_t_16)) || PyTuple_CheckExact(__pyx_t_16)) {
    __pyx_t_14 = __pyx_t_16; __Pyx_INCREF(__pyx_t_14); __pyx_t_18 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_18 = -1; __pyx_t_14 = PyObject_GetIter(__pyx_t_16); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_11 = Py_TYPE(__pyx_t_14)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3283, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_14))) {
        if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_14)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_16 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 3283, __pyx_L1_error)
        #else
        __pyx_t_16 = PySequence_ITEM(__pyx_t_14, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        #endif
      } else {
        if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_14)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_16 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 3283, __pyx_L1_error)
        #else
        __pyx_t_16 = PySequence_ITEM(__pyx_t_14, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        #endif
      }
    } else {
      __pyx_t_16 = __pyx_t_11(__pyx_t_14);
      if (unlikely(!__pyx_t_16)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3283, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_16);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_preload);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_preload, __pyx_t_16);
    __Pyx_GIVEREF(__pyx_t_16);
    __pyx_t_16 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3284:             await preload.start()
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_preload, __pyx_n_s_start); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_16 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_16);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_11;
      __Pyx_XGIVEREF(__pyx_t_14);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_14;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_18;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 3;
      return __pyx_r;
      __pyx_L47_resume_from_await:;
      __pyx_t_11 = __pyx_cur_scope->__pyx_t_2;
      __pyx_t_14 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_18 = __pyx_cur_scope->__pyx_t_1;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3284, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3284, __pyx_L1_error)
      }
    }
 3285: 
+3286:         await asyncio.gather(*[plugin.start(self) for plugin in self.plugins])
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_gather); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  { /* enter inner scope */
    __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
      __pyx_t_3 = __pyx_t_6; __Pyx_INCREF(__pyx_t_3); __pyx_t_18 = 0;
      __pyx_t_11 = NULL;
    } else {
      __pyx_t_18 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3286, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      if (likely(!__pyx_t_11)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 3286, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 3286, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_11(__pyx_t_3);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3286, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr32__pyx_v_plugin);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr32__pyx_v_plugin, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr32__pyx_v_plugin, __pyx_n_s_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3286, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_cur_scope->__pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_self);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_14, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 3286, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } /* exit inner scope */
  __pyx_t_3 = PySequence_Tuple(__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_3, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_14);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 4;
    return __pyx_r;
    __pyx_L50_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3286, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 3286, __pyx_L1_error)
    }
  }
 3287: 
+3288:         self.start_periodic_callbacks()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_start_periodic_callbacks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_16)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_14 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 3289: 
+3290:         setproctitle("dask-scheduler [%s]" % (self.address,))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_setproctitle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_18 = 0;
  __pyx_t_21 = 127;
  __Pyx_INCREF(__pyx_kp_u_dask_scheduler);
  __pyx_t_18 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_dask_scheduler);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_kp_u_dask_scheduler);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_6), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_21;
  __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_INCREF(__pyx_kp_u__53);
  __pyx_t_18 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__53);
  PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_kp_u__53);
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_18, __pyx_t_21); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_16)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_14 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_16, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3291:         return self
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_self);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 3292: 
+3293:     async def close(self, comm=None, fast=False, close_workers=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_12close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_11close[] = "Send cleanup signal to all coroutines then wait until finished\n\n        See Also\n        --------\n        Scheduler.cleanup\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_12close = {"close", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_12close, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_11close};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_12close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  CYTHON_UNUSED PyObject *__pyx_v_fast = 0;
  PyObject *__pyx_v_close_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_fast,&__pyx_n_s_close_workers,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_False));
    values[3] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fast);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close_workers);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "close") < 0)) __PYX_ERR(0, 3293, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_fast = values[2];
    __pyx_v_close_workers = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3293, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_11close(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_fast, __pyx_v_close_workers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_11close(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, CYTHON_UNUSED PyObject *__pyx_v_fast, PyObject *__pyx_v_close_workers) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_10_close *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_10_close *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_10_close(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_10_close, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_10_close *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3293, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_fast = __pyx_v_fast;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fast);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fast);
  __pyx_cur_scope->__pyx_v_close_workers = __pyx_v_close_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_close_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_close_workers);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_13generator2, __pyx_codeobj__54, (PyObject *) __pyx_cur_scope, __pyx_n_s_close, __pyx_n_s_Scheduler_close, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3293, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    gen->classobj = __Pyx_CyFunction_GetClassObj(__pyx_self);
    __Pyx_INCREF(gen->classobj);
    __Pyx_GIVEREF(gen->classobj);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_13generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3293, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_16generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__167 = PyTuple_Pack(14, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_fast, __pyx_n_s_close_workers, __pyx_n_s_parent, __pyx_n_s_preload, __pyx_n_s_worker, __pyx_n_s_i, __pyx_n_s_pc, __pyx_n_s_ext, __pyx_n_s_futures, __pyx_n_s_w, __pyx_n_s_future, __pyx_n_s_plugin); if (unlikely(!__pyx_tuple__167)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__167);
  __Pyx_GIVEREF(__pyx_tuple__167);
  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(4, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__167, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_close, 3293, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 3293, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_12close, 0, __pyx_n_s_Scheduler_close, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_t_12);
  PyList_Append(__pyx_t_13, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__168);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_close, __pyx_t_12) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__168 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__168)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__168);
  __Pyx_GIVEREF(__pyx_tuple__168);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_10_close {
  PyObject_HEAD
  PyObject *__pyx_v_close_workers;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_ext;
  PyObject *__pyx_v_fast;
  PyObject *__pyx_v_future;
  PyObject *__pyx_v_futures;
  long __pyx_v_i;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_pc;
  PyObject *__pyx_9genexpr33__pyx_v_plugin;
  PyObject *__pyx_v_preload;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_w;
  PyObject *__pyx_v_worker;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
  long __pyx_t_3;
};

 3294:         """Send cleanup signal to all coroutines then wait until finished
 3295: 
 3296:         See Also
 3297:         --------
 3298:         Scheduler.cleanup
 3299:         """
+3300:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3301:         if self.status in (Status.closing, Status.closed, Status.closing_gracefully):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_closing); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_closed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_closing_gracefully); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (__pyx_t_2 != 0);
  if (__pyx_t_5) {
/* … */
  }
+3302:             await self.finished()
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_finished); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L8_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3302, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3302, __pyx_L1_error)
      }
    }
+3303:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = NULL;
    goto __pyx_L0;
+3304:         self.status = Status.closing
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_closing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status, __pyx_t_3) < 0) __PYX_ERR(0, 3304, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3305: 
+3306:         logger.info("Scheduler closing...")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_kp_u_Scheduler_closing) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Scheduler_closing);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3307:         setproctitle("dask-scheduler [closing]")
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_setproctitle); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_kp_u_dask_scheduler_closing) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_dask_scheduler_closing);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3308: 
+3309:         for preload in self.preloads:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_preloads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3309, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3309, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3309, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3309, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3309, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3309, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_preload);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_preload, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3310:             await preload.teardown()
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_preload, __pyx_n_s_teardown); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_t_4);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 2;
      return __pyx_r;
      __pyx_L11_resume_from_await:;
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_4);
      __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3310, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3310, __pyx_L1_error)
      }
    }
 3311: 
+3312:         if close_workers:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_close_workers); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3312, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+3313:             await self.broadcast(msg={"op": "close_gracefully"}, nanny=True)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_broadcast); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_op, __pyx_n_u_close_gracefully) < 0) __PYX_ERR(0, 3313, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_msg, __pyx_t_1) < 0) __PYX_ERR(0, 3313, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nanny, Py_True) < 0) __PYX_ERR(0, 3313, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 3;
      return __pyx_r;
      __pyx_L13_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3313, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3313, __pyx_L1_error)
      }
    }
+3314:             for worker in parent._workers:
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_parent->_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_parent->_workers)) {
      __pyx_t_1 = __pyx_cur_scope->__pyx_v_parent->_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_parent->_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3314, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3314, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3314, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_1);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3314, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_worker);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_worker, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3315:                 self.worker_send(worker, {"op": "close"})
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_send); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_op, __pyx_n_u_close) < 0) __PYX_ERR(0, 3315, __pyx_L1_error)
      __pyx_t_9 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_cur_scope->__pyx_v_worker, __pyx_t_8};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_cur_scope->__pyx_v_worker, __pyx_t_8};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_9) {
          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
        }
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_cur_scope->__pyx_v_worker);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3316:             for i in range(20):  # wait a second for send signals to clear
    for (__pyx_t_12 = 0; __pyx_t_12 < 20; __pyx_t_12+=1) {
      __pyx_cur_scope->__pyx_v_i = __pyx_t_12;
+3317:                 if parent._workers:
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_parent->_workers); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3317, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
        goto __pyx_L18;
      }
+3318:                     await asyncio.sleep(0.05)
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3318, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sleep); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3318, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_float_0_05) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_float_0_05);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3318, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XGOTREF(__pyx_r);
        if (likely(__pyx_r)) {
          __pyx_cur_scope->__pyx_t_3 = __pyx_t_12;
          __Pyx_XGIVEREF(__pyx_r);
          __Pyx_RefNannyFinishContext();
          __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
          /* return from generator, awaiting value */
          __pyx_generator->resume_label = 4;
          return __pyx_r;
          __pyx_L19_resume_from_await:;
          __pyx_t_12 = __pyx_cur_scope->__pyx_t_3;
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3318, __pyx_L1_error)
        } else {
          PyObject* exc_type = __Pyx_PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
            else __PYX_ERR(0, 3318, __pyx_L1_error)
          }
        }
 3319:                 else:
+3320:                     break
      /*else*/ {
        goto __pyx_L17_break;
      }
      __pyx_L18:;
    }
    __pyx_L17_break:;
 3321: 
+3322:         await asyncio.gather(*[plugin.close() for plugin in self.plugins])
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gather); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_11 = __pyx_t_3; __Pyx_INCREF(__pyx_t_11); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3322, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_7 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3322, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_11))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3322, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3322, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3322, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3322, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_11);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3322, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr33__pyx_v_plugin);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr33__pyx_v_plugin, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr33__pyx_v_plugin, __pyx_n_s_close); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3322, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3322, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 3322, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } /* exit inner scope */
  __pyx_t_11 = PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 5;
    return __pyx_r;
    __pyx_L22_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3322, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 3322, __pyx_L1_error)
    }
  }
 3323: 
+3324:         for pc in self.periodic_callbacks.values():
  __pyx_t_6 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_periodic_callbacks); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  if (unlikely(__pyx_t_11 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 3324, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_dict_iterator(__pyx_t_11, 0, __pyx_n_s_values, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_4;
  __pyx_t_4 = 0;
  while (1) {
    __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_13, &__pyx_t_6, NULL, &__pyx_t_4, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_14 == 0)) break;
    if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 3324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pc);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pc, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
+3325:             pc.stop()
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_pc, __pyx_n_s_stop); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3325, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3325, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3326:         self.periodic_callbacks.clear()
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_periodic_callbacks); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_clear); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3327: 
+3328:         self.stop_services()
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stop_services); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3329: 
+3330:         for ext in parent._extensions.values():
  __pyx_t_13 = 0;
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_extensions == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 3330, __pyx_L1_error)
  }
  __pyx_t_11 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_extensions, 1, __pyx_n_s_values, (&__pyx_t_6), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_11;
  __pyx_t_11 = 0;
  while (1) {
    __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_13, NULL, &__pyx_t_11, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_14 == 0)) break;
    if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 3330, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ext);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ext, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_t_11 = 0;
+3331:             with suppress(AttributeError):
    /*with:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_suppress); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_builtin_AttributeError) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_builtin_AttributeError);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_t_11, __pyx_n_s_exit); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_11, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3331, __pyx_L27_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3331, __pyx_L27_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          goto __pyx_L40_try_end;
          __pyx_L33_error:;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 3331, __pyx_L35_except_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_8 = PyTuple_Pack(3, __pyx_t_11, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3331, __pyx_L35_except_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3331, __pyx_L35_except_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (__pyx_t_5 < 0) __PYX_ERR(0, 3331, __pyx_L35_except_error)
            __pyx_t_2 = ((!(__pyx_t_5 != 0)) != 0);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_4);
              __Pyx_XGIVEREF(__pyx_t_3);
              __Pyx_ErrRestoreWithState(__pyx_t_11, __pyx_t_4, __pyx_t_3);
              __pyx_t_11 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; 
              __PYX_ERR(0, 3331, __pyx_L35_except_error)
            }
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L34_exception_handled;
          }
          __pyx_L35_except_error:;
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          goto __pyx_L1_error;
          __pyx_L34_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __pyx_L40_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_15) {
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__12, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3331, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          }
          goto __pyx_L32;
        }
        __pyx_L32:;
      }
      goto __pyx_L44;
      __pyx_L27_error:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L1_error;
      __pyx_L44:;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3332:                 ext.teardown()
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_ext, __pyx_n_s_teardown); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3332, __pyx_L33_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_4, function);
              }
            }
            __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3332, __pyx_L33_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3333:         logger.info("Scheduler closing all comms")
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_kp_u_Scheduler_closing_all_comms) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Scheduler_closing_all_comms);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3334: 
+3335:         futures = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_futures = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3336:         for w, comm in list(self.stream_comms.items()):
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3336, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3336, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_11);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_20 = Py_TYPE(__pyx_t_8)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_20(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L47_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_11 = __pyx_t_20(__pyx_t_8); if (unlikely(!__pyx_t_11)) goto __pyx_L47_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_20(__pyx_t_8), 2) < 0) __PYX_ERR(0, 3336, __pyx_L1_error)
      __pyx_t_20 = NULL;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L48_unpacking_done;
      __pyx_L47_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_20 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3336, __pyx_L1_error)
      __pyx_L48_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_comm);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_comm, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_t_11 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3337:             if not comm.closed():
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_closed); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3337, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = ((!__pyx_t_2) != 0);
    if (__pyx_t_5) {
/* … */
    }
+3338:                 comm.send({"op": "close", "report": False})
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_send); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_n_u_close) < 0) __PYX_ERR(0, 3338, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 3338, __pyx_L1_error)
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3339:                 comm.send({"op": "close-stream"})
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_send); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_close_stream) < 0) __PYX_ERR(0, 3339, __pyx_L1_error)
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3340:             with suppress(AttributeError):
    /*with:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_suppress); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3340, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_4, __pyx_builtin_AttributeError) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_builtin_AttributeError);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3340, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3340, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3340, __pyx_L50_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_11 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3340, __pyx_L50_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          goto __pyx_L63_try_end;
          __pyx_L56_error:;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_11, &__pyx_t_4) < 0) __PYX_ERR(0, 3340, __pyx_L58_except_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_8 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3340, __pyx_L58_except_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3340, __pyx_L58_except_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (__pyx_t_5 < 0) __PYX_ERR(0, 3340, __pyx_L58_except_error)
            __pyx_t_2 = ((!(__pyx_t_5 != 0)) != 0);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_4);
              __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_11, __pyx_t_4);
              __pyx_t_3 = 0; __pyx_t_11 = 0; __pyx_t_4 = 0; 
              __PYX_ERR(0, 3340, __pyx_L58_except_error)
            }
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            goto __pyx_L57_exception_handled;
          }
          __pyx_L58_except_error:;
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16);
          goto __pyx_L1_error;
          __pyx_L57_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16);
          __pyx_L63_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_15) {
            __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__12, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3340, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          }
          goto __pyx_L55;
        }
        __pyx_L55:;
      }
      goto __pyx_L67;
      __pyx_L50_error:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L1_error;
      __pyx_L67:;
    }
+3341:                 futures.append(comm.close())
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3341, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_4 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
              __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
              if (likely(__pyx_t_4)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
                __Pyx_INCREF(__pyx_t_4);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_11, function);
              }
            }
            __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3341, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_21 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_futures, __pyx_t_3); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 3341, __pyx_L56_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3342: 
+3343:         for future in futures:  # TODO: do all at once
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_futures; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3343, __pyx_L1_error)
    #else
    __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_future);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_future, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3344:             await future
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_cur_scope->__pyx_v_future);
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 6;
      return __pyx_r;
      __pyx_L70_resume_from_await:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3344, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 3344, __pyx_L1_error)
      }
    }
 3345: 
+3346:         for comm in self.client_comms.values():
  __pyx_t_6 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(__pyx_t_4 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 3346, __pyx_L1_error)
  }
  __pyx_t_11 = __Pyx_dict_iterator(__pyx_t_4, 0, __pyx_n_s_values, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_11;
  __pyx_t_11 = 0;
  while (1) {
    __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_13, &__pyx_t_6, NULL, &__pyx_t_11, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_14 == 0)) break;
    if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_comm);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_comm, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_t_11 = 0;
+3347:             comm.abort()
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_abort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3348: 
+3349:         await self.rpc.close()
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 7;
    return __pyx_r;
    __pyx_L73_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3349, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 3349, __pyx_L1_error)
    }
  }
 3350: 
+3351:         self.status = Status.closed
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_closed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status, __pyx_t_4) < 0) __PYX_ERR(0, 3351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3352:         self.stop()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3353:         await super().close()
  __pyx_t_1 =  __pyx_generator->classobj;
  if (!__pyx_t_1) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 3353, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_cur_scope->__pyx_v_self);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 8;
    return __pyx_r;
    __pyx_L74_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3353, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 3353, __pyx_L1_error)
    }
  }
 3354: 
+3355:         setproctitle("dask-scheduler [closed]")
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_setproctitle); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_1, __pyx_kp_u_dask_scheduler_closed) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_kp_u_dask_scheduler_closed);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3356:         disable_gc_diagnosis()
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_disable_gc_diagnosis); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 3357: 
+3358:     async def close_worker(self, comm=None, worker=None, safe=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_15close_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_14close_worker[] = "Remove a worker from the cluster\n\n        This both removes the worker from our local state and also sends a\n        signal to the worker to shut down.  This works regardless of whether or\n        not the worker has a nanny process restarting it\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_15close_worker = {"close_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_15close_worker, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_14close_worker};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_15close_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_safe = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_worker,&__pyx_n_s_safe,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_safe);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "close_worker") < 0)) __PYX_ERR(0, 3358, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_safe = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close_worker", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3358, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.close_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_14close_worker(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_worker, __pyx_v_safe);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_14close_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_worker, PyObject *__pyx_v_safe) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_11_close_worker *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close_worker", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_11_close_worker *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_11_close_worker(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_11_close_worker, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_11_close_worker *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3358, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_worker = __pyx_v_worker;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
  __pyx_cur_scope->__pyx_v_safe = __pyx_v_safe;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_safe);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_safe);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_16generator3, __pyx_codeobj__55, (PyObject *) __pyx_cur_scope, __pyx_n_s_close_worker, __pyx_n_s_Scheduler_close_worker, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3358, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.close_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_16generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close_worker", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3358, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("close_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__169 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_worker, __pyx_n_s_safe, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_nanny_addr, __pyx_n_s_address); if (unlikely(!__pyx_tuple__169)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__169);
  __Pyx_GIVEREF(__pyx_tuple__169);
  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__169, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_close_worker, 3358, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 3358, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_15close_worker, 0, __pyx_n_s_Scheduler_close_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__170);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_close_worker, __pyx_t_12) < 0) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__170 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__170)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__170);
  __Pyx_GIVEREF(__pyx_tuple__170);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_11_close_worker {
  PyObject_HEAD
  PyObject *__pyx_v_address;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_nanny_addr;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_safe;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_worker;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};

 3359:         """Remove a worker from the cluster
 3360: 
 3361:         This both removes the worker from our local state and also sends a
 3362:         signal to the worker to shut down.  This works regardless of whether or
 3363:         not the worker has a nanny process restarting it
 3364:         """
+3365:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3366:         logger.info("Closing worker %s", worker)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Closing_worker_s, __pyx_cur_scope->__pyx_v_worker};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3366, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Closing_worker_s, __pyx_cur_scope->__pyx_v_worker};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3366, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Closing_worker_s);
    __Pyx_GIVEREF(__pyx_kp_u_Closing_worker_s);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Closing_worker_s);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_worker);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3367:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3367, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3367, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.close_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 3367, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_10 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3367, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3367, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(0, 3367, __pyx_L10_except_error)
          __pyx_t_13 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_13) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_1);
            __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 3367, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_6) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3367, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L20;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L1_error;
    __pyx_L20:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+3368:             self.log_event(worker, {"action": "close-worker"})
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3368, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3368, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_action, __pyx_kp_u_close_worker_2) < 0) __PYX_ERR(0, 3368, __pyx_L8_error)
          __pyx_t_2 = NULL;
          __pyx_t_4 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_4 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_worker, __pyx_t_5};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_worker, __pyx_t_5};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          {
            __pyx_t_10 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3368, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_10);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
            PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_worker);
            __Pyx_GIVEREF(__pyx_t_5);
            PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_t_5);
            __pyx_t_5 = 0;
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3369:             ws: WorkerState = parent._workers[worker]
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers, __pyx_cur_scope->__pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3369, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3369, __pyx_L8_error)
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
          __pyx_t_1 = 0;
+3370:             nanny_addr = ws._nanny
          __pyx_t_1 = __pyx_cur_scope->__pyx_v_ws->_nanny;
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_nanny_addr = ((PyObject*)__pyx_t_1);
          __pyx_t_1 = 0;
+3371:             address = nanny_addr or worker
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_nanny_addr); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3371, __pyx_L8_error)
          if (!__pyx_t_11) {
          } else {
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nanny_addr);
            __pyx_t_1 = __pyx_cur_scope->__pyx_v_nanny_addr;
            goto __pyx_L14_bool_binop_done;
          }
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
          __pyx_t_1 = __pyx_cur_scope->__pyx_v_worker;
          __pyx_L14_bool_binop_done:;
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_address = __pyx_t_1;
          __pyx_t_1 = 0;
 3372: 
+3373:             self.worker_send(worker, {"op": "close", "report": False})
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_send); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3373, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3373, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_op, __pyx_n_u_close) < 0) __PYX_ERR(0, 3373, __pyx_L8_error)
          if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 3373, __pyx_L8_error)
          __pyx_t_5 = NULL;
          __pyx_t_4 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_4 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_worker, __pyx_t_10};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_worker, __pyx_t_10};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          } else
          #endif
          {
            __pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3373, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (__pyx_t_5) {
              __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
            PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_worker);
            __Pyx_GIVEREF(__pyx_t_10);
            PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3374:             await self.remove_worker(address=worker, safe=safe)
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3374, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3374, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_worker) < 0) __PYX_ERR(0, 3374, __pyx_L8_error)
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_safe, __pyx_cur_scope->__pyx_v_safe) < 0) __PYX_ERR(0, 3374, __pyx_L8_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3374, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_6);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_6;
            __Pyx_XGIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
            __Pyx_XGIVEREF(__pyx_t_8);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
            __Pyx_XGIVEREF(__pyx_t_9);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 1;
            return __pyx_r;
            __pyx_L16_resume_from_await:;
            __pyx_t_6 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_6);
            __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_7);
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_8);
            __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_9);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3374, __pyx_L8_error)
          } else {
            PyObject* exc_type = __Pyx_PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
              else __PYX_ERR(0, 3374, __pyx_L8_error)
            }
          }
 3375: 
 3376:     ###########
 3377:     # Stimuli #
 3378:     ###########
 3379: 
+3380:     def heartbeat_worker(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_18heartbeat_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_18heartbeat_worker = {"heartbeat_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_18heartbeat_worker, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_18heartbeat_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_resolve_address = 0;
  PyObject *__pyx_v_now = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_v_host_info = 0;
  PyObject *__pyx_v_metrics = 0;
  PyObject *__pyx_v_executing = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heartbeat_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_address,&__pyx_n_s_resolve_address,&__pyx_n_s_now,&__pyx_n_s_resources,&__pyx_n_s_host_info,&__pyx_n_s_metrics,&__pyx_n_s_executing,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_17heartbeat_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_address, PyObject *__pyx_v_resolve_address, PyObject *__pyx_v_now, PyObject *__pyx_v_resources, PyObject *__pyx_v_host_info, PyObject *__pyx_v_metrics, PyObject *__pyx_v_executing) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_host = NULL;
  PyObject *__pyx_v_local_now = NULL;
  double __pyx_v_frac;
  PyObject *__pyx_v_other = NULL;
  PyObject *__pyx_v_bw = NULL;
  PyObject *__pyx_v_count = NULL;
  PyObject *__pyx_v_alpha = NULL;
  PyObject *__pyx_v_typ = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_delay = NULL;
  PyObject *__pyx_9genexpr34__pyx_v_key = NULL;
  PyObject *__pyx_9genexpr34__pyx_v_duration = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heartbeat_worker", 0);
  __Pyx_INCREF(__pyx_v_address);
  __Pyx_INCREF(__pyx_v_now);
  __Pyx_INCREF(__pyx_v_host_info);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.heartbeat_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_host);
  __Pyx_XDECREF(__pyx_v_local_now);
  __Pyx_XDECREF(__pyx_v_other);
  __Pyx_XDECREF(__pyx_v_bw);
  __Pyx_XDECREF(__pyx_v_count);
  __Pyx_XDECREF(__pyx_v_alpha);
  __Pyx_XDECREF(__pyx_v_typ);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_delay);
  __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_key);
  __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_duration);
  __Pyx_XDECREF(__pyx_v_address);
  __Pyx_XDECREF(__pyx_v_now);
  __Pyx_XDECREF(__pyx_v_host_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_21generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__171 = PyTuple_Pack(22, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_address, __pyx_n_s_resolve_address, __pyx_n_s_now, __pyx_n_s_resources, __pyx_n_s_host_info, __pyx_n_s_metrics, __pyx_n_s_executing, __pyx_n_s_parent, __pyx_n_s_host, __pyx_n_s_local_now, __pyx_n_s_frac, __pyx_n_s_other, __pyx_n_s_bw, __pyx_n_s_count, __pyx_n_s_alpha, __pyx_n_s_typ, __pyx_n_s_ws, __pyx_n_s_delay, __pyx_n_s_key, __pyx_n_s_duration); if (unlikely(!__pyx_tuple__171)) __PYX_ERR(0, 3380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__171);
  __Pyx_GIVEREF(__pyx_tuple__171);
  __pyx_codeobj__172 = (PyObject*)__Pyx_PyCode_New(9, 0, 22, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__171, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_heartbeat_worker, 3380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__172)) __PYX_ERR(0, 3380, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_18heartbeat_worker, 0, __pyx_n_s_Scheduler_heartbeat_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__172)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__173);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_heartbeat_worker, __pyx_t_12) < 0) __PYX_ERR(0, 3380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__173 = PyTuple_Pack(8, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__173)) __PYX_ERR(0, 3380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__173);
  __Pyx_GIVEREF(__pyx_tuple__173);
 3381:         self,
+3382:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+3383:         address=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+3384:         resolve_address=True,
    values[3] = ((PyObject *)((PyObject *)Py_True));
+3385:         now=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+3386:         resources=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+3387:         host_info=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+3388:         metrics=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+3389:         executing=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resolve_address);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_now);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_host_info);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_metrics);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_executing);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "heartbeat_worker") < 0)) __PYX_ERR(0, 3380, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_address = values[2];
    __pyx_v_resolve_address = values[3];
    __pyx_v_now = values[4];
    __pyx_v_resources = values[5];
    __pyx_v_host_info = values[6];
    __pyx_v_metrics = values[7];
    __pyx_v_executing = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("heartbeat_worker", 0, 1, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3380, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.heartbeat_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_17heartbeat_worker(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_address, __pyx_v_resolve_address, __pyx_v_now, __pyx_v_resources, __pyx_v_host_info, __pyx_v_metrics, __pyx_v_executing);
 3390:     ):
+3391:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3392:         address = self.coerce_address(address, resolve_address)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_address, __pyx_v_resolve_address};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3392, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_address, __pyx_v_resolve_address};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3392, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_address);
    __Pyx_GIVEREF(__pyx_v_address);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_address);
    __Pyx_INCREF(__pyx_v_resolve_address);
    __Pyx_GIVEREF(__pyx_v_resolve_address);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_resolve_address);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_address, __pyx_t_1);
  __pyx_t_1 = 0;
+3393:         address = normalize_address(address)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_normalize_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_address);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_address, __pyx_t_1);
  __pyx_t_1 = 0;
+3394:         if address not in parent._workers:
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_v_address, __pyx_v_parent->_workers, Py_NE)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3394, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
/* … */
  }
+3395:             return {"status": "missing"}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_status, __pyx_n_u_missing) < 0) __PYX_ERR(0, 3395, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 3396: 
+3397:         host = get_address_host(address)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_address);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_host = __pyx_t_1;
  __pyx_t_1 = 0;
+3398:         local_now = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_local_now = __pyx_t_1;
  __pyx_t_1 = 0;
+3399:         now = now or time()
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_now); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3399, __pyx_L1_error)
  if (!__pyx_t_7) {
  } else {
    __Pyx_INCREF(__pyx_v_now);
    __pyx_t_1 = __pyx_v_now;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_now, __pyx_t_1);
  __pyx_t_1 = 0;
+3400:         assert metrics
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_metrics); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3400, __pyx_L1_error)
    if (unlikely(!__pyx_t_7)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 3400, __pyx_L1_error)
    }
  }
  #endif
+3401:         host_info = host_info or {}
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_host_info); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3401, __pyx_L1_error)
  if (!__pyx_t_7) {
  } else {
    __Pyx_INCREF(__pyx_v_host_info);
    __pyx_t_1 = __pyx_v_host_info;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L6_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_host_info, __pyx_t_1);
  __pyx_t_1 = 0;
 3402: 
+3403:         parent._host_info[host]["last-seen"] = local_now
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_parent->_host_info, __pyx_v_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_kp_u_last_seen_2, __pyx_v_local_now) < 0)) __PYX_ERR(0, 3403, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3404:         frac = 1 / len(parent._workers)
  __pyx_t_1 = __pyx_v_parent->_workers;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_8 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3404, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_8 == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 3404, __pyx_L1_error)
  }
  __pyx_v_frac = (1.0 / ((double)__pyx_t_8));
+3405:         parent._bandwidth = (
  __pyx_v_parent->_bandwidth = __pyx_t_9;
+3406:             parent._bandwidth * (1 - frac) + metrics["bandwidth"]["total"] * frac
  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_parent->_bandwidth * (1.0 - __pyx_v_frac))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_metrics, __pyx_n_u_bandwidth); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_n_u_total); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_frac); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3407:         )
+3408:         for other, (bw, count) in metrics["bandwidth"]["workers"].items():
  __pyx_t_8 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_metrics, __pyx_n_u_bandwidth); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_n_u_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3408, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_dict_iterator(__pyx_t_1, 0, __pyx_n_s_items, (&__pyx_t_10), (&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_10, &__pyx_t_8, &__pyx_t_3, &__pyx_t_1, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 3408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_other, __pyx_t_3);
    __pyx_t_3 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3408, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_3)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_5 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_5)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3408, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_bw, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_5);
    __pyx_t_5 = 0;
+3409:             if (address, other) not in self.bandwidth_workers:
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_address);
    __Pyx_GIVEREF(__pyx_v_address);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_address);
    __Pyx_INCREF(__pyx_v_other);
    __Pyx_GIVEREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_other);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_5, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3409, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = (__pyx_t_7 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L12;
    }
+3410:                 self.bandwidth_workers[address, other] = bw / count
      __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_v_bw, __pyx_v_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_address);
      __Pyx_GIVEREF(__pyx_v_address);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_address);
      __Pyx_INCREF(__pyx_v_other);
      __Pyx_GIVEREF(__pyx_v_other);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_other);
      if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 3410, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3411:             else:
+3412:                 alpha = (1 - frac) ** count
    /*else*/ {
      __pyx_t_5 = PyFloat_FromDouble((1.0 - __pyx_v_frac)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3412, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyNumber_Power(__pyx_t_5, __pyx_v_count, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3412, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_alpha, __pyx_t_3);
      __pyx_t_3 = 0;
+3413:                 self.bandwidth_workers[address, other] = self.bandwidth_workers[
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
/* … */
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_address);
      __Pyx_GIVEREF(__pyx_v_address);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_address);
      __Pyx_INCREF(__pyx_v_other);
      __Pyx_GIVEREF(__pyx_v_other);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_other);
/* … */
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_address);
      __Pyx_GIVEREF(__pyx_v_address);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_address);
      __Pyx_INCREF(__pyx_v_other);
      __Pyx_GIVEREF(__pyx_v_other);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_other);
      if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 3413, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __pyx_L12:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3414:                     address, other
+3415:                 ] * alpha + bw * (1 - alpha)
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_v_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_v_alpha, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PyNumber_Multiply(__pyx_v_bw, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3416:         for typ, (bw, count) in metrics["bandwidth"]["types"].items():
  __pyx_t_10 = 0;
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_metrics, __pyx_n_u_bandwidth); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3416, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_10, &__pyx_t_1, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 3416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_typ, __pyx_t_1);
    __pyx_t_1 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
      PyObject* sequence = __pyx_t_5;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3416, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_12 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
      index = 0; __pyx_t_1 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_1)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      index = 1; __pyx_t_3 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_3)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 3416, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L16_unpacking_done;
      __pyx_L15_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3416, __pyx_L1_error)
      __pyx_L16_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_bw, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_3);
    __pyx_t_3 = 0;
+3417:             if typ not in self.bandwidth_types:
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_v_typ, __pyx_t_5, Py_NE)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3417, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = (__pyx_t_6 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L17;
    }
+3418:                 self.bandwidth_types[typ] = bw / count
      __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_v_bw, __pyx_v_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3418, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3418, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_v_typ, __pyx_t_5) < 0)) __PYX_ERR(0, 3418, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3419:             else:
+3420:                 alpha = (1 - frac) ** count
    /*else*/ {
      __pyx_t_5 = PyFloat_FromDouble((1.0 - __pyx_v_frac)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3420, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyNumber_Power(__pyx_t_5, __pyx_v_count, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3420, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_alpha, __pyx_t_3);
      __pyx_t_3 = 0;
+3421:                 self.bandwidth_types[typ] = self.bandwidth_types[typ] * alpha + bw * (
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_typ); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_v_alpha); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_t_1 = PyNumber_Multiply(__pyx_v_bw, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bandwidth_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_typ, __pyx_t_5) < 0)) __PYX_ERR(0, 3421, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L17:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3422:                     1 - alpha
      __pyx_t_5 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_v_alpha, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3422, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
 3423:                 )
 3424: 
+3425:         ws: WorkerState = parent._workers[address]
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_parent->_workers, __pyx_v_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3425, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
  __pyx_t_2 = 0;
 3426: 
+3427:         ws._last_seen = time()
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3427, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ws->_last_seen = __pyx_t_9;
 3428: 
+3429:         if executing is not None:
  __pyx_t_7 = (__pyx_v_executing != Py_None);
  __pyx_t_6 = (__pyx_t_7 != 0);
  if (__pyx_t_6) {
/* … */
  }
+3430:             ws._executing = {
    { /* enter inner scope */
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3430, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_ws->_executing);
    __Pyx_DECREF(__pyx_v_ws->_executing);
    __pyx_v_ws->_executing = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+3431:                 parent._tasks[key]: duration for key, duration in executing.items()
      __pyx_t_8 = 0;
      if (unlikely(__pyx_v_executing == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 3431, __pyx_L21_error)
      }
      __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_executing, 0, __pyx_n_s_items, (&__pyx_t_10), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3431, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_5);
      __pyx_t_5 = __pyx_t_1;
      __pyx_t_1 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_10, &__pyx_t_8, &__pyx_t_1, &__pyx_t_3, NULL, __pyx_t_4);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 3431, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_9genexpr34__pyx_v_key, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_XDECREF_SET(__pyx_9genexpr34__pyx_v_duration, __pyx_t_3);
        __pyx_t_3 = 0;
        if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 3431, __pyx_L21_error)
        }
        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_9genexpr34__pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3431, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_t_3, (PyObject*)__pyx_9genexpr34__pyx_v_duration))) __PYX_ERR(0, 3431, __pyx_L21_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_duration); __pyx_9genexpr34__pyx_v_duration = 0;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_key); __pyx_9genexpr34__pyx_v_key = 0;
      goto __pyx_L24_exit_scope;
      __pyx_L21_error:;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_duration); __pyx_9genexpr34__pyx_v_duration = 0;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_key); __pyx_9genexpr34__pyx_v_key = 0;
      goto __pyx_L1_error;
      __pyx_L24_exit_scope:;
    } /* exit inner scope */
 3432:             }
 3433: 
+3434:         if metrics:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_metrics); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3434, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+3435:             ws._metrics = metrics
    if (!(likely(PyDict_CheckExact(__pyx_v_metrics))||((__pyx_v_metrics) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_metrics)->tp_name), 0))) __PYX_ERR(0, 3435, __pyx_L1_error)
    __pyx_t_2 = __pyx_v_metrics;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_ws->_metrics);
    __Pyx_DECREF(__pyx_v_ws->_metrics);
    __pyx_v_ws->_metrics = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 3436: 
+3437:         if host_info:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_host_info); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3437, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+3438:             parent._host_info[host].update(host_info)
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_parent->_host_info, __pyx_v_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_host_info) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_host_info);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3439: 
+3440:         delay = time() - now
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_delay = __pyx_t_3;
  __pyx_t_3 = 0;
+3441:         ws._time_delay = delay
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_delay); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3441, __pyx_L1_error)
  __pyx_v_ws->_time_delay = __pyx_t_9;
 3442: 
+3443:         if resources:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_resources); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3443, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+3444:             self.add_resources(worker=address, resources=resources)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_resources); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_worker, __pyx_v_address) < 0) __PYX_ERR(0, 3444, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_resources, __pyx_v_resources) < 0) __PYX_ERR(0, 3444, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3445: 
+3446:         self.log_event(address, merge({"action": "heartbeat"}, metrics))
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_merge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_action, __pyx_n_u_heartbeat) < 0) __PYX_ERR(0, 3446, __pyx_L1_error)
  __pyx_t_14 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_12, __pyx_v_metrics};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_12, __pyx_v_metrics};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_4, __pyx_t_12);
    __Pyx_INCREF(__pyx_v_metrics);
    __Pyx_GIVEREF(__pyx_v_metrics);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_4, __pyx_v_metrics);
    __pyx_t_12 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_address, __pyx_t_3};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_address, __pyx_t_3};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_address);
    __Pyx_GIVEREF(__pyx_v_address);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_4, __pyx_v_address);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_4, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3447: 
+3448:         return {
  __Pyx_XDECREF(__pyx_r);
+3449:             "status": "OK",
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_status, __pyx_n_u_OK) < 0) __PYX_ERR(0, 3449, __pyx_L1_error)
+3450:             "time": time(),
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_time); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_time, __pyx_t_2) < 0) __PYX_ERR(0, 3449, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3451:             "heartbeat-interval": heartbeat_interval(len(parent._workers)),
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_heartbeat_interval_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_3 = __pyx_v_parent->_workers;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_10 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3451, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_u_heartbeat_interval, __pyx_t_2) < 0) __PYX_ERR(0, 3449, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 3452:         }
 3453: 
+3454:     async def add_worker(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_20add_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_19add_worker[] = " Add a new worker to the cluster ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_20add_worker = {"add_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_20add_worker, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_19add_worker};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_20add_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_address = 0;
  CYTHON_UNUSED PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_nthreads = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_resolve_address = 0;
  PyObject *__pyx_v_nbytes = 0;
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_now = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_v_host_info = 0;
  PyObject *__pyx_v_memory_limit = 0;
  PyObject *__pyx_v_metrics = 0;
  PyObject *__pyx_v_pid = 0;
  PyObject *__pyx_v_services = 0;
  PyObject *__pyx_v_local_directory = 0;
  PyObject *__pyx_v_versions = 0;
  PyObject *__pyx_v_nanny = 0;
  PyObject *__pyx_v_extra = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_address,&__pyx_n_s_keys,&__pyx_n_s_nthreads,&__pyx_n_s_name,&__pyx_n_s_resolve_address,&__pyx_n_s_nbytes,&__pyx_n_s_types,&__pyx_n_s_now,&__pyx_n_s_resources,&__pyx_n_s_host_info,&__pyx_n_s_memory_limit,&__pyx_n_s_metrics,&__pyx_n_s_pid,&__pyx_n_s_services,&__pyx_n_s_local_directory,&__pyx_n_s_versions,&__pyx_n_s_nanny,&__pyx_n_s_extra,0};
    PyObject* values[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_19add_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, PyObject *__pyx_v_address, CYTHON_UNUSED PyObject *__pyx_v_keys, PyObject *__pyx_v_nthreads, PyObject *__pyx_v_name, PyObject *__pyx_v_resolve_address, PyObject *__pyx_v_nbytes, PyObject *__pyx_v_types, PyObject *__pyx_v_now, PyObject *__pyx_v_resources, PyObject *__pyx_v_host_info, PyObject *__pyx_v_memory_limit, PyObject *__pyx_v_metrics, PyObject *__pyx_v_pid, PyObject *__pyx_v_services, PyObject *__pyx_v_local_directory, PyObject *__pyx_v_versions, PyObject *__pyx_v_nanny, PyObject *__pyx_v_extra) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_12_add_worker *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_worker", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_12_add_worker *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_12_add_worker(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_12_add_worker, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_12_add_worker *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3454, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_address = __pyx_v_address;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  __pyx_cur_scope->__pyx_v_nthreads = __pyx_v_nthreads;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nthreads);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nthreads);
  __pyx_cur_scope->__pyx_v_name = __pyx_v_name;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
  __pyx_cur_scope->__pyx_v_resolve_address = __pyx_v_resolve_address;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resolve_address);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resolve_address);
  __pyx_cur_scope->__pyx_v_nbytes = __pyx_v_nbytes;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nbytes);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nbytes);
  __pyx_cur_scope->__pyx_v_types = __pyx_v_types;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_types);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_types);
  __pyx_cur_scope->__pyx_v_now = __pyx_v_now;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_now);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_now);
  __pyx_cur_scope->__pyx_v_resources = __pyx_v_resources;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resources);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resources);
  __pyx_cur_scope->__pyx_v_host_info = __pyx_v_host_info;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_host_info);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_host_info);
  __pyx_cur_scope->__pyx_v_memory_limit = __pyx_v_memory_limit;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_memory_limit);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_memory_limit);
  __pyx_cur_scope->__pyx_v_metrics = __pyx_v_metrics;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_metrics);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_metrics);
  __pyx_cur_scope->__pyx_v_pid = __pyx_v_pid;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pid);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pid);
  __pyx_cur_scope->__pyx_v_services = __pyx_v_services;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_services);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_services);
  __pyx_cur_scope->__pyx_v_local_directory = __pyx_v_local_directory;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_local_directory);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_local_directory);
  __pyx_cur_scope->__pyx_v_versions = __pyx_v_versions;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_versions);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_versions);
  __pyx_cur_scope->__pyx_v_nanny = __pyx_v_nanny;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nanny);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nanny);
  __pyx_cur_scope->__pyx_v_extra = __pyx_v_extra;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_extra);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_extra);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_21generator4, __pyx_codeobj__56, (PyObject *) __pyx_cur_scope, __pyx_n_s_add_worker, __pyx_n_s_Scheduler_add_worker, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_21generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_worker", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3454, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_32);
  __Pyx_XDECREF(__pyx_t_33);
  __Pyx_AddTraceback("add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__174 = PyTuple_Pack(39, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_address, __pyx_n_s_keys, __pyx_n_s_nthreads, __pyx_n_s_name, __pyx_n_s_resolve_address, __pyx_n_s_nbytes, __pyx_n_s_types, __pyx_n_s_now, __pyx_n_s_resources, __pyx_n_s_host_info, __pyx_n_s_memory_limit, __pyx_n_s_metrics, __pyx_n_s_pid, __pyx_n_s_services, __pyx_n_s_local_directory, __pyx_n_s_versions, __pyx_n_s_nanny, __pyx_n_s_extra, __pyx_n_s_parent, __pyx_n_s_host, __pyx_n_s_ws, __pyx_n_s_msg, __pyx_n_s_response, __pyx_n_s_plugin, __pyx_n_s_result, __pyx_n_s_e, __pyx_n_s_recommendations, __pyx_n_s_key, __pyx_n_s_tasks, __pyx_n_s_ts, __pyx_n_s_valid, __pyx_n_s_cs, __pyx_n_s_version_warning, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_c, __pyx_n_s_cs); if (unlikely(!__pyx_tuple__174)) __PYX_ERR(0, 3454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__174);
  __Pyx_GIVEREF(__pyx_tuple__174);
  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(20, 0, 39, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_worker, 3454, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 3454, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_20add_worker, 0, __pyx_n_s_Scheduler_add_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__175);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_worker, __pyx_t_12) < 0) __PYX_ERR(0, 3454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__175 = PyTuple_Pack(19, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_empty_tuple), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__175)) __PYX_ERR(0, 3454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__175);
  __Pyx_GIVEREF(__pyx_tuple__175);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_12_add_worker {
  PyObject_HEAD
  PyObject *__pyx_v_address;
  PyObject *__pyx_9genexpr36__pyx_v_c;
  PyObject *__pyx_v_comm;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_9genexpr36__pyx_v_cs;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs;
  PyObject *__pyx_v_e;
  PyObject *__pyx_v_extra;
  PyObject *__pyx_v_host;
  PyObject *__pyx_v_host_info;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_local_directory;
  PyObject *__pyx_v_memory_limit;
  PyObject *__pyx_v_metrics;
  PyObject *__pyx_v_msg;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_nanny;
  PyObject *__pyx_v_nbytes;
  PyObject *__pyx_v_now;
  PyObject *__pyx_v_nthreads;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_pid;
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_recommendations;
  PyObject *__pyx_v_resolve_address;
  PyObject *__pyx_v_resources;
  PyObject *__pyx_v_response;
  PyObject *__pyx_v_result;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_services;
  PyObject *__pyx_v_tasks;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_v_types;
  PyObject *__pyx_v_valid;
  PyObject *__pyx_v_version_warning;
  PyObject *__pyx_v_versions;
  PyObject *__pyx_9genexpr35__pyx_v_w;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr35__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  PyObject *__pyx_t_9;
};

 3455:         self,
+3456:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+3457:         address=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+3458:         keys=(),
    values[3] = ((PyObject *)((PyObject*)__pyx_empty_tuple));
+3459:         nthreads=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+3460:         name=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+3461:         resolve_address=True,
    values[6] = ((PyObject *)((PyObject *)Py_True));
+3462:         nbytes=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+3463:         types=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
+3464:         now=None,
    values[9] = ((PyObject *)((PyObject *)Py_None));
+3465:         resources=None,
    values[10] = ((PyObject *)((PyObject *)Py_None));
+3466:         host_info=None,
    values[11] = ((PyObject *)((PyObject *)Py_None));
+3467:         memory_limit=None,
    values[12] = ((PyObject *)((PyObject *)Py_None));
+3468:         metrics=None,
    values[13] = ((PyObject *)((PyObject *)Py_None));
    values[14] = ((PyObject *)((PyObject *)__pyx_int_0));
 3469:         pid=0,
+3470:         services=None,
    values[15] = ((PyObject *)((PyObject *)Py_None));
+3471:         local_directory=None,
    values[16] = ((PyObject *)((PyObject *)Py_None));
+3472:         versions=None,
    values[17] = ((PyObject *)((PyObject *)Py_None));
+3473:         nanny=None,
    values[18] = ((PyObject *)((PyObject *)Py_None));
+3474:         extra=None,
    values[19] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nthreads);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resolve_address);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nbytes);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_types);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_now);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_host_info);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory_limit);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_metrics);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pid);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_services);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_directory);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_versions);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nanny);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extra);
          if (value) { values[19] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_worker") < 0)) __PYX_ERR(0, 3454, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_address = values[2];
    __pyx_v_keys = values[3];
    __pyx_v_nthreads = values[4];
    __pyx_v_name = values[5];
    __pyx_v_resolve_address = values[6];
    __pyx_v_nbytes = values[7];
    __pyx_v_types = values[8];
    __pyx_v_now = values[9];
    __pyx_v_resources = values[10];
    __pyx_v_host_info = values[11];
    __pyx_v_memory_limit = values[12];
    __pyx_v_metrics = values[13];
    __pyx_v_pid = values[14];
    __pyx_v_services = values[15];
    __pyx_v_local_directory = values[16];
    __pyx_v_versions = values[17];
    __pyx_v_nanny = values[18];
    __pyx_v_extra = values[19];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_worker", 0, 1, 20, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3454, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_19add_worker(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_address, __pyx_v_keys, __pyx_v_nthreads, __pyx_v_name, __pyx_v_resolve_address, __pyx_v_nbytes, __pyx_v_types, __pyx_v_now, __pyx_v_resources, __pyx_v_host_info, __pyx_v_memory_limit, __pyx_v_metrics, __pyx_v_pid, __pyx_v_services, __pyx_v_local_directory, __pyx_v_versions, __pyx_v_nanny, __pyx_v_extra);
 3475:     ):
 3476:         """ Add a new worker to the cluster """
+3477:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3478:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3478, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
        __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_18) < 0) __PYX_ERR(0, 3478, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_2, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3478, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3478, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(0, 3478, __pyx_L10_except_error)
          __pyx_t_10 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_10) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_2, __pyx_t_18);
            __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_18 = 0; 
            __PYX_ERR(0, 3478, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3478, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_15);
        __pyx_t_28 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 3478, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_27);
          __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        }
        __pyx_r = __pyx_t_28;
        __pyx_t_28 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L70;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L70:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+3479:             address = self.coerce_address(address, resolve_address)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3479, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = NULL;
          __pyx_t_9 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_9 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_address, __pyx_cur_scope->__pyx_v_resolve_address};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3479, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_address, __pyx_cur_scope->__pyx_v_resolve_address};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3479, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3479, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (__pyx_t_3) {
              __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
            PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_cur_scope->__pyx_v_address);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resolve_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resolve_address);
            PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_cur_scope->__pyx_v_resolve_address);
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3479, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_address);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_address, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_t_1 = 0;
+3480:             address = normalize_address(address)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_normalize_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3480, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3480, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_address);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_address, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_t_1 = 0;
+3481:             host = get_address_host(address)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3481, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3481, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_host = __pyx_t_1;
          __pyx_t_1 = 0;
 3482: 
+3483:             ws: WorkerState = parent._workers.get(address)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_parent->_workers, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3483, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3483, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3483, __pyx_L8_error)
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
          __pyx_t_1 = 0;
+3484:             if ws is not None:
          __pyx_t_10 = (((PyObject *)__pyx_cur_scope->__pyx_v_ws) != Py_None);
          __pyx_t_11 = (__pyx_t_10 != 0);
          if (unlikely(__pyx_t_11)) {
/* … */
          }
+3485:                 raise ValueError("Worker already exists %s" % ws)
            __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Worker_already_exists_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3485, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3485, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_Raise(__pyx_t_2, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __PYX_ERR(0, 3485, __pyx_L8_error)
 3486: 
+3487:             if name in parent._aliases:
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_aliases == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 3487, __pyx_L8_error)
          }
          __pyx_t_11 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_v_name, __pyx_cur_scope->__pyx_v_parent->_aliases, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3487, __pyx_L8_error)
          __pyx_t_10 = (__pyx_t_11 != 0);
          if (__pyx_t_10) {
/* … */
          }
+3488:                 logger.warning(
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3488, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_warning); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3488, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3489:                     "Worker tried to connect with a duplicate name: %s", name
            __pyx_t_1 = NULL;
            __pyx_t_9 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
                __pyx_t_9 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Worker_tried_to_connect_with_a_d, __pyx_cur_scope->__pyx_v_name};
              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3488, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_GOTREF(__pyx_t_2);
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Worker_tried_to_connect_with_a_d, __pyx_cur_scope->__pyx_v_name};
              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3488, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_GOTREF(__pyx_t_2);
            } else
            #endif
            {
              __pyx_t_3 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3488, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (__pyx_t_1) {
                __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
              }
              __Pyx_INCREF(__pyx_kp_u_Worker_tried_to_connect_with_a_d);
              __Pyx_GIVEREF(__pyx_kp_u_Worker_tried_to_connect_with_a_d);
              PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_kp_u_Worker_tried_to_connect_with_a_d);
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
              PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_cur_scope->__pyx_v_name);
              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3488, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3490:                 )
 3491:                 msg = {
+3492:                     "status": "error",
            __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3492, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_status, __pyx_n_u_error) < 0) __PYX_ERR(0, 3492, __pyx_L8_error)
+3493:                     "message": "name taken, %s" % name,
            __pyx_t_5 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_name_taken_s, __pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3493, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_message, __pyx_t_5) < 0) __PYX_ERR(0, 3492, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3494:                     "time": time(),
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3494, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_1 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3494, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_time, __pyx_t_5) < 0) __PYX_ERR(0, 3492, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_cur_scope->__pyx_v_msg = ((PyObject*)__pyx_t_2);
            __pyx_t_2 = 0;
 3495:                 }
+3496:                 if comm:
            __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_comm); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3496, __pyx_L8_error)
            if (__pyx_t_10) {
/* … */
            }
+3497:                     await comm.write(msg)
              __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3497, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_3 = NULL;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
                if (likely(__pyx_t_3)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                  __Pyx_INCREF(__pyx_t_3);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_5, function);
                }
              }
              __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_cur_scope->__pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_msg);
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3497, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_r);
              if (likely(__pyx_r)) {
                __Pyx_XGIVEREF(__pyx_t_4);
                __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                __Pyx_XGIVEREF(__pyx_t_6);
                __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                __Pyx_XGIVEREF(__pyx_t_7);
                __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                __Pyx_XGIVEREF(__pyx_t_8);
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                __Pyx_XGIVEREF(__pyx_r);
                __Pyx_RefNannyFinishContext();
                __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                /* return from generator, awaiting value */
                __pyx_generator->resume_label = 1;
                return __pyx_r;
                __pyx_L17_resume_from_await:;
                __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                __pyx_cur_scope->__pyx_t_0 = 0;
                __Pyx_XGOTREF(__pyx_t_4);
                __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                __pyx_cur_scope->__pyx_t_1 = 0;
                __Pyx_XGOTREF(__pyx_t_6);
                __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                __pyx_cur_scope->__pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_t_7);
                __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                __pyx_cur_scope->__pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_t_8);
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3497, __pyx_L8_error)
              } else {
                PyObject* exc_type = __Pyx_PyErr_Occurred();
                if (exc_type) {
                  if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                  else __PYX_ERR(0, 3497, __pyx_L8_error)
                }
              }
+3498:                 return
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = NULL;
            goto __pyx_L12_try_return;
 3499: 
+3500:             parent._workers[address] = ws = WorkerState(
          __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11distributed_9scheduler_WorkerState), __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3500, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(__pyx_cur_scope->__pyx_v_parent->_workers, __pyx_cur_scope->__pyx_v_address, __pyx_t_5) < 0)) __PYX_ERR(0, 3500, __pyx_L8_error)
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_GOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
          __Pyx_GIVEREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3501:                 address=address,
          __pyx_t_2 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3501, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3502:                 pid=pid,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pid, __pyx_cur_scope->__pyx_v_pid) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3503:                 nthreads=nthreads,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nthreads, __pyx_cur_scope->__pyx_v_nthreads) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3504:                 memory_limit=memory_limit or 0,
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_memory_limit); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3504, __pyx_L8_error)
          if (!__pyx_t_10) {
          } else {
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_memory_limit);
            __pyx_t_5 = __pyx_cur_scope->__pyx_v_memory_limit;
            goto __pyx_L18_bool_binop_done;
          }
          __pyx_t_3 = __Pyx_PyInt_From_long(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3504, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = __pyx_t_3;
          __pyx_t_3 = 0;
          __pyx_L18_bool_binop_done:;
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_memory_limit, __pyx_t_5) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3505:                 name=name,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_name, __pyx_cur_scope->__pyx_v_name) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3506:                 local_directory=local_directory,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_local_directory, __pyx_cur_scope->__pyx_v_local_directory) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3507:                 services=services,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_services, __pyx_cur_scope->__pyx_v_services) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3508:                 versions=versions,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_versions, __pyx_cur_scope->__pyx_v_versions) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3509:                 nanny=nanny,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nanny, __pyx_cur_scope->__pyx_v_nanny) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
+3510:                 extra=extra,
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_extra, __pyx_cur_scope->__pyx_v_extra) < 0) __PYX_ERR(0, 3501, __pyx_L8_error)
 3511:             )
 3512: 
+3513:             if "addresses" not in parent._host_info[host]:
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3513, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_addresses, __pyx_t_5, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3513, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_11 = (__pyx_t_10 != 0);
          if (__pyx_t_11) {
/* … */
          }
+3514:                 parent._host_info[host].update({"addresses": set(), "nthreads": 0})
            __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_addresses, __pyx_t_1) < 0) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_nthreads, __pyx_int_0) < 0) __PYX_ERR(0, 3514, __pyx_L8_error)
            __pyx_t_1 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3514, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3515: 
+3516:             parent._host_info[host]["addresses"].add(address)
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3516, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_n_u_addresses); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3516, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3516, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3516, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3517:             parent._host_info[host]["nthreads"] += nthreads
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3517, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_n_u_nthreads);
          __pyx_t_12 = __pyx_n_u_nthreads;
          __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3517, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_cur_scope->__pyx_v_nthreads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3517, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(PyObject_SetItem(__pyx_t_5, __pyx_t_12, __pyx_t_2) < 0)) __PYX_ERR(0, 3517, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3518: 
+3519:             parent._total_nthreads += nthreads
          __pyx_t_5 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_parent->_total_nthreads); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3519, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_cur_scope->__pyx_v_nthreads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3519, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3519, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_cur_scope->__pyx_v_parent->_total_nthreads = __pyx_t_13;
+3520:             parent._aliases[name] = address
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_aliases == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 3520, __pyx_L8_error)
          }
          if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_parent->_aliases, __pyx_cur_scope->__pyx_v_name, __pyx_cur_scope->__pyx_v_address) < 0)) __PYX_ERR(0, 3520, __pyx_L8_error)
 3521: 
+3522:             response = self.heartbeat_worker(
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_heartbeat_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3522, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
/* … */
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3522, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GIVEREF(__pyx_t_3);
          __pyx_cur_scope->__pyx_v_response = __pyx_t_3;
          __pyx_t_3 = 0;
+3523:                 address=address,
          __pyx_t_5 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3523, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
+3524:                 resolve_address=resolve_address,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_resolve_address, __pyx_cur_scope->__pyx_v_resolve_address) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
+3525:                 now=now,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_now, __pyx_cur_scope->__pyx_v_now) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
+3526:                 resources=resources,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_resources, __pyx_cur_scope->__pyx_v_resources) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
+3527:                 host_info=host_info,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_host_info, __pyx_cur_scope->__pyx_v_host_info) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
+3528:                 metrics=metrics,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_metrics, __pyx_cur_scope->__pyx_v_metrics) < 0) __PYX_ERR(0, 3523, __pyx_L8_error)
 3529:             )
 3530: 
 3531:             # Do not need to adjust parent._total_occupancy as self.occupancy[ws] cannot exist before this.
+3532:             self.check_idle_saturated(ws)
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_check_idle_saturated); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3532, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_cur_scope->__pyx_v_ws));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3532, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3533: 
 3534:             # for key in keys:  # TODO
 3535:             #     self.mark_key_in_memory(key, [address])
 3536: 
+3537:             self.stream_comms[address] = BatchedSend(interval="5ms", loop=self.loop)
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BatchedSend); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_interval, __pyx_kp_u_5ms) < 0) __PYX_ERR(0, 3537, __pyx_L8_error)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_loop, __pyx_t_2) < 0) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(PyObject_SetItem(__pyx_t_5, __pyx_cur_scope->__pyx_v_address, __pyx_t_2) < 0)) __PYX_ERR(0, 3537, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3538: 
+3539:             if ws._nthreads > len(ws._processing):
          __pyx_t_2 = __pyx_cur_scope->__pyx_v_ws->_processing;
          __Pyx_INCREF(__pyx_t_2);
          if (unlikely(__pyx_t_2 == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 3539, __pyx_L8_error)
          }
          __pyx_t_13 = PyDict_Size(__pyx_t_2); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3539, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_11 = ((__pyx_cur_scope->__pyx_v_ws->_nthreads > __pyx_t_13) != 0);
          if (__pyx_t_11) {
/* … */
          }
+3540:                 parent._idle[ws._address] = ws
            if (unlikely(PyObject_SetItem(__pyx_cur_scope->__pyx_v_parent->_idle, __pyx_cur_scope->__pyx_v_ws->_address, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)) < 0)) __PYX_ERR(0, 3540, __pyx_L8_error)
 3541: 
+3542:             for plugin in self.plugins[:]:
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3542, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3542, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
            __pyx_t_2 = __pyx_t_5; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
            __pyx_t_14 = NULL;
          } else {
            __pyx_t_13 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3542, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_14 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3542, __pyx_L8_error)
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          for (;;) {
            if (likely(!__pyx_t_14)) {
              if (likely(PyList_CheckExact(__pyx_t_2))) {
                if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 3542, __pyx_L8_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3542, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              } else {
                if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 3542, __pyx_L8_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3542, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              }
            } else {
              __pyx_t_5 = __pyx_t_14(__pyx_t_2);
              if (unlikely(!__pyx_t_5)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 3542, __pyx_L8_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_5);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_plugin);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_5);
            __pyx_t_5 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_slice__57 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__57)) __PYX_ERR(0, 3542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__57);
  __Pyx_GIVEREF(__pyx_slice__57);
+3543:                 try:
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              goto __pyx_L31_try_end;
              __pyx_L24_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              goto __pyx_L8_error;
              __pyx_L25_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              __pyx_L31_try_end:;
            }
+3544:                     result = plugin.add_worker(scheduler=self, worker=address)
                __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_plugin, __pyx_n_s_add_worker); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3544, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3544, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_scheduler, __pyx_cur_scope->__pyx_v_self) < 0) __PYX_ERR(0, 3544, __pyx_L24_error)
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3544, __pyx_L24_error)
                __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3544, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_result);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_result, __pyx_t_1);
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;
+3545:                     if inspect.isawaitable(result):
                __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3545, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isawaitable); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3545, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_3 = NULL;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
                  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
                  if (likely(__pyx_t_3)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                    __Pyx_INCREF(__pyx_t_3);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_5, function);
                  }
                }
                __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_cur_scope->__pyx_v_result) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_result);
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3545, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3545, __pyx_L24_error)
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (__pyx_t_11) {
/* … */
                }
+3546:                         await result
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_cur_scope->__pyx_v_result);
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_2);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_13;
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_14;
                    __Pyx_XGIVEREF(__pyx_t_15);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_15;
                    __Pyx_XGIVEREF(__pyx_t_16);
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_16;
                    __Pyx_XGIVEREF(__pyx_t_17);
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_17;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 2;
                    return __pyx_r;
                    __pyx_L33_resume_from_await:;
                    __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_2);
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_t_14 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_t_15 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_15);
                    __pyx_t_16 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_cur_scope->__pyx_t_8 = 0;
                    __Pyx_XGOTREF(__pyx_t_16);
                    __pyx_t_17 = __pyx_cur_scope->__pyx_t_9;
                    __pyx_cur_scope->__pyx_t_9 = 0;
                    __Pyx_XGOTREF(__pyx_t_17);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3546, __pyx_L24_error)
                  } else {
                    PyObject* exc_type = __Pyx_PyErr_Occurred();
                    if (exc_type) {
                      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                      else __PYX_ERR(0, 3546, __pyx_L24_error)
                    }
                  }
+3547:                 except Exception as e:
              __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
              if (__pyx_t_9) {
                __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_3) < 0) __PYX_ERR(0, 3547, __pyx_L26_except_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_GIVEREF(__pyx_t_5);
                __pyx_cur_scope->__pyx_v_e = __pyx_t_5;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                    __pyx_cur_scope->__pyx_v_e = NULL;
                    goto __pyx_L40;
                  }
                  __pyx_L39_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_assign
                    __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
                    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                    if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
                    if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_23);
                    __Pyx_XGOTREF(__pyx_t_24);
                    __Pyx_XGOTREF(__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __pyx_t_9 = __pyx_lineno; __pyx_t_21 = __pyx_clineno; __pyx_t_22 = __pyx_filename;
                    {
                      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                      __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                      __pyx_cur_scope->__pyx_v_e = NULL;
                    }
                    if (PY_MAJOR_VERSION >= 3) {
                      __Pyx_XGIVEREF(__pyx_t_26);
                      __Pyx_XGIVEREF(__pyx_t_27);
                      __Pyx_XGIVEREF(__pyx_t_28);
                      __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
                    }
                    __Pyx_XGIVEREF(__pyx_t_23);
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __Pyx_XGIVEREF(__pyx_t_25);
                    __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                    __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
                    __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_21; __pyx_filename = __pyx_t_22;
                    goto __pyx_L26_except_error;
                  }
                  __pyx_L40:;
                }
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                goto __pyx_L25_exception_handled;
              }
              goto __pyx_L26_except_error;
              __pyx_L26_except_error:;
+3548:                     logger.exception(e)
                  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_n_s_logger); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3548, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_exception); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3548, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_20);
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __pyx_t_19 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
                    __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
                    if (likely(__pyx_t_19)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
                      __Pyx_INCREF(__pyx_t_19);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_20, function);
                    }
                  }
                  __pyx_t_18 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_19, __pyx_cur_scope->__pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_cur_scope->__pyx_v_e);
                  __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                  if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3548, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                }
 3549: 
 3550:             recommendations: dict
+3551:             if nbytes:
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_nbytes); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3551, __pyx_L8_error)
          if (__pyx_t_11) {
/* … */
          }
+3552:                 for key in nbytes:
            if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_nbytes)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_nbytes)) {
              __pyx_t_2 = __pyx_cur_scope->__pyx_v_nbytes; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
              __pyx_t_14 = NULL;
            } else {
              __pyx_t_13 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_nbytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3552, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_14 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3552, __pyx_L8_error)
            }
            for (;;) {
              if (likely(!__pyx_t_14)) {
                if (likely(PyList_CheckExact(__pyx_t_2))) {
                  if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 3552, __pyx_L8_error)
                  #else
                  __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3552, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  #endif
                } else {
                  if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 3552, __pyx_L8_error)
                  #else
                  __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3552, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  #endif
                }
              } else {
                __pyx_t_3 = __pyx_t_14(__pyx_t_2);
                if (unlikely(!__pyx_t_3)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 3552, __pyx_L8_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_3);
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
/* … */
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3553:                     tasks: dict = parent._tasks
              __pyx_t_3 = __pyx_cur_scope->__pyx_v_parent->_tasks;
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_tasks);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_tasks, ((PyObject*)__pyx_t_3));
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
+3554:                     ts: TaskState = tasks.get(key)
              if (unlikely(__pyx_cur_scope->__pyx_v_tasks == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
                __PYX_ERR(0, 3554, __pyx_L8_error)
              }
              __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_tasks, __pyx_cur_scope->__pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3554, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3554, __pyx_L8_error)
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
+3555:                     if ts is not None and ts._state in ("processing", "waiting"):
              __pyx_t_10 = (((PyObject *)__pyx_cur_scope->__pyx_v_ts) != Py_None);
              __pyx_t_29 = (__pyx_t_10 != 0);
              if (__pyx_t_29) {
              } else {
                __pyx_t_11 = __pyx_t_29;
                goto __pyx_L49_bool_binop_done;
              }
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ts->_state);
              __pyx_t_12 = __pyx_cur_scope->__pyx_v_ts->_state;
              __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3555, __pyx_L8_error)
              __pyx_t_30 = (__pyx_t_10 != 0);
              if (!__pyx_t_30) {
              } else {
                __pyx_t_29 = __pyx_t_30;
                goto __pyx_L51_bool_binop_done;
              }
              __pyx_t_30 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3555, __pyx_L8_error)
              __pyx_t_10 = (__pyx_t_30 != 0);
              __pyx_t_29 = __pyx_t_10;
              __pyx_L51_bool_binop_done:;
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_10 = (__pyx_t_29 != 0);
              __pyx_t_11 = __pyx_t_10;
              __pyx_L49_bool_binop_done:;
              if (__pyx_t_11) {
/* … */
              }
+3556:                         recommendations = self.transition(
                __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transition); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3556, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
/* … */
                __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3556, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_key);
                __Pyx_INCREF(__pyx_n_u_memory_2);
                __Pyx_GIVEREF(__pyx_n_u_memory_2);
                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_u_memory_2);
/* … */
                __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3556, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (!(likely(PyDict_CheckExact(__pyx_t_18))||((__pyx_t_18) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_18)->tp_name), 0))) __PYX_ERR(0, 3556, __pyx_L8_error)
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_recommendations);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_recommendations, ((PyObject*)__pyx_t_18));
                __Pyx_GIVEREF(__pyx_t_18);
                __pyx_t_18 = 0;
 3557:                             key,
 3558:                             "memory",
+3559:                             worker=address,
                __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3559, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3559, __pyx_L8_error)
+3560:                             nbytes=nbytes[key],
                __pyx_t_18 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_nbytes, __pyx_cur_scope->__pyx_v_key); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3560, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_18);
                if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nbytes, __pyx_t_18) < 0) __PYX_ERR(0, 3559, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3561:                             typename=types[key],
                __pyx_t_18 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_types, __pyx_cur_scope->__pyx_v_key); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3561, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_18);
                if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_typename, __pyx_t_18) < 0) __PYX_ERR(0, 3559, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3562:                         )
+3563:                         self.transitions(recommendations)
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3563, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_5 = NULL;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                  __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
                  if (likely(__pyx_t_5)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                    __Pyx_INCREF(__pyx_t_5);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_1, function);
                  }
                }
                __pyx_t_18 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_cur_scope->__pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_recommendations);
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3563, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3564: 
+3565:             recommendations = {}
          __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3565, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_recommendations);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_recommendations, ((PyObject*)__pyx_t_2));
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_t_2 = 0;
+3566:             for ts in list(parent._unrunnable):
          __pyx_t_2 = PySequence_List(__pyx_cur_scope->__pyx_v_parent->_unrunnable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3566, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_18 = __pyx_t_2; __Pyx_INCREF(__pyx_t_18); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          for (;;) {
            if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_18)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_18, __pyx_t_13); __Pyx_INCREF(__pyx_t_2); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 3566, __pyx_L8_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_18, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3566, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
            if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3566, __pyx_L8_error)
            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3567:                 valid: set = self.valid_workers(ts)
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_valid_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3567, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
              }
            }
            __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_cur_scope->__pyx_v_ts));
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3567, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (!(likely(PySet_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 3567, __pyx_L8_error)
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_valid);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_valid, ((PyObject*)__pyx_t_2));
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;
+3568:                 if valid is None or ws in valid:
            __pyx_t_10 = (__pyx_cur_scope->__pyx_v_valid == ((PyObject*)Py_None));
            __pyx_t_29 = (__pyx_t_10 != 0);
            if (!__pyx_t_29) {
            } else {
              __pyx_t_11 = __pyx_t_29;
              goto __pyx_L56_bool_binop_done;
            }
            if (unlikely(__pyx_cur_scope->__pyx_v_valid == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
              __PYX_ERR(0, 3568, __pyx_L8_error)
            }
            __pyx_t_29 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_cur_scope->__pyx_v_ws), __pyx_cur_scope->__pyx_v_valid, Py_EQ)); if (unlikely(__pyx_t_29 < 0)) __PYX_ERR(0, 3568, __pyx_L8_error)
            __pyx_t_10 = (__pyx_t_29 != 0);
            __pyx_t_11 = __pyx_t_10;
            __pyx_L56_bool_binop_done:;
            if (__pyx_t_11) {
/* … */
            }
+3569:                     recommendations[ts._key] = "waiting"
              if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 3569, __pyx_L8_error)
 3570: 
+3571:             if recommendations:
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_recommendations); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3571, __pyx_L8_error)
          if (__pyx_t_11) {
/* … */
          }
+3572:                 self.transitions(recommendations)
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3572, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_1 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_18 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_cur_scope->__pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_recommendations);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3572, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3573: 
+3574:             self.log_event(address, {"action": "add-worker"})
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3574, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3574, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_action, __pyx_kp_u_add_worker_2) < 0) __PYX_ERR(0, 3574, __pyx_L8_error)
          __pyx_t_5 = NULL;
          __pyx_t_21 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_21 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_address, __pyx_t_1};
            __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3574, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_address, __pyx_t_1};
            __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3574, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          {
            __pyx_t_3 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3574, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (__pyx_t_5) {
              __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
            PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_21, __pyx_cur_scope->__pyx_v_address);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_21, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3574, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3575:             self.log_event("all", {"action": "add-worker", "worker": address})
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3575, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3575, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_add_worker_2) < 0) __PYX_ERR(0, 3575, __pyx_L8_error)
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3575, __pyx_L8_error)
          __pyx_t_1 = NULL;
          __pyx_t_21 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_21 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_n_u_all, __pyx_t_3};
            __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3575, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_n_u_all, __pyx_t_3};
            __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3575, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3575, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (__pyx_t_1) {
              __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
            }
            __Pyx_INCREF(__pyx_n_u_all);
            __Pyx_GIVEREF(__pyx_n_u_all);
            PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_21, __pyx_n_u_all);
            __Pyx_GIVEREF(__pyx_t_3);
            PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_21, __pyx_t_3);
            __pyx_t_3 = 0;
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3575, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3576:             logger.info("Register worker %s", ws)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3576, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3576, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          __pyx_t_21 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
              __pyx_t_21 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Register_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3576, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_18);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Register_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3576, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_18);
          } else
          #endif
          {
            __pyx_t_3 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3576, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Register_worker_s);
            __Pyx_GIVEREF(__pyx_kp_u_Register_worker_s);
            PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_21, __pyx_kp_u_Register_worker_s);
            __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_21, ((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3576, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3577: 
 3578:             msg = {
+3579:                 "status": "OK",
          __pyx_t_18 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3579, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          if (PyDict_SetItem(__pyx_t_18, __pyx_n_u_status, __pyx_n_u_OK) < 0) __PYX_ERR(0, 3579, __pyx_L8_error)
+3580:                 "time": time(),
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3580, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3580, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (PyDict_SetItem(__pyx_t_18, __pyx_n_u_time, __pyx_t_5) < 0) __PYX_ERR(0, 3579, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3581:                 "heartbeat-interval": heartbeat_interval(len(parent._workers)),
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_heartbeat_interval_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3581, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = __pyx_cur_scope->__pyx_v_parent->_workers;
          __Pyx_INCREF(__pyx_t_2);
          __pyx_t_13 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3581, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3581, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3581, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (PyDict_SetItem(__pyx_t_18, __pyx_kp_u_heartbeat_interval, __pyx_t_5) < 0) __PYX_ERR(0, 3579, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3582:                 "worker-plugins": self.worker_plugins,
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_plugins); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3582, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_18, __pyx_kp_u_worker_plugins_2, __pyx_t_5) < 0) __PYX_ERR(0, 3579, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GIVEREF(__pyx_t_18);
          __pyx_cur_scope->__pyx_v_msg = ((PyObject*)__pyx_t_18);
          __pyx_t_18 = 0;
 3583:             }
 3584: 
 3585:             cs: ClientState
+3586:             version_warning = version_module.error_message(
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_version_module); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3586, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_error_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3586, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
          __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3586, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_versions);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_versions);
          PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_cur_scope->__pyx_v_versions);
          __pyx_t_18 = 0;
          __pyx_t_2 = 0;
/* … */
          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3586, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GIVEREF(__pyx_t_18);
          __pyx_cur_scope->__pyx_v_version_warning = __pyx_t_18;
          __pyx_t_18 = 0;
+3587:                 version_module.get_versions(),
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_version_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3587, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_versions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3587, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_18 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3587, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3588:                 merge(
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_merge); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3588, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          { /* enter inner scope */
+3589:                     {w: ws._versions for w, ws in parent._workers.items()},
            __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3589, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_13 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 3589, __pyx_L8_error)
            }
            __pyx_t_19 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers, 0, __pyx_n_s_items, (&__pyx_t_31), (&__pyx_t_21)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3589, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_XDECREF(__pyx_t_20);
            __pyx_t_20 = __pyx_t_19;
            __pyx_t_19 = 0;
            while (1) {
              __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_20, __pyx_t_31, &__pyx_t_13, &__pyx_t_19, &__pyx_t_32, NULL, __pyx_t_21);
              if (unlikely(__pyx_t_9 == 0)) break;
              if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 3589, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_19);
              __Pyx_GOTREF(__pyx_t_32);
              if (!(likely(((__pyx_t_32) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_32, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3589, __pyx_L8_error)
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr35__pyx_v_w);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr35__pyx_v_w, __pyx_t_19);
              __Pyx_GIVEREF(__pyx_t_19);
              __pyx_t_19 = 0;
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr35__pyx_v_ws));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr35__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_32));
              __Pyx_GIVEREF(__pyx_t_32);
              __pyx_t_32 = 0;
              if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr35__pyx_v_w, (PyObject*)__pyx_cur_scope->__pyx_9genexpr35__pyx_v_ws->_versions))) __PYX_ERR(0, 3589, __pyx_L8_error)
            }
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          } /* exit inner scope */
          { /* enter inner scope */
+3590:                     {
            __pyx_t_20 = PyDict_New(); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3590, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_20);
+3591:                         c: cs._versions
                if (unlikely(PyDict_SetItem(__pyx_t_20, (PyObject*)__pyx_cur_scope->__pyx_9genexpr36__pyx_v_c, (PyObject*)__pyx_cur_scope->__pyx_9genexpr36__pyx_v_cs->_versions))) __PYX_ERR(0, 3591, __pyx_L8_error)
+3592:                         for c, cs in parent._clients.items()
            __pyx_t_31 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 3592, __pyx_L8_error)
            }
            __pyx_t_19 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_clients, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_21)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3592, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_XDECREF(__pyx_t_32);
            __pyx_t_32 = __pyx_t_19;
            __pyx_t_19 = 0;
            while (1) {
              __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_32, __pyx_t_13, &__pyx_t_31, &__pyx_t_19, &__pyx_t_33, NULL, __pyx_t_21);
              if (unlikely(__pyx_t_9 == 0)) break;
              if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 3592, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_19);
              __Pyx_GOTREF(__pyx_t_33);
              if (!(likely(((__pyx_t_33) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_33, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 3592, __pyx_L8_error)
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr36__pyx_v_c);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr36__pyx_v_c, __pyx_t_19);
              __Pyx_GIVEREF(__pyx_t_19);
              __pyx_t_19 = 0;
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr36__pyx_v_cs));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr36__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_33));
              __Pyx_GIVEREF(__pyx_t_33);
              __pyx_t_33 = 0;
+3593:                         if cs._versions
              __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_9genexpr36__pyx_v_cs->_versions); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3593, __pyx_L8_error)
              if (__pyx_t_11) {
/* … */
              }
            }
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          } /* exit inner scope */
          __pyx_t_32 = NULL;
          __pyx_t_21 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_32 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_32)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_32);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_21 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_32, __pyx_t_1, __pyx_t_20};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3588, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_32, __pyx_t_1, __pyx_t_20};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3588, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          } else
          #endif
          {
            __pyx_t_33 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 3588, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_33);
            if (__pyx_t_32) {
              __Pyx_GIVEREF(__pyx_t_32); PyTuple_SET_ITEM(__pyx_t_33, 0, __pyx_t_32); __pyx_t_32 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_33, 0+__pyx_t_21, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_20);
            PyTuple_SET_ITEM(__pyx_t_33, 1+__pyx_t_21, __pyx_t_20);
            __pyx_t_1 = 0;
            __pyx_t_20 = 0;
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_33, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3588, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3594:                     },
 3595:                 ),
 3596:                 versions,
+3597:                 client_name="This Worker",
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3597, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client_name, __pyx_kp_u_This_Worker) < 0) __PYX_ERR(0, 3597, __pyx_L8_error)
 3598:             )
+3599:             msg.update(version_warning)
          __pyx_t_18 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_cur_scope->__pyx_v_msg, __pyx_cur_scope->__pyx_v_version_warning); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3599, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3600: 
+3601:             if comm:
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_comm); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3601, __pyx_L8_error)
          if (__pyx_t_11) {
/* … */
          }
+3602:                 await comm.write(msg)
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3602, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_18 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_msg);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3602, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_18);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_6);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 3;
              return __pyx_r;
              __pyx_L65_resume_from_await:;
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_6);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3602, __pyx_L8_error)
            } else {
              PyObject* exc_type = __Pyx_PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                else __PYX_ERR(0, 3602, __pyx_L8_error)
              }
            }
+3603:             await self.handle_worker(comm=comm, worker=address)
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_handle_worker); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3603, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3603, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_cur_scope->__pyx_v_comm) < 0) __PYX_ERR(0, 3603, __pyx_L8_error)
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 3603, __pyx_L8_error)
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3603, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_6);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
            __Pyx_XGIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
            __Pyx_XGIVEREF(__pyx_t_8);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 4;
            return __pyx_r;
            __pyx_L66_resume_from_await:;
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_6);
            __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_7);
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_8);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3603, __pyx_L8_error)
          } else {
            PyObject* exc_type = __Pyx_PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
              else __PYX_ERR(0, 3603, __pyx_L8_error)
            }
          }
 3604: 
+3605:     def update_graph_hlg(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_23update_graph_hlg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_23update_graph_hlg = {"update_graph_hlg", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_23update_graph_hlg, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_23update_graph_hlg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_hlg = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_dependencies = 0;
  PyObject *__pyx_v_restrictions = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_loose_restrictions = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_v_submitting_task = 0;
  PyObject *__pyx_v_retries = 0;
  PyObject *__pyx_v_user_priority = 0;
  PyObject *__pyx_v_actors = 0;
  PyObject *__pyx_v_fifo_timeout = 0;
  PyObject *__pyx_v_annotations = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph_hlg (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,&__pyx_n_s_hlg,&__pyx_n_s_keys,&__pyx_n_s_dependencies,&__pyx_n_s_restrictions,&__pyx_n_s_priority,&__pyx_n_s_loose_restrictions,&__pyx_n_s_resources,&__pyx_n_s_submitting_task,&__pyx_n_s_retries,&__pyx_n_s_user_priority,&__pyx_n_s_actors,&__pyx_n_s_fifo_timeout,&__pyx_n_s_annotations,0};
    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_22update_graph_hlg(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client, PyObject *__pyx_v_hlg, PyObject *__pyx_v_keys, PyObject *__pyx_v_dependencies, PyObject *__pyx_v_restrictions, PyObject *__pyx_v_priority, PyObject *__pyx_v_loose_restrictions, PyObject *__pyx_v_resources, PyObject *__pyx_v_submitting_task, PyObject *__pyx_v_retries, PyObject *__pyx_v_user_priority, PyObject *__pyx_v_actors, PyObject *__pyx_v_fifo_timeout, PyObject *__pyx_v_annotations) {
  PyObject *__pyx_v_dsk = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_deps = NULL;
  PyObject *__pyx_v_dsk_keys = NULL;
  PyObject *__pyx_v_stripped_deps = NULL;
  PyObject *__pyx_9genexpr37__pyx_v_k = NULL;
  PyObject *__pyx_9genexpr37__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph_hlg", 0);
  __Pyx_INCREF(__pyx_v_dependencies);
  __Pyx_INCREF(__pyx_v_priority);
  __Pyx_INCREF(__pyx_v_annotations);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph_hlg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dsk);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XDECREF(__pyx_v_dsk_keys);
  __Pyx_XDECREF(__pyx_v_stripped_deps);
  __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_k);
  __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_dependencies);
  __Pyx_XDECREF(__pyx_v_priority);
  __Pyx_XDECREF(__pyx_v_annotations);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__176 = PyTuple_Pack(23, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_hlg, __pyx_n_s_keys, __pyx_n_s_dependencies, __pyx_n_s_restrictions, __pyx_n_s_priority, __pyx_n_s_loose_restrictions, __pyx_n_s_resources, __pyx_n_s_submitting_task, __pyx_n_s_retries, __pyx_n_s_user_priority, __pyx_n_s_actors, __pyx_n_s_fifo_timeout, __pyx_n_s_annotations, __pyx_n_s_dsk, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_deps, __pyx_n_s_dsk_keys, __pyx_n_s_stripped_deps, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__176)) __PYX_ERR(0, 3605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__176);
  __Pyx_GIVEREF(__pyx_tuple__176);
  __pyx_codeobj__177 = (PyObject*)__Pyx_PyCode_New(15, 0, 23, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_update_graph_hlg_2, 3605, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__177)) __PYX_ERR(0, 3605, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_23update_graph_hlg, 0, __pyx_n_s_Scheduler_update_graph_hlg, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__177)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__178);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_update_graph_hlg_2, __pyx_t_12) < 0) __PYX_ERR(0, 3605, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__178 = PyTuple_Pack(14, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__178)) __PYX_ERR(0, 3605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__178);
  __Pyx_GIVEREF(__pyx_tuple__178);
 3606:         self,
+3607:         client=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+3608:         hlg=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+3609:         keys=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+3610:         dependencies=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+3611:         restrictions=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+3612:         priority=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+3613:         loose_restrictions=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+3614:         resources=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
+3615:         submitting_task=None,
    values[9] = ((PyObject *)((PyObject *)Py_None));
+3616:         retries=None,
    values[10] = ((PyObject *)((PyObject *)Py_None));
    values[11] = ((PyObject *)((PyObject *)__pyx_int_0));
 3617:         user_priority=0,
+3618:         actors=None,
    values[12] = ((PyObject *)((PyObject *)Py_None));
    values[13] = ((PyObject *)((PyObject *)__pyx_int_0));
 3619:         fifo_timeout=0,
+3620:         annotations=None,
    values[14] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hlg);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dependencies);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictions);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_priority);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loose_restrictions);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_submitting_task);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_retries);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_priority);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_actors);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fifo_timeout);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_annotations);
          if (value) { values[14] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_graph_hlg") < 0)) __PYX_ERR(0, 3605, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
    __pyx_v_hlg = values[2];
    __pyx_v_keys = values[3];
    __pyx_v_dependencies = values[4];
    __pyx_v_restrictions = values[5];
    __pyx_v_priority = values[6];
    __pyx_v_loose_restrictions = values[7];
    __pyx_v_resources = values[8];
    __pyx_v_submitting_task = values[9];
    __pyx_v_retries = values[10];
    __pyx_v_user_priority = values[11];
    __pyx_v_actors = values[12];
    __pyx_v_fifo_timeout = values[13];
    __pyx_v_annotations = values[14];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_graph_hlg", 0, 1, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3605, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph_hlg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_22update_graph_hlg(__pyx_self, __pyx_v_self, __pyx_v_client, __pyx_v_hlg, __pyx_v_keys, __pyx_v_dependencies, __pyx_v_restrictions, __pyx_v_priority, __pyx_v_loose_restrictions, __pyx_v_resources, __pyx_v_submitting_task, __pyx_v_retries, __pyx_v_user_priority, __pyx_v_actors, __pyx_v_fifo_timeout, __pyx_v_annotations);
 3621:     ):
 3622: 
+3623:         dsk, dependencies, annotations = highlevelgraph_unpack(hlg, annotations)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_highlevelgraph_unpack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_hlg, __pyx_v_annotations};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_hlg, __pyx_v_annotations};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_hlg);
    __Pyx_GIVEREF(__pyx_v_hlg);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_hlg);
    __Pyx_INCREF(__pyx_v_annotations);
    __Pyx_GIVEREF(__pyx_v_annotations);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_annotations);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3623, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 2; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 3623, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3623, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_dsk = __pyx_t_2;
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_dependencies, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_annotations, __pyx_t_3);
  __pyx_t_3 = 0;
 3624: 
 3625:         # Remove any self-dependencies (happens on test_publish_bag() and others)
+3626:         for k, v in dependencies.items():
  __pyx_t_8 = 0;
  if (unlikely(__pyx_v_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3626, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_dependencies, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_8, &__pyx_t_3, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 3626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_5);
    __pyx_t_5 = 0;
+3627:             deps = set(v)
    __pyx_t_5 = PySet_New(__pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_deps, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+3628:             if k in deps:
    __pyx_t_11 = (__Pyx_PySet_ContainsTF(__pyx_v_k, __pyx_v_deps, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3628, __pyx_L1_error)
    __pyx_t_12 = (__pyx_t_11 != 0);
    if (__pyx_t_12) {
/* … */
    }
+3629:                 deps.remove(k)
      __pyx_t_13 = __Pyx_PySet_Remove(__pyx_v_deps, __pyx_v_k); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 3629, __pyx_L1_error)
+3630:             dependencies[k] = deps
    if (unlikely(PyObject_SetItem(__pyx_v_dependencies, __pyx_v_k, __pyx_v_deps) < 0)) __PYX_ERR(0, 3630, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3631: 
+3632:         if priority is None:
  __pyx_t_12 = (__pyx_v_priority == Py_None);
  __pyx_t_11 = (__pyx_t_12 != 0);
  if (__pyx_t_11) {
/* … */
  }
 3633:             # Removing all non-local keys before calling order()
+3634:             dsk_keys = set(dsk)  # intersection() of sets is much faster than dict_keys
    __pyx_t_1 = PySet_New(__pyx_v_dsk); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3634, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_dsk_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+3635:             stripped_deps = {
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3635, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_1);
+3636:                 k: v.intersection(dsk_keys)
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr37__pyx_v_v, __pyx_n_s_intersection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3636, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_6 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_6)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_6);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_dsk_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_dsk_keys);
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3636, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_9genexpr37__pyx_v_k, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 3636, __pyx_L11_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3637:                 for k, v in dependencies.items()
      __pyx_t_9 = 0;
      if (unlikely(__pyx_v_dependencies == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 3637, __pyx_L11_error)
      }
      __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_dependencies, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3637, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5);
      __pyx_t_5 = __pyx_t_3;
      __pyx_t_3 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_4);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 3637, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_9genexpr37__pyx_v_k, __pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_XDECREF_SET(__pyx_9genexpr37__pyx_v_v, __pyx_t_2);
        __pyx_t_2 = 0;
+3638:                 if k in dsk_keys
        __pyx_t_11 = (__Pyx_PySet_ContainsTF(__pyx_9genexpr37__pyx_v_k, __pyx_v_dsk_keys, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3638, __pyx_L11_error)
        __pyx_t_12 = (__pyx_t_11 != 0);
        if (__pyx_t_12) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_k); __pyx_9genexpr37__pyx_v_k = 0;
      __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_v); __pyx_9genexpr37__pyx_v_v = 0;
      goto __pyx_L15_exit_scope;
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_k); __pyx_9genexpr37__pyx_v_k = 0;
      __Pyx_XDECREF(__pyx_9genexpr37__pyx_v_v); __pyx_9genexpr37__pyx_v_v = 0;
      goto __pyx_L1_error;
      __pyx_L15_exit_scope:;
    } /* exit inner scope */
    __pyx_v_stripped_deps = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 3639:             }
+3640:             priority = dask.order.order(dsk, dependencies=stripped_deps)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_order); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_order); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_dsk);
    __Pyx_GIVEREF(__pyx_v_dsk);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dsk);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dependencies, __pyx_v_stripped_deps) < 0) __PYX_ERR(0, 3640, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_priority, __pyx_t_3);
    __pyx_t_3 = 0;
 3641: 
+3642:         return self.update_graph(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update_graph_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 3643:             client,
 3644:             dsk,
 3645:             keys,
 3646:             dependencies,
 3647:             restrictions,
 3648:             priority,
 3649:             loose_restrictions,
 3650:             resources,
 3651:             submitting_task,
 3652:             retries,
 3653:             user_priority,
 3654:             actors,
 3655:             fifo_timeout,
+3656:             annotations,
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[15] = {__pyx_t_5, __pyx_v_client, __pyx_v_dsk, __pyx_v_keys, __pyx_v_dependencies, __pyx_v_restrictions, __pyx_v_priority, __pyx_v_loose_restrictions, __pyx_v_resources, __pyx_v_submitting_task, __pyx_v_retries, __pyx_v_user_priority, __pyx_v_actors, __pyx_v_fifo_timeout, __pyx_v_annotations};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 14+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3642, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[15] = {__pyx_t_5, __pyx_v_client, __pyx_v_dsk, __pyx_v_keys, __pyx_v_dependencies, __pyx_v_restrictions, __pyx_v_priority, __pyx_v_loose_restrictions, __pyx_v_resources, __pyx_v_submitting_task, __pyx_v_retries, __pyx_v_user_priority, __pyx_v_actors, __pyx_v_fifo_timeout, __pyx_v_annotations};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 14+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3642, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(14+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_client);
    __Pyx_GIVEREF(__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_v_client);
    __Pyx_INCREF(__pyx_v_dsk);
    __Pyx_GIVEREF(__pyx_v_dsk);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_v_dsk);
    __Pyx_INCREF(__pyx_v_keys);
    __Pyx_GIVEREF(__pyx_v_keys);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_4, __pyx_v_keys);
    __Pyx_INCREF(__pyx_v_dependencies);
    __Pyx_GIVEREF(__pyx_v_dependencies);
    PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_4, __pyx_v_dependencies);
    __Pyx_INCREF(__pyx_v_restrictions);
    __Pyx_GIVEREF(__pyx_v_restrictions);
    PyTuple_SET_ITEM(__pyx_t_1, 4+__pyx_t_4, __pyx_v_restrictions);
    __Pyx_INCREF(__pyx_v_priority);
    __Pyx_GIVEREF(__pyx_v_priority);
    PyTuple_SET_ITEM(__pyx_t_1, 5+__pyx_t_4, __pyx_v_priority);
    __Pyx_INCREF(__pyx_v_loose_restrictions);
    __Pyx_GIVEREF(__pyx_v_loose_restrictions);
    PyTuple_SET_ITEM(__pyx_t_1, 6+__pyx_t_4, __pyx_v_loose_restrictions);
    __Pyx_INCREF(__pyx_v_resources);
    __Pyx_GIVEREF(__pyx_v_resources);
    PyTuple_SET_ITEM(__pyx_t_1, 7+__pyx_t_4, __pyx_v_resources);
    __Pyx_INCREF(__pyx_v_submitting_task);
    __Pyx_GIVEREF(__pyx_v_submitting_task);
    PyTuple_SET_ITEM(__pyx_t_1, 8+__pyx_t_4, __pyx_v_submitting_task);
    __Pyx_INCREF(__pyx_v_retries);
    __Pyx_GIVEREF(__pyx_v_retries);
    PyTuple_SET_ITEM(__pyx_t_1, 9+__pyx_t_4, __pyx_v_retries);
    __Pyx_INCREF(__pyx_v_user_priority);
    __Pyx_GIVEREF(__pyx_v_user_priority);
    PyTuple_SET_ITEM(__pyx_t_1, 10+__pyx_t_4, __pyx_v_user_priority);
    __Pyx_INCREF(__pyx_v_actors);
    __Pyx_GIVEREF(__pyx_v_actors);
    PyTuple_SET_ITEM(__pyx_t_1, 11+__pyx_t_4, __pyx_v_actors);
    __Pyx_INCREF(__pyx_v_fifo_timeout);
    __Pyx_GIVEREF(__pyx_v_fifo_timeout);
    PyTuple_SET_ITEM(__pyx_t_1, 12+__pyx_t_4, __pyx_v_fifo_timeout);
    __Pyx_INCREF(__pyx_v_annotations);
    __Pyx_GIVEREF(__pyx_v_annotations);
    PyTuple_SET_ITEM(__pyx_t_1, 13+__pyx_t_4, __pyx_v_annotations);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 3657:         )
 3658: 
+3659:     def update_graph(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_25update_graph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_24update_graph[] = "\n        Add new computations to the internal dask graph\n\n        This happens whenever the Client calls submit, map, get, or compute.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_25update_graph = {"update_graph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_25update_graph, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_24update_graph};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_25update_graph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_tasks = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_dependencies = 0;
  PyObject *__pyx_v_restrictions = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_loose_restrictions = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_v_submitting_task = 0;
  PyObject *__pyx_v_retries = 0;
  PyObject *__pyx_v_user_priority = 0;
  PyObject *__pyx_v_actors = 0;
  PyObject *__pyx_v_fifo_timeout = 0;
  PyObject *__pyx_v_annotations = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,&__pyx_n_s_tasks,&__pyx_n_s_keys,&__pyx_n_s_dependencies,&__pyx_n_s_restrictions,&__pyx_n_s_priority,&__pyx_n_s_loose_restrictions,&__pyx_n_s_resources,&__pyx_n_s_submitting_task,&__pyx_n_s_retries,&__pyx_n_s_user_priority,&__pyx_n_s_actors,&__pyx_n_s_fifo_timeout,&__pyx_n_s_annotations,0};
    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_2generator29(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_24update_graph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client, PyObject *__pyx_v_tasks, PyObject *__pyx_v_keys, PyObject *__pyx_v_dependencies, PyObject *__pyx_v_restrictions, PyObject *__pyx_v_priority, PyObject *__pyx_v_loose_restrictions, PyObject *__pyx_v_resources, PyObject *__pyx_v_submitting_task, PyObject *__pyx_v_retries, PyObject *__pyx_v_user_priority, PyObject *__pyx_v_actors, PyObject *__pyx_v_fifo_timeout, PyObject *__pyx_v_annotations) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *__pyx_cur_scope;
  PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_k = NULL;
  Py_ssize_t __pyx_v_n;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_already_in_memory = NULL;
  PyObject *__pyx_v_v = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_dependents = NULL;
  PyObject *__pyx_v_stack = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_dep = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_touched_keys = NULL;
  PyObject *__pyx_v_touched_tasks = NULL;
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_kv = NULL;
  PyObject *__pyx_v_actor = NULL;
  PyObject *__pyx_v_generation = NULL;
  PyObject *__pyx_v_runnables = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_plugin = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_end = NULL;
  PyObject *__pyx_9genexpr40__pyx_v_k = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr42__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_13_update_graph(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_13_update_graph, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3659, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_tasks = __pyx_v_tasks;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tasks);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tasks);
  __pyx_cur_scope->__pyx_v_annotations = __pyx_v_annotations;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_annotations);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_annotations);
  __Pyx_INCREF(__pyx_v_keys);
  __Pyx_INCREF(__pyx_v_dependencies);
  __Pyx_INCREF(__pyx_v_restrictions);
  __Pyx_INCREF(__pyx_v_priority);
  __Pyx_INCREF(__pyx_v_loose_restrictions);
  __Pyx_INCREF(__pyx_v_resources);
  __Pyx_INCREF(__pyx_v_retries);
  __Pyx_INCREF(__pyx_v_user_priority);
  __Pyx_INCREF(__pyx_v_actors);
  __Pyx_INCREF(__pyx_v_fifo_timeout);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_already_in_memory);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_dependents);
  __Pyx_XDECREF(__pyx_v_stack);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_dep);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_touched_keys);
  __Pyx_XDECREF(__pyx_v_touched_tasks);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_kv);
  __Pyx_XDECREF(__pyx_v_actor);
  __Pyx_XDECREF(__pyx_v_generation);
  __Pyx_XDECREF(__pyx_v_runnables);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_plugin);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_end);
  __Pyx_XDECREF(__pyx_9genexpr40__pyx_v_k);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr42__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_dependencies);
  __Pyx_XDECREF(__pyx_v_restrictions);
  __Pyx_XDECREF(__pyx_v_priority);
  __Pyx_XDECREF(__pyx_v_loose_restrictions);
  __Pyx_XDECREF(__pyx_v_resources);
  __Pyx_XDECREF(__pyx_v_retries);
  __Pyx_XDECREF(__pyx_v_user_priority);
  __Pyx_XDECREF(__pyx_v_actors);
  __Pyx_XDECREF(__pyx_v_fifo_timeout);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__179 = PyTuple_Pack(49, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_tasks, __pyx_n_s_keys, __pyx_n_s_dependencies, __pyx_n_s_restrictions, __pyx_n_s_priority, __pyx_n_s_loose_restrictions, __pyx_n_s_resources, __pyx_n_s_submitting_task, __pyx_n_s_retries, __pyx_n_s_user_priority, __pyx_n_s_actors, __pyx_n_s_fifo_timeout, __pyx_n_s_annotations, __pyx_n_s_parent, __pyx_n_s_start, __pyx_n_s_k, __pyx_n_s_n, __pyx_n_s_deps, __pyx_n_s_ts, __pyx_n_s_already_in_memory, __pyx_n_s_v, __pyx_n_s_dts, __pyx_n_s_dependents, __pyx_n_s_stack, __pyx_n_s_done, __pyx_n_s_key, __pyx_n_s_dep, __pyx_n_s_child_deps, __pyx_n_s_d, __pyx_n_s_touched_keys, __pyx_n_s_touched_tasks, __pyx_n_s_a, __pyx_n_s_kv, __pyx_n_s_actor, __pyx_n_s_generation, __pyx_n_s_runnables, __pyx_n_s_w, __pyx_n_s_recommendations, __pyx_n_s_plugin, __pyx_n_s_e, __pyx_n_s_end, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_k, __pyx_n_s_genexpr, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__179)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__179);
  __Pyx_GIVEREF(__pyx_tuple__179);
  __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(15, 0, 49, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_update_graph_2, 3659, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) __PYX_ERR(0, 3659, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_25update_graph, 0, __pyx_n_s_Scheduler_update_graph, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__180)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__181);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_update_graph_2, __pyx_t_12) < 0) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__181 = PyTuple_Pack(14, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__181)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__181);
  __Pyx_GIVEREF(__pyx_tuple__181);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph {
  PyObject_HEAD
  PyObject *__pyx_v_annotations;
  PyObject *__pyx_v_child_deps;
  PyObject *__pyx_v_deps;
  PyObject *__pyx_v_done;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_tasks;
};

 3660:         self,
+3661:         client=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+3662:         tasks=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+3663:         keys=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+3664:         dependencies=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+3665:         restrictions=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+3666:         priority=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+3667:         loose_restrictions=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+3668:         resources=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
+3669:         submitting_task=None,
    values[9] = ((PyObject *)((PyObject *)Py_None));
+3670:         retries=None,
    values[10] = ((PyObject *)((PyObject *)Py_None));
    values[11] = ((PyObject *)((PyObject *)__pyx_int_0));
 3671:         user_priority=0,
+3672:         actors=None,
    values[12] = ((PyObject *)((PyObject *)Py_None));
    values[13] = ((PyObject *)((PyObject *)__pyx_int_0));
 3673:         fifo_timeout=0,
+3674:         annotations=None,
    values[14] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tasks);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dependencies);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictions);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_priority);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loose_restrictions);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_submitting_task);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_retries);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_priority);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_actors);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fifo_timeout);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_annotations);
          if (value) { values[14] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_graph") < 0)) __PYX_ERR(0, 3659, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
    __pyx_v_tasks = values[2];
    __pyx_v_keys = values[3];
    __pyx_v_dependencies = values[4];
    __pyx_v_restrictions = values[5];
    __pyx_v_priority = values[6];
    __pyx_v_loose_restrictions = values[7];
    __pyx_v_resources = values[8];
    __pyx_v_submitting_task = values[9];
    __pyx_v_retries = values[10];
    __pyx_v_user_priority = values[11];
    __pyx_v_actors = values[12];
    __pyx_v_fifo_timeout = values[13];
    __pyx_v_annotations = values[14];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_graph", 0, 1, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3659, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_24update_graph(__pyx_self, __pyx_v_self, __pyx_v_client, __pyx_v_tasks, __pyx_v_keys, __pyx_v_dependencies, __pyx_v_restrictions, __pyx_v_priority, __pyx_v_loose_restrictions, __pyx_v_resources, __pyx_v_submitting_task, __pyx_v_retries, __pyx_v_user_priority, __pyx_v_actors, __pyx_v_fifo_timeout, __pyx_v_annotations);
 3675:     ):
 3676:         """
 3677:         Add new computations to the internal dask graph
 3678: 
 3679:         This happens whenever the Client calls submit, map, get, or compute.
 3680:         """
+3681:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3682:         start = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_start = __pyx_t_1;
  __pyx_t_1 = 0;
+3683:         fifo_timeout = parse_timedelta(fifo_timeout)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_fifo_timeout) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_fifo_timeout);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_fifo_timeout, __pyx_t_1);
  __pyx_t_1 = 0;
+3684:         keys = set(keys)
  __pyx_t_1 = PySet_New(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_1);
  __pyx_t_1 = 0;
+3685:         if len(tasks) > 1:
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_tasks;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_4 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3685, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = ((__pyx_t_4 > 1) != 0);
  if (__pyx_t_5) {
/* … */
  }
+3686:             self.log_event(
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3686, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+3687:                 ["all", client], {"action": "update_graph", "count": len(tasks)}
    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_n_u_all);
    __Pyx_GIVEREF(__pyx_n_u_all);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_all);
    __Pyx_INCREF(__pyx_v_client);
    __Pyx_GIVEREF(__pyx_v_client);
    PyList_SET_ITEM(__pyx_t_3, 1, __pyx_v_client);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_action, __pyx_n_u_update_graph_2) < 0) __PYX_ERR(0, 3687, __pyx_L1_error)
    __pyx_t_7 = __pyx_cur_scope->__pyx_v_tasks;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_4 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3687, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_count, __pyx_t_7) < 0) __PYX_ERR(0, 3687, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_3, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3686, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_3, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3686, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3686, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_6);
      __pyx_t_3 = 0;
      __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3686, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3688:             )
 3689: 
 3690:         # Remove aliases
+3691:         for k in list(tasks):
  __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_tasks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3691, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3692:             if tasks[k] is k:
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_tasks, __pyx_v_k); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = (__pyx_t_1 == __pyx_v_k);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = (__pyx_t_5 != 0);
    if (__pyx_t_10) {
/* … */
    }
+3693:                 del tasks[k]
      if (unlikely(PyObject_DelItem(__pyx_cur_scope->__pyx_v_tasks, __pyx_v_k) < 0)) __PYX_ERR(0, 3693, __pyx_L1_error)
 3694: 
+3695:         dependencies = dependencies or {}
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_dependencies); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3695, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_dependencies);
    __pyx_t_2 = __pyx_v_dependencies;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_L7_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_dependencies, __pyx_t_2);
  __pyx_t_2 = 0;
 3696: 
+3697:         n = 0
  __pyx_v_n = 0;
+3698:         while len(tasks) != n:  # walk through new tasks, cancel any bad deps
  while (1) {
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_tasks;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3698, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = ((__pyx_t_4 != __pyx_v_n) != 0);
    if (!__pyx_t_10) break;
+3699:             n = len(tasks)
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_tasks;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3699, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_n = __pyx_t_4;
+3700:             for k, deps in list(dependencies.items()):
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dependencies, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3700, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3700, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
        PyObject* sequence = __pyx_t_1;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 3700, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_6);
        #else
        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext;
        index = 0; __pyx_t_9 = __pyx_t_11(__pyx_t_3); if (unlikely(!__pyx_t_9)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        index = 1; __pyx_t_6 = __pyx_t_11(__pyx_t_3); if (unlikely(!__pyx_t_6)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_3), 2) < 0) __PYX_ERR(0, 3700, __pyx_L1_error)
        __pyx_t_11 = NULL;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L14_unpacking_done;
        __pyx_L13_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_11 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 3700, __pyx_L1_error)
        __pyx_L14_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_deps);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_deps, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __pyx_t_6 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
+3701:                 if any(
      __Pyx_XDECREF(__pyx_r);
/* … */
    __Pyx_XDECREF(__pyx_r);
/* … */
      if (__pyx_t_10) {
/* … */
      }
+3702:                     dep not in parent._tasks and dep not in tasks for dep in deps
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_14_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_14_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_14_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_14_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_14_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3702, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_2generator29, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_update_graph_locals_ge, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3702, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_2generator29(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3702, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_deps)) { __Pyx_RaiseClosureNameError("deps"); __PYX_ERR(0, 3702, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_deps)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_deps)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_deps; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_deps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3702, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 3702, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3702, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 3702, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3702, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3702, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_dep);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_dep, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_parent)) { __Pyx_RaiseClosureNameError("parent"); __PYX_ERR(0, 3702, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 3702, __pyx_L1_error)
    }
    __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_v_dep, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_parent->_tasks, Py_NE)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3702, __pyx_L1_error)
    __pyx_t_7 = (__pyx_t_6 != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_5 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_tasks)) { __Pyx_RaiseClosureNameError("tasks"); __PYX_ERR(0, 3702, __pyx_L1_error) }
    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_dep, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_tasks, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3702, __pyx_L1_error)
    __pyx_t_6 = (__pyx_t_7 != 0);
    __pyx_t_5 = __pyx_t_6;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      __Pyx_INCREF(Py_True);
      __pyx_r = Py_True;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
/* … */
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_5generator30(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
      __pyx_t_1 = __pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3702, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3702, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3702, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_14_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *__pyx_outer_scope;
  PyObject *__pyx_v_dep;
};

 3703:                 ):  # bad key
+3704:                     logger.info("User asked for computation on lost data, %s", k)
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3704, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3704, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        __pyx_t_8 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_8 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_User_asked_for_computation_on_lo, __pyx_v_k};
          __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3704, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_6);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_User_asked_for_computation_on_lo, __pyx_v_k};
          __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3704, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_6);
        } else
        #endif
        {
          __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3704, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (__pyx_t_1) {
            __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_User_asked_for_computation_on_lo);
          __Pyx_GIVEREF(__pyx_kp_u_User_asked_for_computation_on_lo);
          PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_kp_u_User_asked_for_computation_on_lo);
          __Pyx_INCREF(__pyx_v_k);
          __Pyx_GIVEREF(__pyx_v_k);
          PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_v_k);
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3704, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3705:                     del tasks[k]
        if (unlikely(PyObject_DelItem(__pyx_cur_scope->__pyx_v_tasks, __pyx_v_k) < 0)) __PYX_ERR(0, 3705, __pyx_L1_error)
+3706:                     del dependencies[k]
        if (unlikely(PyObject_DelItem(__pyx_v_dependencies, __pyx_v_k) < 0)) __PYX_ERR(0, 3706, __pyx_L1_error)
+3707:                     if k in keys:
        __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_v_k, __pyx_v_keys, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3707, __pyx_L1_error)
        __pyx_t_5 = (__pyx_t_10 != 0);
        if (__pyx_t_5) {
/* … */
        }
+3708:                         keys.remove(k)
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_keys, __pyx_n_s_remove); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3708, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_9, function);
            }
          }
          __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_3, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_k);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3708, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3709:                     self.report({"op": "cancelled-key", "key": k}, client=client)
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_op, __pyx_kp_u_cancelled_key) < 0) __PYX_ERR(0, 3709, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_key, __pyx_v_k) < 0) __PYX_ERR(0, 3709, __pyx_L1_error)
        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 3709, __pyx_L1_error)
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3710:                     self.client_releases_keys(keys=[k], client=client)
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_releases_keys_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3710, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3710, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3710, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_k);
        if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_keys, __pyx_t_3) < 0) __PYX_ERR(0, 3710, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 3710, __pyx_L1_error)
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3710, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3711: 
 3712:         # Avoid computation that is already finished
 3713:         ts: TaskState
+3714:         already_in_memory = set()  # tasks that are already done
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_already_in_memory = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3715:         for k, v in dependencies.items():
  __pyx_t_4 = 0;
  if (unlikely(__pyx_v_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3715, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_dependencies, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_12, &__pyx_t_4, &__pyx_t_3, &__pyx_t_9, NULL, __pyx_t_8);
    if (unlikely(__pyx_t_13 == 0)) break;
    if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3715, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_9);
    __pyx_t_9 = 0;
+3716:             if v and k in parent._tasks:
    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_v); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3716, __pyx_L1_error)
    if (__pyx_t_10) {
    } else {
      __pyx_t_5 = __pyx_t_10;
      goto __pyx_L20_bool_binop_done;
    }
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 3716, __pyx_L1_error)
    }
    __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_v_k, __pyx_cur_scope->__pyx_v_parent->_tasks, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3716, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    __pyx_t_5 = __pyx_t_14;
    __pyx_L20_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3717:                 ts = parent._tasks[k]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 3717, __pyx_L1_error)
      }
      __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3717, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
      __pyx_t_9 = 0;
+3718:                 if ts._state in ("memory", "erred"):
      __Pyx_INCREF(__pyx_v_ts->_state);
      __pyx_t_15 = __pyx_v_ts->_state;
      __pyx_t_14 = (__Pyx_PyUnicode_Equals(__pyx_t_15, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3718, __pyx_L1_error)
      __pyx_t_10 = (__pyx_t_14 != 0);
      if (!__pyx_t_10) {
      } else {
        __pyx_t_5 = __pyx_t_10;
        goto __pyx_L23_bool_binop_done;
      }
      __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_15, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3718, __pyx_L1_error)
      __pyx_t_14 = (__pyx_t_10 != 0);
      __pyx_t_5 = __pyx_t_14;
      __pyx_L23_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_14 = (__pyx_t_5 != 0);
      if (__pyx_t_14) {
/* … */
      }
+3719:                     already_in_memory.add(k)
        __pyx_t_16 = PySet_Add(__pyx_v_already_in_memory, __pyx_v_k); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3719, __pyx_L1_error)
 3720: 
 3721:         dts: TaskState
+3722:         if already_in_memory:
  __pyx_t_14 = (PySet_GET_SIZE(__pyx_v_already_in_memory) != 0);
  if (__pyx_t_14) {
/* … */
  }
+3723:             dependents = dask.core.reverse_dict(dependencies)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_dask); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_core); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverse_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_3, __pyx_v_dependencies) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_dependencies);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_dependents = __pyx_t_2;
    __pyx_t_2 = 0;
+3724:             stack = list(already_in_memory)
    __pyx_t_2 = PySequence_List(__pyx_v_already_in_memory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_stack = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+3725:             done = set(already_in_memory)
    __pyx_t_2 = PySet_New(__pyx_v_already_in_memory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3725, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_v_done = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+3726:             while stack:  # remove unnecessary dependencies
    while (1) {
      __pyx_t_14 = (PyList_GET_SIZE(__pyx_v_stack) != 0);
      if (!__pyx_t_14) break;
+3727:                 key = stack.pop()
      __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3727, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
      __pyx_t_2 = 0;
+3728:                 ts = parent._tasks[key]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 3728, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3728, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
      __pyx_t_2 = 0;
+3729:                 try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L35_try_end;
        __pyx_L28_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        goto __pyx_L1_error;
        __pyx_L29_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        __pyx_L35_try_end:;
      }
+3730:                     deps = dependencies[key]
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_dependencies, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3730, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_deps);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_deps, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_t_2 = 0;
+3731:                 except KeyError:
        __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
        if (__pyx_t_8) {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_3) < 0) __PYX_ERR(0, 3731, __pyx_L30_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GOTREF(__pyx_t_3);
+3732:                     deps = self.dependencies[key]
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dependencies); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3732, __pyx_L30_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_key); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3732, __pyx_L30_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_deps);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_deps, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L29_exception_handled;
        }
        goto __pyx_L30_except_error;
        __pyx_L30_except_error:;
+3733:                 for dep in deps:
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_deps)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_deps)) {
        __pyx_t_3 = __pyx_cur_scope->__pyx_v_deps; __Pyx_INCREF(__pyx_t_3); __pyx_t_12 = 0;
        __pyx_t_20 = NULL;
      } else {
        __pyx_t_12 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_deps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3733, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_20 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3733, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_20)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3733, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3733, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3733, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3733, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_20(__pyx_t_3);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 3733, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XDECREF_SET(__pyx_v_dep, __pyx_t_9);
        __pyx_t_9 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
+3734:                     if dep in dependents:
        __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_v_dep, __pyx_v_dependents, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3734, __pyx_L1_error)
        __pyx_t_5 = (__pyx_t_14 != 0);
        if (__pyx_t_5) {
/* … */
          goto __pyx_L40;
        }
+3735:                         child_deps = dependents[dep]
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_dependents, __pyx_v_dep); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3735, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_child_deps);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_child_deps, __pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_9);
          __pyx_t_9 = 0;
 3736:                     else:
+3737:                         child_deps = self.dependencies[dep]
        /*else*/ {
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dependencies); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3737, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_v_dep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3737, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_child_deps);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_child_deps, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_t_2 = 0;
        }
        __pyx_L40:;
+3738:                     if all(d in done for d in child_deps):
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_3genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_15_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_15_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_15_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_15_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_15_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3738, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_5generator30, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_update_graph_locals_ge, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3738, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_5generator30(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3738, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_child_deps)) { __Pyx_RaiseClosureNameError("child_deps"); __PYX_ERR(0, 3738, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_child_deps)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_child_deps)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_child_deps; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_child_deps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3738, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 3738, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3738, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 3738, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3738, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3738, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_d);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_d, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_done)) { __Pyx_RaiseClosureNameError("done"); __PYX_ERR(0, 3738, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_done == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 3738, __pyx_L1_error)
    }
    __pyx_t_5 = (__Pyx_PySet_ContainsTF(__pyx_cur_scope->__pyx_v_d, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_done, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3738, __pyx_L1_error)
    __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_8generator31(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
        __pyx_t_2 = __pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3738, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3738, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3738, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (__pyx_t_5) {
/* … */
        }
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_15_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *__pyx_outer_scope;
  PyObject *__pyx_v_d;
};

+3739:                         if dep in parent._tasks and dep not in done:
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 3739, __pyx_L1_error)
          }
          __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_v_dep, __pyx_cur_scope->__pyx_v_parent->_tasks, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3739, __pyx_L1_error)
          __pyx_t_10 = (__pyx_t_14 != 0);
          if (__pyx_t_10) {
          } else {
            __pyx_t_5 = __pyx_t_10;
            goto __pyx_L43_bool_binop_done;
          }
          __pyx_t_10 = (__Pyx_PySet_ContainsTF(__pyx_v_dep, __pyx_cur_scope->__pyx_v_done, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3739, __pyx_L1_error)
          __pyx_t_14 = (__pyx_t_10 != 0);
          __pyx_t_5 = __pyx_t_14;
          __pyx_L43_bool_binop_done:;
          if (__pyx_t_5) {
/* … */
          }
+3740:                             done.add(dep)
            __pyx_t_16 = PySet_Add(__pyx_cur_scope->__pyx_v_done, __pyx_v_dep); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3740, __pyx_L1_error)
+3741:                             stack.append(dep)
            __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_stack, __pyx_v_dep); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3741, __pyx_L1_error)
 3742: 
+3743:             for d in done:
    __pyx_t_12 = 0;
    __pyx_t_9 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_done, 1, (&__pyx_t_4), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_9;
    __pyx_t_9 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_3, __pyx_t_4, &__pyx_t_12, &__pyx_t_9, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3743, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_9);
      __pyx_t_9 = 0;
+3744:                 tasks.pop(d, None)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_tasks, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3744, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_d, Py_None};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3744, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_9);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_d, Py_None};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3744, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_9);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3744, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_6) {
          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
        }
        __Pyx_INCREF(__pyx_v_d);
        __Pyx_GIVEREF(__pyx_v_d);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_13, __pyx_v_d);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_13, Py_None);
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3744, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3745:                 dependencies.pop(d, None)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dependencies, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_d, Py_None};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3745, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_9);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_d, Py_None};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3745, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_9);
      } else
      #endif
      {
        __pyx_t_6 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_v_d);
        __Pyx_GIVEREF(__pyx_v_d);
        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_13, __pyx_v_d);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_13, Py_None);
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3746: 
 3747:         # Get or create task states
+3748:         stack = list(keys)
  __pyx_t_3 = PySequence_List(__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF_SET(__pyx_v_stack, ((PyObject*)__pyx_t_3));
  __pyx_t_3 = 0;
+3749:         touched_keys = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_touched_keys = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+3750:         touched_tasks = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_touched_tasks = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+3751:         while stack:
  while (1) {
    __pyx_t_5 = (PyList_GET_SIZE(__pyx_v_stack) != 0);
    if (!__pyx_t_5) break;
+3752:             k = stack.pop()
    __pyx_t_3 = __Pyx_PyList_Pop(__pyx_v_stack); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
    __pyx_t_3 = 0;
+3753:             if k in touched_keys:
    __pyx_t_5 = (__Pyx_PySet_ContainsTF(__pyx_v_k, __pyx_v_touched_keys, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3753, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_5 != 0);
    if (__pyx_t_14) {
/* … */
    }
+3754:                 continue
      goto __pyx_L47_continue;
 3755:             # XXX Have a method get_task_state(self, k) ?
+3756:             ts = parent._tasks.get(k)
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 3756, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
+3757:             if ts is None:
    __pyx_t_14 = (((PyObject *)__pyx_v_ts) == Py_None);
    __pyx_t_5 = (__pyx_t_14 != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L50;
    }
+3758:                 ts = self.new_task(k, tasks.get(k), "released")
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_new_task); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_tasks, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_k);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
          __pyx_t_8 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_k, __pyx_t_2, __pyx_n_u_released};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3758, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_k, __pyx_t_2, __pyx_n_u_released};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3758, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3758, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_6) {
          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
        }
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_k);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_t_2);
        __Pyx_INCREF(__pyx_n_u_released);
        __Pyx_GIVEREF(__pyx_n_u_released);
        PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_8, __pyx_n_u_released);
        __pyx_t_2 = 0;
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3758, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3758, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
      __pyx_t_3 = 0;
+3759:             elif not ts._run_spec:
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3759, __pyx_L1_error)
    __pyx_t_14 = ((!__pyx_t_5) != 0);
    if (__pyx_t_14) {
/* … */
    }
    __pyx_L50:;
+3760:                 ts._run_spec = tasks.get(k)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_tasks, __pyx_n_s_get); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_1, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_k);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_ts->_run_spec);
      __Pyx_DECREF(__pyx_v_ts->_run_spec);
      __pyx_v_ts->_run_spec = __pyx_t_3;
      __pyx_t_3 = 0;
 3761: 
+3762:             touched_keys.add(k)
    __pyx_t_16 = PySet_Add(__pyx_v_touched_keys, __pyx_v_k); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3762, __pyx_L1_error)
+3763:             touched_tasks.append(ts)
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_touched_tasks, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3763, __pyx_L1_error)
+3764:             stack.extend(dependencies.get(k, ()))
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_dependencies, __pyx_n_s_get); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_k, __pyx_empty_tuple};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3764, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_k, __pyx_empty_tuple};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3764, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3764, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_k);
      __Pyx_GIVEREF(__pyx_v_k);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_k);
      __Pyx_INCREF(__pyx_empty_tuple);
      __Pyx_GIVEREF(__pyx_empty_tuple);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_empty_tuple);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3764, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_16 = __Pyx_PyList_Extend(__pyx_v_stack, __pyx_t_3); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3764, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_L47_continue:;
  }
 3765: 
+3766:         self.client_desires_keys(keys=keys, client=client)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_desires_keys_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 3766, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 3766, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3767: 
 3768:         # Add dependencies
+3769:         for key, deps in dependencies.items():
  __pyx_t_4 = 0;
  if (unlikely(__pyx_v_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3769, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_dict_iterator(__pyx_v_dependencies, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_9;
  __pyx_t_9 = 0;
  while (1) {
    __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_12, &__pyx_t_4, &__pyx_t_9, &__pyx_t_3, NULL, __pyx_t_8);
    if (unlikely(__pyx_t_13 == 0)) break;
    if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_deps);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_deps, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
+3770:             ts = parent._tasks.get(key)
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 3770, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3770, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
+3771:             if ts is None or ts._dependencies:
    __pyx_t_5 = (((PyObject *)__pyx_v_ts) == Py_None);
    __pyx_t_10 = (__pyx_t_5 != 0);
    if (!__pyx_t_10) {
    } else {
      __pyx_t_14 = __pyx_t_10;
      goto __pyx_L54_bool_binop_done;
    }
    __pyx_t_10 = (__pyx_v_ts->_dependencies != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_dependencies) != 0);
    __pyx_t_14 = __pyx_t_10;
    __pyx_L54_bool_binop_done:;
    if (__pyx_t_14) {
/* … */
    }
+3772:                 continue
      goto __pyx_L51_continue;
+3773:             for dep in deps:
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_deps)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_deps)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_deps; __Pyx_INCREF(__pyx_t_3); __pyx_t_21 = 0;
      __pyx_t_20 = NULL;
    } else {
      __pyx_t_21 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_deps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3773, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_20 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3773, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_20)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_21); __Pyx_INCREF(__pyx_t_9); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 3773, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3773, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        } else {
          if (__pyx_t_21 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_21); __Pyx_INCREF(__pyx_t_9); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 3773, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3773, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        }
      } else {
        __pyx_t_9 = __pyx_t_20(__pyx_t_3);
        if (unlikely(!__pyx_t_9)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3773, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_XDECREF_SET(__pyx_v_dep, __pyx_t_9);
      __pyx_t_9 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_L51_continue:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3774:                 dts = parent._tasks[dep]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 3774, __pyx_L1_error)
      }
      __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_dep); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3774, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3774, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
      __pyx_t_9 = 0;
+3775:                 ts.add_dependency(dts)
      __pyx_t_9 = __pyx_f_11distributed_9scheduler_9TaskState_add_dependency(__pyx_v_ts, __pyx_v_dts, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 3776: 
 3777:         # Compute priorities
+3778:         if isinstance(user_priority, Number):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Number); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = PyObject_IsInstance(__pyx_v_user_priority, __pyx_t_2); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 3778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = (__pyx_t_14 != 0);
  if (__pyx_t_10) {
/* … */
  }
+3779:             user_priority = {k: user_priority for k in tasks}
    { /* enter inner scope */
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3779, __pyx_L61_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_tasks)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_tasks)) {
        __pyx_t_3 = __pyx_cur_scope->__pyx_v_tasks; __Pyx_INCREF(__pyx_t_3); __pyx_t_12 = 0;
        __pyx_t_20 = NULL;
      } else {
        __pyx_t_12 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_tasks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3779, __pyx_L61_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_20 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3779, __pyx_L61_error)
      }
      for (;;) {
        if (likely(!__pyx_t_20)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3779, __pyx_L61_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3779, __pyx_L61_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3779, __pyx_L61_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3779, __pyx_L61_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_20(__pyx_t_3);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 3779, __pyx_L61_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr40__pyx_v_k, __pyx_t_9);
        __pyx_t_9 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_9genexpr40__pyx_v_k, (PyObject*)__pyx_v_user_priority))) __PYX_ERR(0, 3779, __pyx_L61_error)
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_9genexpr40__pyx_v_k); __pyx_9genexpr40__pyx_v_k = 0;
      goto __pyx_L64_exit_scope;
      __pyx_L61_error:;
      __Pyx_XDECREF(__pyx_9genexpr40__pyx_v_k); __pyx_9genexpr40__pyx_v_k = 0;
      goto __pyx_L1_error;
      __pyx_L64_exit_scope:;
    } /* exit inner scope */
    __Pyx_DECREF_SET(__pyx_v_user_priority, __pyx_t_2);
    __pyx_t_2 = 0;
 3780: 
+3781:         annotations = annotations or {}
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_annotations); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3781, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_annotations);
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_annotations;
    goto __pyx_L65_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L65_bool_binop_done:;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_annotations);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_annotations, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+3782:         restrictions = restrictions or {}
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_restrictions); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3782, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_restrictions);
    __pyx_t_2 = __pyx_v_restrictions;
    goto __pyx_L67_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L67_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_restrictions, __pyx_t_2);
  __pyx_t_2 = 0;
+3783:         loose_restrictions = loose_restrictions or []
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_loose_restrictions); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3783, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_loose_restrictions);
    __pyx_t_2 = __pyx_v_loose_restrictions;
    goto __pyx_L69_bool_binop_done;
  }
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L69_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_loose_restrictions, __pyx_t_2);
  __pyx_t_2 = 0;
+3784:         resources = resources or {}
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_resources); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3784, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_resources);
    __pyx_t_2 = __pyx_v_resources;
    goto __pyx_L71_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L71_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_resources, __pyx_t_2);
  __pyx_t_2 = 0;
+3785:         retries = retries or {}
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_retries); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3785, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_retries);
    __pyx_t_2 = __pyx_v_retries;
    goto __pyx_L73_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L73_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_retries, __pyx_t_2);
  __pyx_t_2 = 0;
 3786: 
 3787:         # Override existing taxonomy with per task annotations
+3788:         if annotations:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_annotations); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3788, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
+3789:             if "priority" in annotations:
    __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_priority, __pyx_cur_scope->__pyx_v_annotations, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3789, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    if (__pyx_t_14) {
/* … */
    }
+3790:                 user_priority.update(annotations["priority"])
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_priority, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_annotations, __pyx_n_u_priority); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3791: 
+3792:             if "workers" in annotations:
    __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_workers, __pyx_cur_scope->__pyx_v_annotations, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3792, __pyx_L1_error)
    __pyx_t_10 = (__pyx_t_14 != 0);
    if (__pyx_t_10) {
/* … */
    }
+3793:                 restrictions.update(annotations["workers"])
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_restrictions, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_annotations, __pyx_n_u_workers); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3794: 
+3795:             if "allow_other_workers" in annotations:
    __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_allow_other_workers, __pyx_cur_scope->__pyx_v_annotations, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3795, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    if (__pyx_t_14) {
/* … */
    }
+3796:                 loose_restrictions.extend(
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_loose_restrictions, __pyx_n_s_extend); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
+3797:                     k for k, v in annotations["allow_other_workers"].items() if v
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_6genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_16_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_16_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_16_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_16_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_16_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3797, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_8generator31, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_update_graph_locals_ge, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_12update_graph_8generator31(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3797, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_annotations)) { __Pyx_RaiseClosureNameError("annotations"); __PYX_ERR(0, 3797, __pyx_L1_error) }
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_annotations, __pyx_n_u_allow_other_workers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 3797, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_6, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_v); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 3797, __pyx_L1_error)
    if (__pyx_t_8) {
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
      __pyx_r = __pyx_cur_scope->__pyx_v_k;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
      __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 3797, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
      __pyx_t_9 = __pyx_pf_11distributed_9scheduler_9Scheduler_12update_graph_6genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_16_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_13_update_graph *__pyx_outer_scope;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

 3798:                 )
 3799: 
+3800:             if "retries" in annotations:
    __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_retries, __pyx_cur_scope->__pyx_v_annotations, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3800, __pyx_L1_error)
    __pyx_t_10 = (__pyx_t_14 != 0);
    if (__pyx_t_10) {
/* … */
    }
+3801:                 retries.update(annotations["retries"])
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_retries, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_annotations, __pyx_n_u_retries); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3802: 
+3803:             if "resources" in annotations:
    __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_resources, __pyx_cur_scope->__pyx_v_annotations, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3803, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    if (__pyx_t_14) {
/* … */
    }
+3804:                 resources.update(annotations["resources"])
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_resources, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_annotations, __pyx_n_u_resources); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3805: 
+3806:             for a, kv in annotations.items():
    __pyx_t_12 = 0;
    if (unlikely(__pyx_cur_scope->__pyx_v_annotations == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 3806, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_annotations, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_12, &__pyx_t_3, &__pyx_t_9, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_kv, __pyx_t_9);
      __pyx_t_9 = 0;
+3807:                 for k, v in kv.items():
      __pyx_t_21 = 0;
      if (unlikely(__pyx_v_kv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 3807, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_kv, 0, __pyx_n_s_items, (&__pyx_t_22), (&__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3807, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_9);
      __pyx_t_9 = __pyx_t_3;
      __pyx_t_3 = 0;
      while (1) {
        __pyx_t_23 = __Pyx_dict_iter_next(__pyx_t_9, __pyx_t_22, &__pyx_t_21, &__pyx_t_3, &__pyx_t_1, NULL, __pyx_t_13);
        if (unlikely(__pyx_t_23 == 0)) break;
        if (unlikely(__pyx_t_23 == -1)) __PYX_ERR(0, 3807, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
        __pyx_t_1 = 0;
+3808:                     ts = parent._tasks[k]
        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 3808, __pyx_L1_error)
        }
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3808, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3808, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
        __pyx_t_1 = 0;
+3809:                     ts._annotations[a] = v
        if (unlikely(__pyx_v_ts->_annotations == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 3809, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_v_ts->_annotations, __pyx_v_a, __pyx_v_v) < 0)) __PYX_ERR(0, 3809, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3810: 
 3811:         # Add actors
+3812:         if actors is True:
  __pyx_t_14 = (__pyx_v_actors == Py_True);
  __pyx_t_10 = (__pyx_t_14 != 0);
  if (__pyx_t_10) {
/* … */
  }
+3813:             actors = list(keys)
    __pyx_t_2 = PySequence_List(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_actors, __pyx_t_2);
    __pyx_t_2 = 0;
+3814:         for actor in actors or []:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_actors); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3814, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_actors);
    __pyx_t_2 = __pyx_v_actors;
    goto __pyx_L88_bool_binop_done;
  }
  __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_2 = __pyx_t_9;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_L88_bool_binop_done:;
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_9 = __pyx_t_2; __Pyx_INCREF(__pyx_t_9); __pyx_t_4 = 0;
    __pyx_t_20 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_20 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3814, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_20)) {
      if (likely(PyList_CheckExact(__pyx_t_9))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_9)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3814, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_9, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3814, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3814, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_9, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3814, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_20(__pyx_t_9);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3814, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_actor, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3815:             ts = parent._tasks[actor]
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 3815, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_actor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3815, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
    __pyx_t_2 = 0;
+3816:             ts._actor = True
    __pyx_v_ts->_actor = 1;
 3817: 
+3818:         priority = priority or dask.order.order(
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_priority); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3818, __pyx_L1_error)
  if (!__pyx_t_10) {
  } else {
    __Pyx_INCREF(__pyx_v_priority);
    __pyx_t_9 = __pyx_v_priority;
    goto __pyx_L90_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_order); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_order); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3819:             tasks
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_cur_scope->__pyx_v_tasks) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_tasks);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L90_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_priority, __pyx_t_9);
  __pyx_t_9 = 0;
 3820:         )  # TODO: define order wrt old graph
 3821: 
+3822:         if submitting_task:  # sub-tasks get better priority than parent tasks
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_submitting_task); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3822, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
    goto __pyx_L92;
  }
+3823:             ts = parent._tasks.get(submitting_task)
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 3823, __pyx_L1_error)
    }
    __pyx_t_9 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_submitting_task, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3823, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3823, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
    __pyx_t_9 = 0;
+3824:             if ts is not None:
    __pyx_t_10 = (((PyObject *)__pyx_v_ts) != Py_None);
    __pyx_t_14 = (__pyx_t_10 != 0);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L93;
    }
+3825:                 generation = ts._priority[0] - 0.01
      if (unlikely(__pyx_v_ts->_priority == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 3825, __pyx_L1_error)
      }
      __pyx_t_9 = __Pyx_GetItemInt_Tuple(__pyx_v_ts->_priority, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_2 = __Pyx_PyFloat_SubtractObjC(__pyx_t_9, __pyx_float_0_01, 0.01, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_generation = __pyx_t_2;
      __pyx_t_2 = 0;
 3826:             else:  # super-task already cleaned up
+3827:                 generation = self.generation
    /*else*/ {
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_generation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_generation = __pyx_t_2;
      __pyx_t_2 = 0;
    }
    __pyx_L93:;
+3828:         elif self._last_time + fifo_timeout < start:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_last_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_fifo_timeout); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_9, __pyx_v_start, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_14) {
/* … */
    goto __pyx_L92;
  }
+3829:             self.generation += 1  # older graph generations take precedence
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_generation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_generation, __pyx_t_9) < 0) __PYX_ERR(0, 3829, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3830:             generation = self.generation
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_generation); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_generation = __pyx_t_9;
    __pyx_t_9 = 0;
+3831:             self._last_time = start
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_last_time, __pyx_v_start) < 0) __PYX_ERR(0, 3831, __pyx_L1_error)
 3832:         else:
+3833:             generation = self.generation
  /*else*/ {
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_generation); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_generation = __pyx_t_9;
    __pyx_t_9 = 0;
  }
  __pyx_L92:;
 3834: 
+3835:         for key in set(priority) & touched_keys:
  __pyx_t_4 = 0;
  __pyx_t_2 = PySet_New(__pyx_v_priority); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_And(__pyx_t_2, __pyx_v_touched_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_set_iterator(__pyx_t_1, 1, (&__pyx_t_12), (&__pyx_t_8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XDECREF(__pyx_t_9);
  __pyx_t_9 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_9, __pyx_t_12, &__pyx_t_4, &__pyx_t_2, __pyx_t_8);
    if (unlikely(__pyx_t_13 == 0)) break;
    if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
    __pyx_t_2 = 0;
+3836:             ts = parent._tasks[key]
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 3836, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3836, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
    __pyx_t_2 = 0;
+3837:             if ts._priority is None:
    __pyx_t_14 = (__pyx_v_ts->_priority == ((PyObject*)Py_None));
    __pyx_t_10 = (__pyx_t_14 != 0);
    if (__pyx_t_10) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3838:                 ts._priority = (-(user_priority.get(key, 0)), generation, priority[key])
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_priority, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3838, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_key, __pyx_int_0};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3838, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_key, __pyx_int_0};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3838, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_6 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3838, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_13, __pyx_v_key);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_13, __pyx_int_0);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3838, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3838, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_priority, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3838, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3838, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
      __Pyx_INCREF(__pyx_v_generation);
      __Pyx_GIVEREF(__pyx_v_generation);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_generation);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2);
      __pyx_t_1 = 0;
      __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_v_ts->_priority);
      __Pyx_DECREF(__pyx_v_ts->_priority);
      __pyx_v_ts->_priority = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
 3839: 
 3840:         # Ensure all runnables have a priority
+3841:         runnables = [ts for ts in touched_tasks if ts._run_spec]
  { /* enter inner scope */
    __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3841, __pyx_L99_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = __pyx_v_touched_tasks; __Pyx_INCREF(__pyx_t_6); __pyx_t_12 = 0;
    for (;;) {
      if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_6)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3841, __pyx_L99_error)
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3841, __pyx_L99_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3841, __pyx_L99_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr42__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
      __pyx_t_2 = 0;
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_9genexpr42__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3841, __pyx_L99_error)
      if (__pyx_t_10) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_9genexpr42__pyx_v_ts))) __PYX_ERR(0, 3841, __pyx_L99_error)
      }
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr42__pyx_v_ts); __pyx_9genexpr42__pyx_v_ts = 0;
    goto __pyx_L103_exit_scope;
    __pyx_L99_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr42__pyx_v_ts); __pyx_9genexpr42__pyx_v_ts = 0;
    goto __pyx_L1_error;
    __pyx_L103_exit_scope:;
  } /* exit inner scope */
  __pyx_v_runnables = ((PyObject*)__pyx_t_9);
  __pyx_t_9 = 0;
+3842:         for ts in runnables:
  __pyx_t_9 = __pyx_v_runnables; __Pyx_INCREF(__pyx_t_9); __pyx_t_12 = 0;
  for (;;) {
    if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_9)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_12); __Pyx_INCREF(__pyx_t_6); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 3842, __pyx_L1_error)
    #else
    __pyx_t_6 = PySequence_ITEM(__pyx_t_9, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3842, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3843:             if ts._priority is None and ts._run_spec:
    __pyx_t_14 = (__pyx_v_ts->_priority == ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_14 != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_10 = __pyx_t_5;
      goto __pyx_L107_bool_binop_done;
    }
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3843, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_5;
    __pyx_L107_bool_binop_done:;
    if (__pyx_t_10) {
/* … */
    }
+3844:                 ts._priority = (self.generation, 0)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_generation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_0);
      __pyx_t_6 = 0;
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_ts->_priority);
      __Pyx_DECREF(__pyx_v_ts->_priority);
      __pyx_v_ts->_priority = ((PyObject*)__pyx_t_2);
      __pyx_t_2 = 0;
 3845: 
+3846:         if restrictions:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_restrictions); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3846, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
 3847:             # *restrictions* is a dict keying task ids to lists of
 3848:             # restriction specifications (either worker names or addresses)
+3849:             for k, v in restrictions.items():
    __pyx_t_12 = 0;
    if (unlikely(__pyx_v_restrictions == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 3849, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_restrictions, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_9);
    __pyx_t_9 = __pyx_t_2;
    __pyx_t_2 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_9, __pyx_t_4, &__pyx_t_12, &__pyx_t_2, &__pyx_t_6, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3849, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
      __pyx_t_6 = 0;
+3850:                 if v is None:
      __pyx_t_10 = (__pyx_v_v == Py_None);
      __pyx_t_5 = (__pyx_t_10 != 0);
      if (__pyx_t_5) {
/* … */
      }
+3851:                     continue
        goto __pyx_L110_continue;
+3852:                 ts = parent._tasks.get(k)
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 3852, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3852, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
      __pyx_t_6 = 0;
+3853:                 if ts is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_10 = (__pyx_t_5 != 0);
      if (__pyx_t_10) {
/* … */
      }
+3854:                     continue
        goto __pyx_L110_continue;
+3855:                 ts._host_restrictions = set()
      __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3855, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_v_ts->_host_restrictions);
      __Pyx_DECREF(__pyx_v_ts->_host_restrictions);
      __pyx_v_ts->_host_restrictions = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
+3856:                 ts._worker_restrictions = set()
      __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_v_ts->_worker_restrictions);
      __Pyx_DECREF(__pyx_v_ts->_worker_restrictions);
      __pyx_v_ts->_worker_restrictions = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
+3857:                 for w in v:
      if (likely(PyList_CheckExact(__pyx_v_v)) || PyTuple_CheckExact(__pyx_v_v)) {
        __pyx_t_6 = __pyx_v_v; __Pyx_INCREF(__pyx_t_6); __pyx_t_22 = 0;
        __pyx_t_20 = NULL;
      } else {
        __pyx_t_22 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_v); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3857, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_20 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3857, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_20)) {
          if (likely(PyList_CheckExact(__pyx_t_6))) {
            if (__pyx_t_22 >= PyList_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_22); __Pyx_INCREF(__pyx_t_2); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 3857, __pyx_L1_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3857, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_22 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_22); __Pyx_INCREF(__pyx_t_2); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 3857, __pyx_L1_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3857, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_20(__pyx_t_6);
          if (unlikely(!__pyx_t_2)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 3857, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_2);
        __pyx_t_2 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_L110_continue:;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3858:                     try:
        {
          /*try:*/ {
/* … */
          }
/* … */
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          goto __pyx_L1_error;
          __pyx_L117_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_L123_try_end:;
        }
+3859:                         w = self.coerce_address(w)
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3859, __pyx_L116_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
              }
            }
            __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_v_w) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_w);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3859, __pyx_L116_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF_SET(__pyx_v_w, __pyx_t_2);
            __pyx_t_2 = 0;
+3860:                     except ValueError:
          __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
          if (__pyx_t_13) {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 3860, __pyx_L118_except_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_t_3);
 3861:                         # Not a valid address, but perhaps it's a hostname
+3862:                         ts._host_restrictions.add(w)
            if (unlikely(__pyx_v_ts->_host_restrictions == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
              __PYX_ERR(0, 3862, __pyx_L118_except_error)
            }
            __pyx_t_16 = PySet_Add(__pyx_v_ts->_host_restrictions, __pyx_v_w); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3862, __pyx_L118_except_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L117_exception_handled;
          }
          goto __pyx_L118_except_error;
          __pyx_L118_except_error:;
 3863:                     else:
+3864:                         ts._worker_restrictions.add(w)
          /*else:*/ {
            if (unlikely(__pyx_v_ts->_worker_restrictions == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
              __PYX_ERR(0, 3864, __pyx_L118_except_error)
            }
            __pyx_t_16 = PySet_Add(__pyx_v_ts->_worker_restrictions, __pyx_v_w); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 3864, __pyx_L118_except_error)
          }
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          goto __pyx_L123_try_end;
          __pyx_L116_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 3865: 
+3866:             if loose_restrictions:
    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_loose_restrictions); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3866, __pyx_L1_error)
    if (__pyx_t_10) {
/* … */
    }
+3867:                 for k in loose_restrictions:
      if (likely(PyList_CheckExact(__pyx_v_loose_restrictions)) || PyTuple_CheckExact(__pyx_v_loose_restrictions)) {
        __pyx_t_9 = __pyx_v_loose_restrictions; __Pyx_INCREF(__pyx_t_9); __pyx_t_4 = 0;
        __pyx_t_20 = NULL;
      } else {
        __pyx_t_4 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_v_loose_restrictions); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3867, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_20 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3867, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_20)) {
          if (likely(PyList_CheckExact(__pyx_t_9))) {
            if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_9)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3867, __pyx_L1_error)
            #else
            __pyx_t_6 = PySequence_ITEM(__pyx_t_9, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3867, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            #endif
          } else {
            if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3867, __pyx_L1_error)
            #else
            __pyx_t_6 = PySequence_ITEM(__pyx_t_9, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3867, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            #endif
          }
        } else {
          __pyx_t_6 = __pyx_t_20(__pyx_t_9);
          if (unlikely(!__pyx_t_6)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 3867, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_6);
        }
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
        __pyx_t_6 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3868:                     ts = parent._tasks[k]
        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 3868, __pyx_L1_error)
        }
        __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3868, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3868, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
+3869:                     ts._loose_restrictions = True
        __pyx_v_ts->_loose_restrictions = 1;
 3870: 
+3871:         if resources:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_resources); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3871, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
+3872:             for k, v in resources.items():
    __pyx_t_4 = 0;
    if (unlikely(__pyx_v_resources == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 3872, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_resources, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_8)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_9);
    __pyx_t_9 = __pyx_t_6;
    __pyx_t_6 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_9, __pyx_t_12, &__pyx_t_4, &__pyx_t_6, &__pyx_t_3, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_3);
      __pyx_t_3 = 0;
+3873:                 if v is None:
      __pyx_t_10 = (__pyx_v_v == Py_None);
      __pyx_t_5 = (__pyx_t_10 != 0);
      if (__pyx_t_5) {
/* … */
      }
+3874:                     continue
        goto __pyx_L130_continue;
+3875:                 assert isinstance(v, dict)
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_5 = PyDict_Check(__pyx_v_v); 
        if (unlikely(!(__pyx_t_5 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 3875, __pyx_L1_error)
        }
      }
      #endif
+3876:                 ts = parent._tasks.get(k)
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 3876, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3876, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3876, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
      __pyx_t_3 = 0;
+3877:                 if ts is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_10 = (__pyx_t_5 != 0);
      if (__pyx_t_10) {
/* … */
      }
+3878:                     continue
        goto __pyx_L130_continue;
+3879:                 ts._resource_restrictions = v
      if (!(likely(PyDict_CheckExact(__pyx_v_v))||((__pyx_v_v) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_v)->tp_name), 0))) __PYX_ERR(0, 3879, __pyx_L1_error)
      __pyx_t_3 = __pyx_v_v;
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_ts->_resource_restrictions);
      __Pyx_DECREF(__pyx_v_ts->_resource_restrictions);
      __pyx_v_ts->_resource_restrictions = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_L130_continue:;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 3880: 
+3881:         if retries:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_retries); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3881, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
+3882:             for k, v in retries.items():
    __pyx_t_12 = 0;
    if (unlikely(__pyx_v_retries == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 3882, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_retries, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_9);
    __pyx_t_9 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_9, __pyx_t_4, &__pyx_t_12, &__pyx_t_3, &__pyx_t_6, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3882, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
      __pyx_t_6 = 0;
+3883:                 assert isinstance(v, int)
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_10 = PyInt_Check(__pyx_v_v); 
        if (unlikely(!(__pyx_t_10 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 3883, __pyx_L1_error)
        }
      }
      #endif
+3884:                 ts = parent._tasks.get(k)
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 3884, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3884, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3884, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
      __pyx_t_6 = 0;
+3885:                 if ts is None:
      __pyx_t_10 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_5 = (__pyx_t_10 != 0);
      if (__pyx_t_5) {
/* … */
      }
+3886:                     continue
        goto __pyx_L135_continue;
+3887:                 ts._retries = v
      __pyx_t_22 = __Pyx_PyIndex_AsSsize_t(__pyx_v_v); if (unlikely((__pyx_t_22 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3887, __pyx_L1_error)
      __pyx_v_ts->_retries = __pyx_t_22;
      __pyx_L135_continue:;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 3888: 
 3889:         # Compute recommendations
+3890:         recommendations: dict = {}
  __pyx_t_9 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_v_recommendations = ((PyObject*)__pyx_t_9);
  __pyx_t_9 = 0;
 3891: 
+3892:         for ts in sorted(runnables, key=operator.attrgetter("priority"), reverse=True):
  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_runnables);
  __Pyx_GIVEREF(__pyx_v_runnables);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_runnables);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_operator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_priority) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_priority);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_key, __pyx_t_3) < 0) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_reverse, Py_True) < 0) __PYX_ERR(0, 3892, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_9, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
    __pyx_t_20 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_20 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3892, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_20)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3892, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3892, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3892, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3892, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_20(__pyx_t_6);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3892, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3892, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3893:             if ts._state == "released" and ts._run_spec:
    __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_released, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3893, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    if (__pyx_t_14) {
    } else {
      __pyx_t_5 = __pyx_t_14;
      goto __pyx_L141_bool_binop_done;
    }
    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3893, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_14;
    __pyx_L141_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+3894:                 recommendations[ts._key] = "waiting"
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_waiting) < 0)) __PYX_ERR(0, 3894, __pyx_L1_error)
 3895: 
+3896:         for ts in touched_tasks:
  __pyx_t_6 = __pyx_v_touched_tasks; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3896, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3897:             for dts in ts._dependencies:
    __pyx_t_12 = 0;
    __pyx_t_9 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_22), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_9;
    __pyx_t_9 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_3, __pyx_t_22, &__pyx_t_12, &__pyx_t_9, __pyx_t_8);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 3897, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3897, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
      __pyx_t_9 = 0;
+3898:                 if dts._exception_blame:
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_dts->_exception_blame); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3898, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
      }
    }
    __pyx_L146_break:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3899:                     ts._exception_blame = dts._exception_blame
        __pyx_t_9 = __pyx_v_dts->_exception_blame;
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_v_ts->_exception_blame);
        __Pyx_DECREF(__pyx_v_ts->_exception_blame);
        __pyx_v_ts->_exception_blame = __pyx_t_9;
        __pyx_t_9 = 0;
+3900:                     recommendations[ts._key] = "erred"
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_erred) < 0)) __PYX_ERR(0, 3900, __pyx_L1_error)
+3901:                     break
        goto __pyx_L146_break;
 3902: 
+3903:         for plugin in self.plugins[:]:
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_6, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
    __pyx_t_20 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_20 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3903, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_20)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3903, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3903, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3903, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3903, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_20(__pyx_t_6);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3903, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_plugin, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3904:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      goto __pyx_L157_try_end;
      __pyx_L150_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      goto __pyx_L1_error;
      __pyx_L151_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __pyx_L157_try_end:;
    }
+3905:                 plugin.update_graph(
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin, __pyx_n_s_update_graph_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3905, __pyx_L150_error)
        __Pyx_GOTREF(__pyx_t_3);
/* … */
        __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3905, __pyx_L150_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_v_self);
        __Pyx_GIVEREF(__pyx_v_self);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_self);
/* … */
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3905, __pyx_L150_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3906:                     self,
+3907:                     client=client,
        __pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3907, __pyx_L150_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3908:                     tasks=tasks,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tasks, __pyx_cur_scope->__pyx_v_tasks) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3909:                     keys=keys,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3910:                     restrictions=restrictions or {},
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_restrictions); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3910, __pyx_L150_error)
        if (!__pyx_t_5) {
        } else {
          __Pyx_INCREF(__pyx_v_restrictions);
          __pyx_t_1 = __pyx_v_restrictions;
          goto __pyx_L158_bool_binop_done;
        }
        __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3910, __pyx_L150_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_1 = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_L158_bool_binop_done:;
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_restrictions, __pyx_t_1) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3911:                     dependencies=dependencies,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dependencies, __pyx_v_dependencies) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3912:                     priority=priority,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_priority, __pyx_v_priority) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3913:                     loose_restrictions=loose_restrictions,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_loose_restrictions, __pyx_v_loose_restrictions) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3914:                     resources=resources,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_resources, __pyx_v_resources) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
+3915:                     annotations=annotations,
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_annotations, __pyx_cur_scope->__pyx_v_annotations) < 0) __PYX_ERR(0, 3907, __pyx_L150_error)
 3916:                 )
+3917:             except Exception as e:
      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_8) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 3917, __pyx_L152_except_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_v_e = __pyx_t_2;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
            goto __pyx_L166;
          }
          __pyx_L165_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
            __Pyx_XGOTREF(__pyx_t_26);
            __Pyx_XGOTREF(__pyx_t_27);
            __Pyx_XGOTREF(__pyx_t_28);
            __Pyx_XGOTREF(__pyx_t_29);
            __Pyx_XGOTREF(__pyx_t_30);
            __Pyx_XGOTREF(__pyx_t_31);
            __pyx_t_8 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e);
              __pyx_v_e = NULL;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_29);
              __Pyx_XGIVEREF(__pyx_t_30);
              __Pyx_XGIVEREF(__pyx_t_31);
              __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31);
            }
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_28);
            __Pyx_ErrRestore(__pyx_t_26, __pyx_t_27, __pyx_t_28);
            __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
            __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_25;
            goto __pyx_L152_except_error;
          }
          __pyx_L166:;
        }
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L151_exception_handled;
      }
      goto __pyx_L152_except_error;
      __pyx_L152_except_error:;
+3918:                 logger.exception(e)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3918, __pyx_L165_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exception); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 3918, __pyx_L165_error)
          __Pyx_GOTREF(__pyx_t_24);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_24))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_24);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_24, function);
            }
          }
          __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_24, __pyx_t_7, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_24, __pyx_v_e);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3918, __pyx_L165_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
 3919: 
+3920:         self.transitions(recommendations)
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 3921: 
+3922:         for ts in touched_tasks:
  __pyx_t_6 = __pyx_v_touched_tasks; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_9 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_9); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3922, __pyx_L1_error)
    #else
    __pyx_t_9 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    #endif
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3922, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
    __pyx_t_9 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3923:             if ts._state in ("memory", "erred"):
    __Pyx_INCREF(__pyx_v_ts->_state);
    __pyx_t_15 = __pyx_v_ts->_state;
    __pyx_t_14 = (__Pyx_PyUnicode_Equals(__pyx_t_15, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 3923, __pyx_L1_error)
    __pyx_t_10 = (__pyx_t_14 != 0);
    if (!__pyx_t_10) {
    } else {
      __pyx_t_5 = __pyx_t_10;
      goto __pyx_L174_bool_binop_done;
    }
    __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_15, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3923, __pyx_L1_error)
    __pyx_t_14 = (__pyx_t_10 != 0);
    __pyx_t_5 = __pyx_t_14;
    __pyx_L174_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_14 = (__pyx_t_5 != 0);
    if (__pyx_t_14) {
/* … */
    }
+3924:                 self.report_on_key(ts=ts, client=client)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report_on_key); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ts, ((PyObject *)__pyx_v_ts)) < 0) __PYX_ERR(0, 3924, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 3924, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3925: 
+3926:         end = time()
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_end = __pyx_t_6;
  __pyx_t_6 = 0;
+3927:         if self.digests is not None:
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_digests); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_14 = (__pyx_t_6 != Py_None);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_5 = (__pyx_t_14 != 0);
  if (__pyx_t_5) {
/* … */
  }
+3928:             self.digests["update-graph-duration"].add(end - start)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_digests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_kp_u_update_graph_duration); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_add); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_9, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 3929: 
 3930:         # TODO: balance workers
 3931: 
+3932:     def new_task(self, key, spec, state):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_27new_task(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_26new_task[] = " Create a new task, and associated states ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_27new_task = {"new_task", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_27new_task, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_26new_task};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_27new_task(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_spec = 0;
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("new_task (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_spec,&__pyx_n_s_state,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("new_task", 1, 4, 4, 1); __PYX_ERR(0, 3932, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spec)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("new_task", 1, 4, 4, 2); __PYX_ERR(0, 3932, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("new_task", 1, 4, 4, 3); __PYX_ERR(0, 3932, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "new_task") < 0)) __PYX_ERR(0, 3932, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_spec = values[2];
    __pyx_v_state = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("new_task", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3932, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.new_task", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_26new_task(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_spec, __pyx_v_state);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_26new_task(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_spec, PyObject *__pyx_v_state) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskPrefix *__pyx_v_tp = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_tg = 0;
  PyObject *__pyx_v_prefix_key = NULL;
  PyObject *__pyx_v_group_key = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("new_task", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.new_task", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_tp);
  __Pyx_XDECREF((PyObject *)__pyx_v_tg);
  __Pyx_XDECREF(__pyx_v_prefix_key);
  __Pyx_XDECREF(__pyx_v_group_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__182 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_spec, __pyx_n_s_state, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_tp, __pyx_n_s_tg, __pyx_n_s_prefix_key, __pyx_n_s_group_key_2); if (unlikely(!__pyx_tuple__182)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__182);
  __Pyx_GIVEREF(__pyx_tuple__182);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_27new_task, 0, __pyx_n_s_Scheduler_new_task, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__183)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_new_task, __pyx_t_12) < 0) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__183 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__182, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_new_task, 3932, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__183)) __PYX_ERR(0, 3932, __pyx_L1_error)
 3933:         """ Create a new task, and associated states """
+3934:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3935:         ts: TaskState = TaskState(key, spec)
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key);
  __Pyx_INCREF(__pyx_v_spec);
  __Pyx_GIVEREF(__pyx_v_spec);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_spec);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11distributed_9scheduler_TaskState), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2);
  __pyx_t_2 = 0;
 3936:         tp: TaskPrefix
 3937:         tg: TaskGroup
+3938:         ts._state = state
  if (!(likely(PyUnicode_CheckExact(__pyx_v_state))||((__pyx_v_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_state)->tp_name), 0))) __PYX_ERR(0, 3938, __pyx_L1_error)
  __pyx_t_2 = __pyx_v_state;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_ts->_state);
  __Pyx_DECREF(__pyx_v_ts->_state);
  __pyx_v_ts->_state = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3939:         prefix_key = key_split(key)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_key_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_prefix_key = __pyx_t_2;
  __pyx_t_2 = 0;
+3940:         tp = parent._task_prefixes.get(prefix_key)
  if (unlikely(__pyx_v_parent->_task_prefixes == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 3940, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_task_prefixes, __pyx_v_prefix_key, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskPrefix))))) __PYX_ERR(0, 3940, __pyx_L1_error)
  __pyx_v_tp = ((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_t_2);
  __pyx_t_2 = 0;
+3941:         if tp is None:
  __pyx_t_4 = (((PyObject *)__pyx_v_tp) == Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
  }
+3942:             parent._task_prefixes[prefix_key] = tp = TaskPrefix(prefix_key)
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_11distributed_9scheduler_TaskPrefix), __pyx_v_prefix_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3942, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_parent->_task_prefixes == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 3942, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_parent->_task_prefixes, __pyx_v_prefix_key, __pyx_t_2) < 0)) __PYX_ERR(0, 3942, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_tp, ((struct __pyx_obj_11distributed_9scheduler_TaskPrefix *)__pyx_t_2));
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3943:         ts._prefix = tp
  __Pyx_INCREF(((PyObject *)__pyx_v_tp));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_tp));
  __Pyx_GOTREF(__pyx_v_ts->_prefix);
  __Pyx_DECREF(((PyObject *)__pyx_v_ts->_prefix));
  __pyx_v_ts->_prefix = __pyx_v_tp;
 3944: 
+3945:         group_key = ts._group_key
  __pyx_t_2 = __pyx_v_ts->_group_key;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_group_key = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3946:         tg = parent._task_groups.get(group_key)
  if (unlikely(__pyx_v_parent->_task_groups == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 3946, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_task_groups, __pyx_v_group_key, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3946, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskGroup))))) __PYX_ERR(0, 3946, __pyx_L1_error)
  __pyx_v_tg = ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_2);
  __pyx_t_2 = 0;
+3947:         if tg is None:
  __pyx_t_5 = (((PyObject *)__pyx_v_tg) == Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {
/* … */
  }
+3948:             parent._task_groups[group_key] = tg = TaskGroup(group_key)
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_11distributed_9scheduler_TaskGroup), __pyx_v_group_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3948, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_parent->_task_groups == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 3948, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_parent->_task_groups, __pyx_v_group_key, __pyx_t_2) < 0)) __PYX_ERR(0, 3948, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_tg, ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_2));
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3949:             tg._prefix = tp
    __Pyx_INCREF(((PyObject *)__pyx_v_tp));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_tp));
    __Pyx_GOTREF(__pyx_v_tg->_prefix);
    __Pyx_DECREF(((PyObject *)__pyx_v_tg->_prefix));
    __pyx_v_tg->_prefix = __pyx_v_tp;
+3950:             tp._groups.append(tg)
    if (unlikely(__pyx_v_tp->_groups == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
      __PYX_ERR(0, 3950, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_tp->_groups, ((PyObject *)__pyx_v_tg)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3950, __pyx_L1_error)
+3951:         tg.add(ts)
  __pyx_t_2 = __pyx_f_11distributed_9scheduler_9TaskGroup_add(__pyx_v_tg, ((PyObject *)__pyx_v_ts), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3952:         parent._tasks[key] = ts
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 3952, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_parent->_tasks, __pyx_v_key, ((PyObject *)__pyx_v_ts)) < 0)) __PYX_ERR(0, 3952, __pyx_L1_error)
+3953:         return ts
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_ts));
  __pyx_r = ((PyObject *)__pyx_v_ts);
  goto __pyx_L0;
 3954: 
+3955:     def stimulus_task_finished(self, key=None, worker=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_29stimulus_task_finished(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_28stimulus_task_finished[] = " Mark that a task has finished execution on a particular worker ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_29stimulus_task_finished = {"stimulus_task_finished", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_29stimulus_task_finished, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_28stimulus_task_finished};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_29stimulus_task_finished(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_task_finished (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "stimulus_task_finished") < 0)) __PYX_ERR(0, 3955, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stimulus_task_finished", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3955, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_task_finished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_28stimulus_task_finished(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_28stimulus_task_finished(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_worker, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_tasks = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_task_finished", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_task_finished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_tasks);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__184 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_tasks, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_recommendations); if (unlikely(!__pyx_tuple__184)) __PYX_ERR(0, 3955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__184);
  __Pyx_GIVEREF(__pyx_tuple__184);
  __pyx_codeobj__185 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__184, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stimulus_task_finished, 3955, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__185)) __PYX_ERR(0, 3955, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_29stimulus_task_finished, 0, __pyx_n_s_Scheduler_stimulus_task_finished, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__185)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__186);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stimulus_task_finished, __pyx_t_12) < 0) __PYX_ERR(0, 3955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__186 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__186)) __PYX_ERR(0, 3955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__186);
  __Pyx_GIVEREF(__pyx_tuple__186);
 3956:         """ Mark that a task has finished execution on a particular worker """
+3957:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3958:         logger.debug("Stimulus task finished %s, %s", key, worker)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_task_finished_s_s, __pyx_v_key, __pyx_v_worker};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_task_finished_s_s, __pyx_v_key, __pyx_v_worker};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Stimulus_task_finished_s_s);
    __Pyx_GIVEREF(__pyx_kp_u_Stimulus_task_finished_s_s);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Stimulus_task_finished_s_s);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_worker);
    __Pyx_GIVEREF(__pyx_v_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_worker);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3959: 
+3960:         tasks: dict = parent._tasks
  __pyx_t_1 = __pyx_v_parent->_tasks;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_tasks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3961:         ts: TaskState = tasks.get(key)
  if (unlikely(__pyx_v_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 3961, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3961, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3962:         if ts is None:
  __pyx_t_6 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
/* … */
  }
+3963:             return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+3964:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 3964, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 3964, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3965:         ts._metadata.update(kwargs["metadata"])
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts->_metadata, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_n_u_metadata); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3966: 
 3967:         recommendations: dict
+3968:         if ts._state == "processing":
  __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_7 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L4;
  }
+3969:             recommendations = self.transition(key, "memory", worker=worker, **kwargs)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
    __Pyx_INCREF(__pyx_n_u_memory_2);
    __Pyx_GIVEREF(__pyx_n_u_memory_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_memory_2);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_worker, __pyx_v_worker) < 0) __PYX_ERR(0, 3969, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_2;
    __pyx_t_2 = 0;
    if (__Pyx_MergeKeywords(__pyx_t_5, __pyx_v_kwargs) < 0) __PYX_ERR(0, 3969, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 3969, __pyx_L1_error)
    __pyx_v_recommendations = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 3970: 
+3971:             if ts._state == "memory":
    __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3971, __pyx_L1_error)
    __pyx_t_7 = (__pyx_t_6 != 0);
    if (__pyx_t_7) {
/* … */
    }
+3972:                 assert ws in ts._who_has
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 3972, __pyx_L1_error)
        }
        __pyx_t_7 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ws), __pyx_v_ts->_who_has, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3972, __pyx_L1_error)
        if (unlikely(!(__pyx_t_7 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 3972, __pyx_L1_error)
        }
      }
      #endif
 3973:         else:
+3974:             logger.debug(
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 3975:                 "Received already computed task, worker: %s, state: %s"
 3976:                 ", key: %s, who_has: %s",
 3977:                 worker,
 3978:                 ts._state,
 3979:                 key,
+3980:                 ts._who_has,
    __pyx_t_5 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_kp_u_Received_already_computed_task_w, __pyx_v_worker, __pyx_v_ts->_state, __pyx_v_key, __pyx_v_ts->_who_has};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3974, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_kp_u_Received_already_computed_task_w, __pyx_v_worker, __pyx_v_ts->_state, __pyx_v_key, __pyx_v_ts->_who_has};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3974, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3974, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_Received_already_computed_task_w);
      __Pyx_GIVEREF(__pyx_kp_u_Received_already_computed_task_w);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_kp_u_Received_already_computed_task_w);
      __Pyx_INCREF(__pyx_v_worker);
      __Pyx_GIVEREF(__pyx_v_worker);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_v_worker);
      __Pyx_INCREF(__pyx_v_ts->_state);
      __Pyx_GIVEREF(__pyx_v_ts->_state);
      PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_4, __pyx_v_ts->_state);
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_4, __pyx_v_key);
      __Pyx_INCREF(__pyx_v_ts->_who_has);
      __Pyx_GIVEREF(__pyx_v_ts->_who_has);
      PyTuple_SET_ITEM(__pyx_t_1, 4+__pyx_t_4, __pyx_v_ts->_who_has);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3974, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3981:             )
+3982:             if ws not in ts._who_has:
    if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 3982, __pyx_L1_error)
    }
    __pyx_t_7 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ws), __pyx_v_ts->_who_has, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3982, __pyx_L1_error)
    __pyx_t_6 = (__pyx_t_7 != 0);
    if (__pyx_t_6) {
/* … */
    }
+3983:                 self.worker_send(worker, {"op": "release-task", "key": key})
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_worker_send); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_op, __pyx_kp_u_release_task) < 0) __PYX_ERR(0, 3983, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 3983, __pyx_L1_error)
      __pyx_t_5 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_worker, __pyx_t_1};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3983, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_worker, __pyx_t_1};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3983, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_INCREF(__pyx_v_worker);
        __Pyx_GIVEREF(__pyx_v_worker);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_v_worker);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3984:             recommendations = {}
    __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_recommendations = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
 3985: 
+3986:         return recommendations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_recommendations);
  __pyx_r = __pyx_v_recommendations;
  goto __pyx_L0;
 3987: 
+3988:     def stimulus_task_erred(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_31stimulus_task_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_30stimulus_task_erred[] = " Mark that a task has erred on a particular worker ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_31stimulus_task_erred = {"stimulus_task_erred", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_31stimulus_task_erred, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_30stimulus_task_erred};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_31stimulus_task_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_exception = 0;
  PyObject *__pyx_v_traceback = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_task_erred (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,&__pyx_n_s_exception,&__pyx_n_s_traceback,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_30stimulus_task_erred(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_worker, PyObject *__pyx_v_exception, PyObject *__pyx_v_traceback, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_retries = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_task_erred", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_task_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_retries);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__187 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_exception, __pyx_n_s_traceback, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_recommendations, __pyx_n_s_retries); if (unlikely(!__pyx_tuple__187)) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__187);
  __Pyx_GIVEREF(__pyx_tuple__187);
  __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stimulus_task_erred, 3988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) __PYX_ERR(0, 3988, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_31stimulus_task_erred, 0, __pyx_n_s_Scheduler_stimulus_task_erred, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__188)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__189);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stimulus_task_erred, __pyx_t_12) < 0) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__189 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__189)) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__189);
  __Pyx_GIVEREF(__pyx_tuple__189);
+3989:         self, key=None, worker=None, exception=None, traceback=None, **kwargs
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exception);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_traceback);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "stimulus_task_erred") < 0)) __PYX_ERR(0, 3988, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_exception = values[3];
    __pyx_v_traceback = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stimulus_task_erred", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3988, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_task_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_30stimulus_task_erred(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker, __pyx_v_exception, __pyx_v_traceback, __pyx_v_kwargs);
 3990:     ):
 3991:         """ Mark that a task has erred on a particular worker """
+3992:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3993:         logger.debug("Stimulus task erred %s, %s", key, worker)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_task_erred_s_s, __pyx_v_key, __pyx_v_worker};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_task_erred_s_s, __pyx_v_key, __pyx_v_worker};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Stimulus_task_erred_s_s);
    __Pyx_GIVEREF(__pyx_kp_u_Stimulus_task_erred_s_s);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Stimulus_task_erred_s_s);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_worker);
    __Pyx_GIVEREF(__pyx_v_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_worker);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3994: 
+3995:         ts: TaskState = parent._tasks.get(key)
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 3995, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 3995, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+3996:         if ts is None:
  __pyx_t_6 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
/* … */
  }
+3997:             return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 3998: 
 3999:         recommendations: dict
+4000:         if ts._state == "processing":
  __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4000, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_7 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L4;
  }
+4001:             retries = ts._retries
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_ts->_retries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_retries = __pyx_t_1;
    __pyx_t_1 = 0;
+4002:             if retries > 0:
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_retries, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L5;
    }
+4003:                 ts._retries = retries - 1
      __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_v_retries, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4003, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4003, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_ts->_retries = __pyx_t_8;
+4004:                 recommendations = self.transition(key, "waiting")
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_n_u_waiting};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4004, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_n_u_waiting};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4004, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      {
        __pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_v_key);
        __Pyx_INCREF(__pyx_n_u_waiting);
        __Pyx_GIVEREF(__pyx_n_u_waiting);
        PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_n_u_waiting);
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4004, __pyx_L1_error)
      __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
 4005:             else:
+4006:                 recommendations = self.transition(
    /*else*/ {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4006, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
/* … */
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4006, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
      __Pyx_INCREF(__pyx_n_u_erred);
      __Pyx_GIVEREF(__pyx_n_u_erred);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_erred);
/* … */
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4006, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyDict_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 4006, __pyx_L1_error)
      __pyx_v_recommendations = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L5:;
 4007:                     key,
 4008:                     "erred",
+4009:                     cause=key,
      __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4009, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_cause, __pyx_v_key) < 0) __PYX_ERR(0, 4009, __pyx_L1_error)
+4010:                     exception=exception,
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_exception, __pyx_v_exception) < 0) __PYX_ERR(0, 4009, __pyx_L1_error)
+4011:                     traceback=traceback,
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_traceback, __pyx_v_traceback) < 0) __PYX_ERR(0, 4009, __pyx_L1_error)
+4012:                     worker=worker,
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_worker, __pyx_v_worker) < 0) __PYX_ERR(0, 4009, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_5;
      __pyx_t_5 = 0;
+4013:                     **kwargs,
      if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kwargs) < 0) __PYX_ERR(0, 4013, __pyx_L1_error)
 4014:                 )
 4015:         else:
+4016:             recommendations = {}
  /*else*/ {
    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_recommendations = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;
  }
  __pyx_L4:;
 4017: 
+4018:         return recommendations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_recommendations);
  __pyx_r = __pyx_v_recommendations;
  goto __pyx_L0;
 4019: 
+4020:     def stimulus_missing_data(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_33stimulus_missing_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_32stimulus_missing_data[] = " Mark that certain keys have gone missing.  Recover. ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_33stimulus_missing_data = {"stimulus_missing_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_33stimulus_missing_data, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_32stimulus_missing_data};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_33stimulus_missing_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_cause = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_ensure = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_missing_data (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_cause,&__pyx_n_s_key,&__pyx_n_s_worker,&__pyx_n_s_ensure,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_32stimulus_missing_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_cause, PyObject *__pyx_v_key, PyObject *__pyx_v_worker, CYTHON_UNUSED PyObject *__pyx_v_ensure, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_cts = 0;
  PyObject *__pyx_v_recommendations = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_missing_data", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_missing_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_cts);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__190 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_cause, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_ensure, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_cts, __pyx_n_s_recommendations, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__190)) __PYX_ERR(0, 4020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__190);
  __Pyx_GIVEREF(__pyx_tuple__190);
  __pyx_codeobj__191 = (PyObject*)__Pyx_PyCode_New(5, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stimulus_missing_data, 4020, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__191)) __PYX_ERR(0, 4020, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_33stimulus_missing_data, 0, __pyx_n_s_Scheduler_stimulus_missing_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__191)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__192);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stimulus_missing_data, __pyx_t_12) < 0) __PYX_ERR(0, 4020, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__192 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__192)) __PYX_ERR(0, 4020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__192);
  __Pyx_GIVEREF(__pyx_tuple__192);
+4021:         self, cause=None, key=None, worker=None, ensure=True, **kwargs
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cause);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ensure);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "stimulus_missing_data") < 0)) __PYX_ERR(0, 4020, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_cause = values[1];
    __pyx_v_key = values[2];
    __pyx_v_worker = values[3];
    __pyx_v_ensure = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stimulus_missing_data", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4020, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_missing_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_32stimulus_missing_data(__pyx_self, __pyx_v_self, __pyx_v_cause, __pyx_v_key, __pyx_v_worker, __pyx_v_ensure, __pyx_v_kwargs);
 4022:     ):
 4023:         """ Mark that certain keys have gone missing.  Recover. """
+4024:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4025:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4025, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4025, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_missing_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_5) < 0) __PYX_ERR(0, 4025, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4025, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4025, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (__pyx_t_10 < 0) __PYX_ERR(0, 4025, __pyx_L9_except_error)
          __pyx_t_11 = ((!(__pyx_t_10 != 0)) != 0);
          if (__pyx_t_11) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_5);
            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(0, 4025, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4025, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4025, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L26;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L26:;
  }
+4026:             logger.debug("Stimulus missing data %s, %s", key, worker)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4026, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4026, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          __pyx_t_9 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_9 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_missing_data_s_s, __pyx_v_key, __pyx_v_worker};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L7_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Stimulus_missing_data_s_s, __pyx_v_key, __pyx_v_worker};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L7_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4026, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Stimulus_missing_data_s_s);
            __Pyx_GIVEREF(__pyx_kp_u_Stimulus_missing_data_s_s);
            PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_kp_u_Stimulus_missing_data_s_s);
            __Pyx_INCREF(__pyx_v_key);
            __Pyx_GIVEREF(__pyx_v_key);
            PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_v_key);
            __Pyx_INCREF(__pyx_v_worker);
            __Pyx_GIVEREF(__pyx_v_worker);
            PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_9, __pyx_v_worker);
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4027: 
+4028:             ts: TaskState = parent._tasks.get(key)
          if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(0, 4028, __pyx_L7_error)
          }
          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4028, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4028, __pyx_L7_error)
          __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
          __pyx_t_1 = 0;
+4029:             if ts is None or ts._state == "memory":
          __pyx_t_11 = (((PyObject *)__pyx_v_ts) == Py_None);
          __pyx_t_12 = (__pyx_t_11 != 0);
          if (!__pyx_t_12) {
          } else {
            __pyx_t_10 = __pyx_t_12;
            goto __pyx_L14_bool_binop_done;
          }
          __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4029, __pyx_L7_error)
          __pyx_t_11 = (__pyx_t_12 != 0);
          __pyx_t_10 = __pyx_t_11;
          __pyx_L14_bool_binop_done:;
          if (__pyx_t_10) {
/* … */
          }
+4030:                 return {}
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4030, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_r = __pyx_t_1;
            __pyx_t_1 = 0;
            goto __pyx_L11_try_return;
+4031:             cts: TaskState = parent._tasks.get(cause)
          if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(0, 4031, __pyx_L7_error)
          }
          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_cause, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4031, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4031, __pyx_L7_error)
          __pyx_v_cts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
          __pyx_t_1 = 0;
 4032: 
+4033:             recommendations: dict = {}
          __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4033, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
          __pyx_t_1 = 0;
 4034: 
+4035:             if cts is not None and cts._state == "memory":  # couldn't find this
          __pyx_t_11 = (((PyObject *)__pyx_v_cts) != Py_None);
          __pyx_t_12 = (__pyx_t_11 != 0);
          if (__pyx_t_12) {
          } else {
            __pyx_t_10 = __pyx_t_12;
            goto __pyx_L17_bool_binop_done;
          }
          __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_cts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4035, __pyx_L7_error)
          __pyx_t_11 = (__pyx_t_12 != 0);
          __pyx_t_10 = __pyx_t_11;
          __pyx_L17_bool_binop_done:;
          if (__pyx_t_10) {
/* … */
          }
 4036:                 ws: WorkerState
+4037:                 for ws in cts._who_has:  # TODO: this behavior is extreme
            __pyx_t_13 = 0;
            __pyx_t_3 = __Pyx_set_iterator(__pyx_v_cts->_who_has, 1, (&__pyx_t_14), (&__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4037, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_1);
            __pyx_t_1 = __pyx_t_3;
            __pyx_t_3 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_13, &__pyx_t_3, __pyx_t_9);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 4037, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4037, __pyx_L7_error)
              __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
              __pyx_t_3 = 0;
+4038:                     ws._has_what.remove(cts)
              if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
                __PYX_ERR(0, 4038, __pyx_L7_error)
              }
              __pyx_t_16 = __Pyx_PySet_Remove(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_cts)); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 4038, __pyx_L7_error)
+4039:                     ws._nbytes -= cts.get_nbytes()
              __pyx_t_17 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_cts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4039, __pyx_L7_error)
              __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes - __pyx_t_17);
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4040:                 cts._who_has.clear()
            if (unlikely(__pyx_v_cts->_who_has == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
              __PYX_ERR(0, 4040, __pyx_L7_error)
            }
            __pyx_t_16 = PySet_Clear(__pyx_v_cts->_who_has); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 4040, __pyx_L7_error)
+4041:                 recommendations[cause] = "released"
            if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_cause, __pyx_n_u_released) < 0)) __PYX_ERR(0, 4041, __pyx_L7_error)
 4042: 
+4043:             if key:
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_key); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4043, __pyx_L7_error)
          if (__pyx_t_10) {
/* … */
          }
+4044:                 recommendations[key] = "released"
            if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 4044, __pyx_L7_error)
 4045: 
+4046:             self.transitions(recommendations)
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4046, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_recommendations);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4046, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4047: 
+4048:             if parent._validate:
          __pyx_t_10 = (__pyx_v_parent->_validate != 0);
          if (__pyx_t_10) {
/* … */
          }
+4049:                 assert cause not in self.who_has
            #ifndef CYTHON_WITHOUT_ASSERTIONS
            if (unlikely(!Py_OptimizeFlag)) {
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_who_has); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4049, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_v_cause, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4049, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (unlikely(!(__pyx_t_10 != 0))) {
                PyErr_SetNone(PyExc_AssertionError);
                __PYX_ERR(0, 4049, __pyx_L7_error)
              }
            }
            #endif
 4050: 
+4051:             return {}
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4051, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          goto __pyx_L11_try_return;
 4052: 
+4053:     def stimulus_retry(self, comm=None, keys=None, client=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_35stimulus_retry(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_35stimulus_retry = {"stimulus_retry", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_35stimulus_retry, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_35stimulus_retry(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_retry (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_client,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stimulus_retry") < 0)) __PYX_ERR(0, 4053, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_client = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stimulus_retry", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4053, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_retry", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_34stimulus_retry(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_client);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_34stimulus_retry(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_stack = NULL;
  PyObject *__pyx_v_seen = NULL;
  PyObject *__pyx_v_roots = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_erred_deps = NULL;
  PyObject *__pyx_v_recommendations = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr43__pyx_v_dts = NULL;
  PyObject *__pyx_9genexpr44__pyx_v_key = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_retry", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_retry", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_stack);
  __Pyx_XDECREF(__pyx_v_seen);
  __Pyx_XDECREF(__pyx_v_roots);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_erred_deps);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr43__pyx_v_dts);
  __Pyx_XDECREF(__pyx_9genexpr44__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_38generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__193 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_stack, __pyx_n_s_seen, __pyx_n_s_roots, __pyx_n_s_ts, __pyx_n_s_dts, __pyx_n_s_key, __pyx_n_s_erred_deps, __pyx_n_s_recommendations, __pyx_n_s_dts, __pyx_n_s_key); if (unlikely(!__pyx_tuple__193)) __PYX_ERR(0, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__193);
  __Pyx_GIVEREF(__pyx_tuple__193);
  __pyx_codeobj__194 = (PyObject*)__Pyx_PyCode_New(4, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stimulus_retry, 4053, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__194)) __PYX_ERR(0, 4053, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_35stimulus_retry, 0, __pyx_n_s_Scheduler_stimulus_retry, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__194)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__195);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stimulus_retry, __pyx_t_12) < 0) __PYX_ERR(0, 4053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__195 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__195)) __PYX_ERR(0, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__195);
  __Pyx_GIVEREF(__pyx_tuple__195);
+4054:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4055:         logger.info("Client %s requests to retry %d keys", client, len(keys))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = PyObject_Length(__pyx_v_keys); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4055, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_Client_s_requests_to_retry_d_key, __pyx_v_client, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4055, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_Client_s_requests_to_retry_d_key, __pyx_v_client, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4055, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Client_s_requests_to_retry_d_key);
    __Pyx_GIVEREF(__pyx_kp_u_Client_s_requests_to_retry_d_key);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_kp_u_Client_s_requests_to_retry_d_key);
    __Pyx_INCREF(__pyx_v_client);
    __Pyx_GIVEREF(__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_client);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4056:         if client:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_client); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4056, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4057:             self.log_event(client, {"action": "retry", "count": len(keys)})
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_action, __pyx_n_u_retry) < 0) __PYX_ERR(0, 4057, __pyx_L1_error)
    __pyx_t_4 = PyObject_Length(__pyx_v_keys); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4057, __pyx_L1_error)
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_count, __pyx_t_2) < 0) __PYX_ERR(0, 4057, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4057, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4057, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4057, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_client);
      __Pyx_GIVEREF(__pyx_v_client);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_client);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4057, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4058: 
+4059:         stack = list(keys)
  __pyx_t_1 = PySequence_List(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_stack = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4060:         seen = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_seen = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4061:         roots = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_roots = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4062:         ts: TaskState
 4063:         dts: TaskState
+4064:         while stack:
  while (1) {
    __pyx_t_8 = (PyList_GET_SIZE(__pyx_v_stack) != 0);
    if (!__pyx_t_8) break;
+4065:             key = stack.pop()
    __pyx_t_1 = __Pyx_PyList_Pop(__pyx_v_stack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_1);
    __pyx_t_1 = 0;
+4066:             seen.add(key)
    __pyx_t_9 = PySet_Add(__pyx_v_seen, __pyx_v_key); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 4066, __pyx_L1_error)
+4067:             ts = parent._tasks[key]
    if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 4067, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4067, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
    __pyx_t_1 = 0;
+4068:             erred_deps = [dts._key for dts in ts._dependencies if dts._state == "erred"]
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4068, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_10), (&__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4068, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_3, __pyx_t_10, &__pyx_t_4, &__pyx_t_5, __pyx_t_6);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 4068, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4068, __pyx_L8_error)
        __Pyx_XDECREF_SET(__pyx_9genexpr43__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
        __pyx_t_5 = 0;
        __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_9genexpr43__pyx_v_dts->_state, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4068, __pyx_L8_error)
        __pyx_t_12 = (__pyx_t_8 != 0);
        if (__pyx_t_12) {
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr43__pyx_v_dts->_key))) __PYX_ERR(0, 4068, __pyx_L8_error)
        }
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr43__pyx_v_dts); __pyx_9genexpr43__pyx_v_dts = 0;
      goto __pyx_L12_exit_scope;
      __pyx_L8_error:;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr43__pyx_v_dts); __pyx_9genexpr43__pyx_v_dts = 0;
      goto __pyx_L1_error;
      __pyx_L12_exit_scope:;
    } /* exit inner scope */
    __Pyx_XDECREF_SET(__pyx_v_erred_deps, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+4069:             if erred_deps:
    __pyx_t_12 = (PyList_GET_SIZE(__pyx_v_erred_deps) != 0);
    if (__pyx_t_12) {
/* … */
      goto __pyx_L13;
    }
+4070:                 stack.extend(erred_deps)
      __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_stack, __pyx_v_erred_deps); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 4070, __pyx_L1_error)
 4071:             else:
+4072:                 roots.append(key)
    /*else*/ {
      __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_roots, __pyx_v_key); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 4072, __pyx_L1_error)
    }
    __pyx_L13:;
  }
 4073: 
+4074:         recommendations: dict = {key: "waiting" for key in roots}
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4074, __pyx_L16_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __pyx_v_roots; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0;
    for (;;) {
      if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4074, __pyx_L16_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4074, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_XDECREF_SET(__pyx_9genexpr44__pyx_v_key, __pyx_t_5);
      __pyx_t_5 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_9genexpr44__pyx_v_key, (PyObject*)__pyx_n_u_waiting))) __PYX_ERR(0, 4074, __pyx_L16_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_9genexpr44__pyx_v_key); __pyx_9genexpr44__pyx_v_key = 0;
    goto __pyx_L19_exit_scope;
    __pyx_L16_error:;
    __Pyx_XDECREF(__pyx_9genexpr44__pyx_v_key); __pyx_9genexpr44__pyx_v_key = 0;
    goto __pyx_L1_error;
    __pyx_L19_exit_scope:;
  } /* exit inner scope */
  __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4075:         self.transitions(recommendations)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4076: 
+4077:         if parent._validate:
  __pyx_t_12 = (__pyx_v_parent->_validate != 0);
  if (__pyx_t_12) {
/* … */
  }
+4078:             for key in seen:
    __pyx_t_10 = 0;
    __pyx_t_3 = __Pyx_set_iterator(__pyx_v_seen, 1, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4078, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_10, &__pyx_t_3, __pyx_t_6);
      if (unlikely(__pyx_t_11 == 0)) break;
      if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 4078, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
      __pyx_t_3 = 0;
+4079:                 assert not parent._tasks[key].exception_blame
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 4079, __pyx_L1_error)
        }
        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4079, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exception_blame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4079, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4079, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!((!__pyx_t_12) != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 4079, __pyx_L1_error)
        }
      }
      #endif
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4080: 
+4081:         return tuple(seen)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySequence_Tuple(__pyx_v_seen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4082: 
+4083:     async def remove_worker(self, comm=None, address=None, safe=False, close=True):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_37remove_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_36remove_worker[] = "\n        Remove worker from cluster\n\n        We do this when a worker reports that it plans to leave or when it\n        appears to be unresponsive.  This may send its tasks back to a released\n        state.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_37remove_worker = {"remove_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_37remove_worker, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_36remove_worker};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_37remove_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_safe = 0;
  PyObject *__pyx_v_close = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_address,&__pyx_n_s_safe,&__pyx_n_s_close,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_False));
    values[4] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_safe);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove_worker") < 0)) __PYX_ERR(0, 4083, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_address = values[2];
    __pyx_v_safe = values[3];
    __pyx_v_close = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_worker", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4083, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_36remove_worker(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_address, __pyx_v_safe, __pyx_v_close);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_36remove_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_address, PyObject *__pyx_v_safe, PyObject *__pyx_v_close) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_17_remove_worker(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_17_remove_worker, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4083, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_address = __pyx_v_address;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
  __pyx_cur_scope->__pyx_v_safe = __pyx_v_safe;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_safe);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_safe);
  __pyx_cur_scope->__pyx_v_close = __pyx_v_close;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_close);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_close);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_38generator5, __pyx_codeobj__58, (PyObject *) __pyx_cur_scope, __pyx_n_s_remove_worker, __pyx_n_s_Scheduler_remove_worker, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4083, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_38generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4083, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(((PyObject *)__pyx_t_22));
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__196 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_address, __pyx_n_s_safe, __pyx_n_s_close, __pyx_n_s_parent, __pyx_n_s_host, __pyx_n_s_ws, __pyx_n_s_recommendations, __pyx_n_s_ts, __pyx_n_s_k, __pyx_n_s_e, __pyx_n_s_r, __pyx_n_s_plugin, __pyx_n_s_result, __pyx_n_s_w, __pyx_n_s_remove_worker_from_events, __pyx_n_s_remove_worker_from_events, __pyx_n_s_cleanup_delay); if (unlikely(!__pyx_tuple__196)) __PYX_ERR(0, 4083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__196);
  __Pyx_GIVEREF(__pyx_tuple__196);
  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(5, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__196, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_worker, 4083, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 4083, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_37remove_worker, 0, __pyx_n_s_Scheduler_remove_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__197);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_remove_worker, __pyx_t_12) < 0) __PYX_ERR(0, 4083, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__197 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__197)) __PYX_ERR(0, 4083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__197);
  __Pyx_GIVEREF(__pyx_tuple__197);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker {
  PyObject_HEAD
  PyObject *__pyx_v_address;
  PyObject *__pyx_v_cleanup_delay;
  PyObject *__pyx_v_close;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_e;
  PyObject *__pyx_v_host;
  PyObject *__pyx_v_k;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_recommendations;
  PyObject *__pyx_v_remove_worker_from_events;
  PyObject *__pyx_v_result;
  PyObject *__pyx_v_safe;
  PyObject *__pyx_v_self;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_v_w;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *(*__pyx_t_9)(PyObject *);
};

 4084:         """
 4085:         Remove worker from cluster
 4086: 
 4087:         We do this when a worker reports that it plans to leave or when it
 4088:         appears to be unresponsive.  This may send its tasks back to a released
 4089:         state.
 4090:         """
+4091:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4092:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4092, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4092, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(((PyObject *)__pyx_t_22)); __pyx_t_22 = 0;
        __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_2, &__pyx_t_13) < 0) __PYX_ERR(0, 4092, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_26 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_2, __pyx_t_13); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4092, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_26, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4092, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (__pyx_t_9 < 0) __PYX_ERR(0, 4092, __pyx_L10_except_error)
          __pyx_t_10 = ((!(__pyx_t_9 != 0)) != 0);
          if (__pyx_t_10) {
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_2, __pyx_t_13);
            __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_t_13 = 0; 
            __PYX_ERR(0, 4092, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4092, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_14 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_14);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_14);
        __pyx_t_31 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4092, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_30);
          __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
        }
        __pyx_r = __pyx_t_31;
        __pyx_t_31 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_14);
        }
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_14 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L69;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L69:;
  }
+4093:             if self.status == Status.closed:
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4093, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4093, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_closed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4093, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4093, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4093, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (__pyx_t_9) {
/* … */
          }
+4094:                 return
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = NULL;
            goto __pyx_L12_try_return;
 4095: 
+4096:             address = self.coerce_address(address)
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4096, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4096, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_address);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_address, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_t_2 = 0;
 4097: 
+4098:             if address not in parent._workers_dv:
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 4098, __pyx_L8_error)
          }
          __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_v_address, __pyx_cur_scope->__pyx_v_parent->_workers_dv, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4098, __pyx_L8_error)
          __pyx_t_10 = (__pyx_t_9 != 0);
          if (__pyx_t_10) {
/* … */
          }
+4099:                 return "already-removed"
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_kp_u_already_removed);
            goto __pyx_L12_try_return;
 4100: 
+4101:             host = get_address_host(address)
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_address_host); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4101, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4101, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_v_host = __pyx_t_2;
          __pyx_t_2 = 0;
 4102: 
+4103:             ws: WorkerState = parent._workers_dv[address]
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 4103, __pyx_L8_error)
          }
          __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_v_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4103, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4103, __pyx_L8_error)
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
          __pyx_t_2 = 0;
 4104: 
+4105:             self.log_event(
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4105, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
+4106:                 ["all", address],
          __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4106, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_n_u_all);
          __Pyx_GIVEREF(__pyx_n_u_all);
          PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_all);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
          PyList_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_address);
 4107:                 {
+4108:                     "action": "remove-worker",
          __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4108, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_action, __pyx_kp_u_remove_worker_2) < 0) __PYX_ERR(0, 4108, __pyx_L8_error)
+4109:                     "worker": address,
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 4108, __pyx_L8_error)
+4110:                     "processing-tasks": dict(ws._processing),
          if (unlikely(__pyx_cur_scope->__pyx_v_ws->_processing == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
            __PYX_ERR(0, 4110, __pyx_L8_error)
          }
          __pyx_t_11 = PyDict_Copy(__pyx_cur_scope->__pyx_v_ws->_processing); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4110, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (PyDict_SetItem(__pyx_t_5, __pyx_kp_u_processing_tasks, __pyx_t_11) < 0) __PYX_ERR(0, 4108, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = NULL;
          __pyx_t_12 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_12 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_1, __pyx_t_5};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4105, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_1, __pyx_t_5};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4105, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          {
            __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4105, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (__pyx_t_11) {
              __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_5);
            PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_5);
            __pyx_t_1 = 0;
            __pyx_t_5 = 0;
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4105, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4111:                 },
 4112:             )
+4113:             logger.info("Remove worker %s", ws)
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4113, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4113, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = NULL;
          __pyx_t_12 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
              __pyx_t_12 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_13)) {
            PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Remove_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4113, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
            PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Remove_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4113, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4113, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (__pyx_t_3) {
              __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Remove_worker_s);
            __Pyx_GIVEREF(__pyx_kp_u_Remove_worker_s);
            PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_12, __pyx_kp_u_Remove_worker_s);
            __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_12, ((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4113, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4114:             if close:
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_close); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4114, __pyx_L8_error)
          if (__pyx_t_10) {
/* … */
          }
+4115:                 with suppress(AttributeError, CommClosedError):
            /*with:*/ {
              __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_suppress); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4115, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4115, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_3 = NULL;
              __pyx_t_12 = 0;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
                __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
                if (likely(__pyx_t_3)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                  __Pyx_INCREF(__pyx_t_3);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_13, function);
                  __pyx_t_12 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_13)) {
                PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_builtin_AttributeError, __pyx_t_5};
                __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4115, __pyx_L8_error)
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
                PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_builtin_AttributeError, __pyx_t_5};
                __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4115, __pyx_L8_error)
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              } else
              #endif
              {
                __pyx_t_1 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4115, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                if (__pyx_t_3) {
                  __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
                }
                __Pyx_INCREF(__pyx_builtin_AttributeError);
                __Pyx_GIVEREF(__pyx_builtin_AttributeError);
                PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_12, __pyx_builtin_AttributeError);
                __Pyx_GIVEREF(__pyx_t_5);
                PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_12, __pyx_t_5);
                __pyx_t_5 = 0;
                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4115, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              }
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __pyx_t_14 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4115, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4115, __pyx_L17_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = NULL;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
                if (likely(__pyx_t_5)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                  __Pyx_INCREF(__pyx_t_5);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_1, function);
                }
              }
              __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4115, __pyx_L17_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              /*try:*/ {
                {
                  /*try:*/ {
/* … */
                  }
                  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                  goto __pyx_L26_try_end;
                  __pyx_L21_error:;
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                  /*except:*/ {
                    __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
                    if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_13, &__pyx_t_1) < 0) __PYX_ERR(0, 4115, __pyx_L23_except_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_GOTREF(__pyx_t_13);
                    __Pyx_GOTREF(__pyx_t_1);
                    __pyx_t_5 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_13, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4115, __pyx_L23_except_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_5, NULL);
                    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4115, __pyx_L23_except_error)
                    __Pyx_GOTREF(__pyx_t_18);
                    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_18);
                    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                    if (__pyx_t_10 < 0) __PYX_ERR(0, 4115, __pyx_L23_except_error)
                    __pyx_t_9 = ((!(__pyx_t_10 != 0)) != 0);
                    if (__pyx_t_9) {
                      __Pyx_GIVEREF(__pyx_t_2);
                      __Pyx_GIVEREF(__pyx_t_13);
                      __Pyx_XGIVEREF(__pyx_t_1);
                      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_13, __pyx_t_1);
                      __pyx_t_2 = 0; __pyx_t_13 = 0; __pyx_t_1 = 0; 
                      __PYX_ERR(0, 4115, __pyx_L23_except_error)
                    }
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    goto __pyx_L22_exception_handled;
                  }
                  __pyx_L23_except_error:;
                  __Pyx_XGIVEREF(__pyx_t_15);
                  __Pyx_XGIVEREF(__pyx_t_16);
                  __Pyx_XGIVEREF(__pyx_t_17);
                  __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
                  goto __pyx_L8_error;
                  __pyx_L22_exception_handled:;
                  __Pyx_XGIVEREF(__pyx_t_15);
                  __Pyx_XGIVEREF(__pyx_t_16);
                  __Pyx_XGIVEREF(__pyx_t_17);
                  __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
                  __pyx_L26_try_end:;
                }
              }
              /*finally:*/ {
                /*normal exit:*/{
                  if (__pyx_t_14) {
                    __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__12, NULL);
                    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4115, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_17);
                    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  }
                  goto __pyx_L20;
                }
                __pyx_L20:;
              }
              goto __pyx_L30;
              __pyx_L17_error:;
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              goto __pyx_L8_error;
              __pyx_L30:;
            }
+4116:                     self.stream_comms[address].send({"op": "close", "report": False})
                    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_13);
                    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_cur_scope->__pyx_v_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_send); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_13);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_op, __pyx_n_u_close) < 0) __PYX_ERR(0, 4116, __pyx_L21_error)
                    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __pyx_t_5 = NULL;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
                      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_13);
                      if (likely(__pyx_t_5)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                        __Pyx_INCREF(__pyx_t_5);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_13, function);
                      }
                    }
                    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_1);
                    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4116, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4117: 
+4118:             self.remove_resources(address)
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_resources); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4118, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
            }
          }
          __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_2, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4118, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4119: 
+4120:             parent._host_info[host]["nthreads"] -= ws._nthreads
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4120, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_n_u_nthreads);
          __pyx_t_19 = __pyx_n_u_nthreads;
          __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_t_19); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4120, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_2 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_ws->_nthreads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4120, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = PyNumber_InPlaceSubtract(__pyx_t_13, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4120, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_19, __pyx_t_5) < 0)) __PYX_ERR(0, 4120, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4121:             parent._host_info[host]["addresses"].remove(address)
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4121, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_addresses); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4121, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_remove); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4121, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4121, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4122:             parent._total_nthreads -= ws._nthreads
          __pyx_cur_scope->__pyx_v_parent->_total_nthreads = (__pyx_cur_scope->__pyx_v_parent->_total_nthreads - __pyx_cur_scope->__pyx_v_ws->_nthreads);
 4123: 
+4124:             if not parent._host_info[host]["addresses"]:
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4124, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_addresses); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4124, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4124, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_10 = ((!__pyx_t_9) != 0);
          if (__pyx_t_10) {
/* … */
          }
+4125:                 del parent._host_info[host]
            if (unlikely(PyObject_DelItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host) < 0)) __PYX_ERR(0, 4125, __pyx_L8_error)
 4126: 
+4127:             self.rpc.remove(address)
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4127, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_remove); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4127, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_cur_scope->__pyx_v_address) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_address);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4127, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4128:             del self.stream_comms[address]
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4128, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(PyObject_DelItem(__pyx_t_5, __pyx_cur_scope->__pyx_v_address) < 0)) __PYX_ERR(0, 4128, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4129:             del parent._aliases[ws._name]
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_aliases == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 4129, __pyx_L8_error)
          }
          if (unlikely(PyDict_DelItem(__pyx_cur_scope->__pyx_v_parent->_aliases, __pyx_cur_scope->__pyx_v_ws->_name) < 0)) __PYX_ERR(0, 4129, __pyx_L8_error)
+4130:             parent._idle.pop(ws._address, None)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_parent->_idle, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4130, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = NULL;
          __pyx_t_12 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_12 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_ws->_address, Py_None};
            __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4130, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_ws->_address, Py_None};
            __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4130, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          {
            __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4130, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (__pyx_t_1) {
              __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ws->_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ws->_address);
            PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_cur_scope->__pyx_v_ws->_address);
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, Py_None);
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_13, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4130, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4131:             parent._saturated.discard(ws)
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_saturated == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
            __PYX_ERR(0, 4131, __pyx_L8_error)
          }
          __pyx_t_20 = __Pyx_PySet_Discard(__pyx_cur_scope->__pyx_v_parent->_saturated, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 4131, __pyx_L8_error)
+4132:             del parent._workers[address]
          if (unlikely(PyObject_DelItem(__pyx_cur_scope->__pyx_v_parent->_workers, __pyx_cur_scope->__pyx_v_address) < 0)) __PYX_ERR(0, 4132, __pyx_L8_error)
+4133:             ws.status = Status.closed
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4133, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_closed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4133, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_ws), __pyx_n_s_status, __pyx_t_2) < 0) __PYX_ERR(0, 4133, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4134:             parent._total_occupancy -= ws._occupancy
          __pyx_cur_scope->__pyx_v_parent->_total_occupancy = (__pyx_cur_scope->__pyx_v_parent->_total_occupancy - __pyx_cur_scope->__pyx_v_ws->_occupancy);
 4135: 
+4136:             recommendations: dict = {}
          __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4136, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_v_recommendations = ((PyObject*)__pyx_t_2);
          __pyx_t_2 = 0;
 4137: 
 4138:             ts: TaskState
+4139:             for ts in list(ws._processing):
          __pyx_t_2 = PySequence_List(__pyx_cur_scope->__pyx_v_ws->_processing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4139, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __pyx_t_2; __Pyx_INCREF(__pyx_t_5); __pyx_t_21 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          for (;;) {
            if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_21); __Pyx_INCREF(__pyx_t_2); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 4139, __pyx_L8_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4139, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
            if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4139, __pyx_L8_error)
            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4140:                 k = ts._key
            __pyx_t_2 = __pyx_cur_scope->__pyx_v_ts->_key;
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, ((PyObject*)__pyx_t_2));
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;
+4141:                 recommendations[k] = "released"
            if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_k, __pyx_n_u_released) < 0)) __PYX_ERR(0, 4141, __pyx_L8_error)
+4142:                 if not safe:
            __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_safe); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4142, __pyx_L8_error)
            __pyx_t_9 = ((!__pyx_t_10) != 0);
            if (__pyx_t_9) {
/* … */
            }
+4143:                     ts._suspicious += 1
              __pyx_cur_scope->__pyx_v_ts->_suspicious = (__pyx_cur_scope->__pyx_v_ts->_suspicious + 1);
+4144:                     ts._prefix._suspicious += 1
              __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts->_prefix));
              __pyx_t_22 = __pyx_cur_scope->__pyx_v_ts->_prefix;
              __pyx_t_22->_suspicious = (__pyx_t_22->_suspicious + 1);
              __Pyx_DECREF(((PyObject *)__pyx_t_22)); __pyx_t_22 = 0;
+4145:                     if ts._suspicious > self.allowed_failures:
              __pyx_t_2 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_ts->_suspicious); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4145, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_allowed_failures); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4145, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_13, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4145, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4145, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (__pyx_t_9) {
/* … */
              }
+4146:                         del recommendations[k]
                if (unlikely(PyDict_DelItem(__pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_k) < 0)) __PYX_ERR(0, 4146, __pyx_L8_error)
+4147:                         e = pickle.dumps(
                __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4147, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dumps); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4147, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
                __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4147, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_3);
                PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
                __pyx_t_3 = 0;
/* … */
                __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4147, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_e);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_e, __pyx_t_1);
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;
+4148:                             KilledWorker(task=k, last_worker=ws.clean()), protocol=4
                __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_KilledWorker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_task, __pyx_cur_scope->__pyx_v_k) < 0) __PYX_ERR(0, 4148, __pyx_L8_error)
                __pyx_t_3 = __pyx_f_11distributed_9scheduler_11WorkerState_clean(__pyx_cur_scope->__pyx_v_ws, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_last_worker, __pyx_t_3) < 0) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
                __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4148, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_protocol, __pyx_int_4) < 0) __PYX_ERR(0, 4148, __pyx_L8_error)
 4149:                         )
+4150:                         r = self.transition(k, "erred", exception=e, cause=k)
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4150, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4150, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_k);
                PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_k);
                __Pyx_INCREF(__pyx_n_u_erred);
                __Pyx_GIVEREF(__pyx_n_u_erred);
                PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_erred);
                __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4150, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_exception, __pyx_cur_scope->__pyx_v_e) < 0) __PYX_ERR(0, 4150, __pyx_L8_error)
                if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cause, __pyx_cur_scope->__pyx_v_k) < 0) __PYX_ERR(0, 4150, __pyx_L8_error)
                __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4150, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_13);
                __Pyx_GIVEREF(__pyx_t_13);
                __pyx_t_13 = 0;
+4151:                         recommendations.update(r)
                __pyx_t_13 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_r); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4151, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+4152:                         logger.info(
                __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4152, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4152, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4153:                             "Task %s marked as failed because %d workers died"
 4154:                             " while trying to run it",
 4155:                             ts._key,
+4156:                             self.allowed_failures,
                __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_allowed_failures); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4156, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_1 = NULL;
                __pyx_t_12 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                  __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
                  if (likely(__pyx_t_1)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                    __Pyx_INCREF(__pyx_t_1);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_3, function);
                    __pyx_t_12 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_3)) {
                  PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_Task_s_marked_as_failed_because, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_t_2};
                  __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4152, __pyx_L8_error)
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_GOTREF(__pyx_t_13);
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                  PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_Task_s_marked_as_failed_because, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_t_2};
                  __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4152, __pyx_L8_error)
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_GOTREF(__pyx_t_13);
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                } else
                #endif
                {
                  __pyx_t_11 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4152, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_11);
                  if (__pyx_t_1) {
                    __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL;
                  }
                  __Pyx_INCREF(__pyx_kp_u_Task_s_marked_as_failed_because);
                  __Pyx_GIVEREF(__pyx_kp_u_Task_s_marked_as_failed_because);
                  PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_12, __pyx_kp_u_Task_s_marked_as_failed_because);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ts->_key);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ts->_key);
                  PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_12, __pyx_cur_scope->__pyx_v_ts->_key);
                  __Pyx_GIVEREF(__pyx_t_2);
                  PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_12, __pyx_t_2);
                  __pyx_t_2 = 0;
                  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4152, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                }
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 4157:                         )
 4158: 
+4159:             for ts in ws._has_what:
          __pyx_t_21 = 0;
          __pyx_t_13 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_ws->_has_what, 1, (&__pyx_t_23), (&__pyx_t_12)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4159, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_XDECREF(__pyx_t_5);
          __pyx_t_5 = __pyx_t_13;
          __pyx_t_13 = 0;
          while (1) {
            __pyx_t_24 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_23, &__pyx_t_21, &__pyx_t_13, __pyx_t_12);
            if (unlikely(__pyx_t_24 == 0)) break;
            if (unlikely(__pyx_t_24 == -1)) __PYX_ERR(0, 4159, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4159, __pyx_L8_error)
            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_13));
            __Pyx_GIVEREF(__pyx_t_13);
            __pyx_t_13 = 0;
+4160:                 ts._who_has.remove(ws)
            if (unlikely(__pyx_cur_scope->__pyx_v_ts->_who_has == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
              __PYX_ERR(0, 4160, __pyx_L8_error)
            }
            __pyx_t_20 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_ts->_who_has, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 4160, __pyx_L8_error)
+4161:                 if not ts._who_has:
            __pyx_t_9 = (__pyx_cur_scope->__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_cur_scope->__pyx_v_ts->_who_has) != 0);
            __pyx_t_10 = ((!__pyx_t_9) != 0);
            if (__pyx_t_10) {
/* … */
            }
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4162:                     if ts._run_spec:
              __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4162, __pyx_L8_error)
              if (__pyx_t_10) {
/* … */
                goto __pyx_L39;
              }
+4163:                         recommendations[ts._key] = "released"
                if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 4163, __pyx_L8_error)
 4164:                     else:  # pure data
+4165:                         recommendations[ts._key] = "forgotten"
              /*else*/ {
                if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_recommendations, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 4165, __pyx_L8_error)
              }
              __pyx_L39:;
+4166:             ws._has_what.clear()
          if (unlikely(__pyx_cur_scope->__pyx_v_ws->_has_what == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
            __PYX_ERR(0, 4166, __pyx_L8_error)
          }
          __pyx_t_20 = PySet_Clear(__pyx_cur_scope->__pyx_v_ws->_has_what); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 4166, __pyx_L8_error)
 4167: 
+4168:             self.transitions(recommendations)
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4168, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
            }
          }
          __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_3, __pyx_cur_scope->__pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_cur_scope->__pyx_v_recommendations);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4168, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4169: 
+4170:             for plugin in self.plugins[:]:
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4170, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_13 = __Pyx_PyObject_GetSlice(__pyx_t_5, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4170, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (likely(PyList_CheckExact(__pyx_t_13)) || PyTuple_CheckExact(__pyx_t_13)) {
            __pyx_t_5 = __pyx_t_13; __Pyx_INCREF(__pyx_t_5); __pyx_t_23 = 0;
            __pyx_t_25 = NULL;
          } else {
            __pyx_t_23 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4170, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_25 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4170, __pyx_L8_error)
          }
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          for (;;) {
            if (likely(!__pyx_t_25)) {
              if (likely(PyList_CheckExact(__pyx_t_5))) {
                if (__pyx_t_23 >= PyList_GET_SIZE(__pyx_t_5)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_13 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_23); __Pyx_INCREF(__pyx_t_13); __pyx_t_23++; if (unlikely(0 < 0)) __PYX_ERR(0, 4170, __pyx_L8_error)
                #else
                __pyx_t_13 = PySequence_ITEM(__pyx_t_5, __pyx_t_23); __pyx_t_23++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4170, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_13);
                #endif
              } else {
                if (__pyx_t_23 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_23); __Pyx_INCREF(__pyx_t_13); __pyx_t_23++; if (unlikely(0 < 0)) __PYX_ERR(0, 4170, __pyx_L8_error)
                #else
                __pyx_t_13 = PySequence_ITEM(__pyx_t_5, __pyx_t_23); __pyx_t_23++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4170, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_13);
                #endif
              }
            } else {
              __pyx_t_13 = __pyx_t_25(__pyx_t_5);
              if (unlikely(!__pyx_t_13)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 4170, __pyx_L8_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_13);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_plugin);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_13);
            __Pyx_GIVEREF(__pyx_t_13);
            __pyx_t_13 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4171:                 try:
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              goto __pyx_L49_try_end;
              __pyx_L42_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(((PyObject *)__pyx_t_22)); __pyx_t_22 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_17, __pyx_t_16);
              goto __pyx_L8_error;
              __pyx_L43_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_17, __pyx_t_16);
              __pyx_L49_try_end:;
            }
+4172:                     result = plugin.remove_worker(scheduler=self, worker=address)
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_plugin, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4172, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4172, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_scheduler, __pyx_cur_scope->__pyx_v_self) < 0) __PYX_ERR(0, 4172, __pyx_L42_error)
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_worker, __pyx_cur_scope->__pyx_v_address) < 0) __PYX_ERR(0, 4172, __pyx_L42_error)
                __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4172, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_11);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_result);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_result, __pyx_t_11);
                __Pyx_GIVEREF(__pyx_t_11);
                __pyx_t_11 = 0;
+4173:                     if inspect.isawaitable(result):
                __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4173, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isawaitable); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4173, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_3 = NULL;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
                  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
                  if (likely(__pyx_t_3)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                    __Pyx_INCREF(__pyx_t_3);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_13, function);
                  }
                }
                __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_3, __pyx_cur_scope->__pyx_v_result) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_cur_scope->__pyx_v_result);
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4173, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_11);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4173, __pyx_L42_error)
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                if (__pyx_t_10) {
/* … */
                }
+4174:                         await result
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_cur_scope->__pyx_v_result);
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_5);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_14);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_14;
                    __Pyx_XGIVEREF(__pyx_t_16);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_16;
                    __Pyx_XGIVEREF(__pyx_t_17);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_17;
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_23;
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_25;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 1;
                    return __pyx_r;
                    __pyx_L51_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_5);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_14 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_14);
                    __pyx_t_16 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_16);
                    __pyx_t_17 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_17);
                    __pyx_t_23 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_t_25 = __pyx_cur_scope->__pyx_t_9;
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4174, __pyx_L42_error)
                  } else {
                    PyObject* exc_type = __Pyx_PyErr_Occurred();
                    if (exc_type) {
                      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                      else __PYX_ERR(0, 4174, __pyx_L42_error)
                    }
                  }
+4175:                 except Exception as e:
              __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
              if (__pyx_t_12) {
                __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_13, &__pyx_t_3) < 0) __PYX_ERR(0, 4175, __pyx_L44_except_error)
                __Pyx_GOTREF(__pyx_t_11);
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_13);
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_e);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_e, __pyx_t_13);
                __Pyx_GIVEREF(__pyx_t_13);
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                    __pyx_cur_scope->__pyx_v_e = NULL;
                    goto __pyx_L58;
                  }
                  __pyx_L57_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_assign
                    __pyx_t_15 = 0; __pyx_t_18 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XDECREF(((PyObject *)__pyx_t_22)); __pyx_t_22 = 0;
                    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
                    if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
                    if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_18, &__pyx_t_28) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_18, &__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_15);
                    __Pyx_XGOTREF(__pyx_t_18);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_29);
                    __Pyx_XGOTREF(__pyx_t_30);
                    __Pyx_XGOTREF(__pyx_t_31);
                    __pyx_t_12 = __pyx_lineno; __pyx_t_24 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
                    {
                      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                      __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                      __pyx_cur_scope->__pyx_v_e = NULL;
                    }
                    if (PY_MAJOR_VERSION >= 3) {
                      __Pyx_XGIVEREF(__pyx_t_29);
                      __Pyx_XGIVEREF(__pyx_t_30);
                      __Pyx_XGIVEREF(__pyx_t_31);
                      __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31);
                    }
                    __Pyx_XGIVEREF(__pyx_t_15);
                    __Pyx_XGIVEREF(__pyx_t_18);
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_ErrRestore(__pyx_t_15, __pyx_t_18, __pyx_t_28);
                    __pyx_t_15 = 0; __pyx_t_18 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
                    __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_24; __pyx_filename = __pyx_t_27;
                    goto __pyx_L44_except_error;
                  }
                  __pyx_L58:;
                }
                __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                goto __pyx_L43_exception_handled;
              }
              goto __pyx_L44_except_error;
              __pyx_L44_except_error:;
+4176:                     logger.exception(e)
                  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4176, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exception); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4176, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_26);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_1 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_26))) {
                    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_26);
                    if (likely(__pyx_t_1)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
                      __Pyx_INCREF(__pyx_t_1);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_26, function);
                    }
                  }
                  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_26, __pyx_t_1, __pyx_cur_scope->__pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_cur_scope->__pyx_v_e);
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4176, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                }
 4177: 
+4178:             if not parent._workers_dv:
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4178, __pyx_L8_error)
          __pyx_t_9 = ((!__pyx_t_10) != 0);
          if (__pyx_t_9) {
/* … */
          }
+4179:                 logger.info("Lost all workers")
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4179, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4179, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_13, function);
              }
            }
            __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_3, __pyx_kp_u_Lost_all_workers) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_u_Lost_all_workers);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4179, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4180: 
+4181:             for w in parent._workers_dv:
          __pyx_t_23 = 0;
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 4181, __pyx_L8_error)
          }
          __pyx_t_13 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, ((PyObject *)NULL), (&__pyx_t_21), (&__pyx_t_24)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4181, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_XDECREF(__pyx_t_5);
          __pyx_t_5 = __pyx_t_13;
          __pyx_t_13 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_21, &__pyx_t_23, &__pyx_t_13, NULL, NULL, __pyx_t_24);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4181, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_13);
            __Pyx_GIVEREF(__pyx_t_13);
            __pyx_t_13 = 0;
+4182:                 self.bandwidth_workers.pop((address, w), None)
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4182, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pop); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4182, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4182, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_address);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_w);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_w);
            PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_cur_scope->__pyx_v_w);
            __pyx_t_2 = NULL;
            __pyx_t_12 = 0;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
              __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_11);
              if (likely(__pyx_t_2)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
                __Pyx_INCREF(__pyx_t_2);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_11, function);
                __pyx_t_12 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, Py_None};
              __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4182, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, Py_None};
              __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4182, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            } else
            #endif
            {
              __pyx_t_26 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4182, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_26);
              if (__pyx_t_2) {
                __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_2); __pyx_t_2 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_26, 0+__pyx_t_12, __pyx_t_3);
              __Pyx_INCREF(Py_None);
              __Pyx_GIVEREF(Py_None);
              PyTuple_SET_ITEM(__pyx_t_26, 1+__pyx_t_12, Py_None);
              __pyx_t_3 = 0;
              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_26, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4182, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            }
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+4183:                 self.bandwidth_workers.pop((w, address), None)
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_bandwidth_workers); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4183, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_pop); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4183, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_26);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4183, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_w);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_w);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_v_w);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_address);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_address);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_cur_scope->__pyx_v_address);
            __pyx_t_3 = NULL;
            __pyx_t_12 = 0;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_26))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_26);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_26, function);
                __pyx_t_12 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_26)) {
              PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_11, Py_None};
              __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_26, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4183, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_26)) {
              PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_11, Py_None};
              __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_26, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4183, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            } else
            #endif
            {
              __pyx_t_2 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4183, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              if (__pyx_t_3) {
                __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_12, __pyx_t_11);
              __Pyx_INCREF(Py_None);
              __Pyx_GIVEREF(Py_None);
              PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_12, Py_None);
              __pyx_t_11 = 0;
              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_26, __pyx_t_2, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4183, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4184: 
+4185:             def remove_worker_from_events():
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_worker_1remove_worker_from_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_13remove_worker_1remove_worker_from_events = {"remove_worker_from_events", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_worker_1remove_worker_from_events, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_worker_1remove_worker_from_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker_from_events (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_13remove_worker_remove_worker_from_events(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_13remove_worker_remove_worker_from_events(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker_from_events", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_17_remove_worker *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_worker.remove_worker_from_events", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
          __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_13remove_worker_1remove_worker_from_events, 0, __pyx_n_s_Scheduler_remove_worker_locals_r, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4185, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_remove_worker_from_events = __pyx_t_5;
          __pyx_t_5 = 0;
/* … */
  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_worker_from_events, 4185, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 4185, __pyx_L1_error)
 4186:                 # If the worker isn't registered anymore after the delay, remove from events
+4187:                 if address not in parent._workers_dv and address in self.events:
  if (unlikely(!__pyx_cur_scope->__pyx_v_address)) { __Pyx_RaiseClosureNameError("address"); __PYX_ERR(0, 4187, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_parent)) { __Pyx_RaiseClosureNameError("parent"); __PYX_ERR(0, 4187, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 4187, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_v_address, __pyx_cur_scope->__pyx_v_parent->_workers_dv, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4187, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  if (unlikely(!__pyx_cur_scope->__pyx_v_address)) { __Pyx_RaiseClosureNameError("address"); __PYX_ERR(0, 4187, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4187, __pyx_L1_error) }
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_address, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4187, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4188:                     del self.events[address]
    if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4188, __pyx_L1_error) }
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_v_address)) { __Pyx_RaiseClosureNameError("address"); __PYX_ERR(0, 4188, __pyx_L1_error) }
    if (unlikely(PyObject_DelItem(__pyx_t_4, __pyx_cur_scope->__pyx_v_address) < 0)) __PYX_ERR(0, 4188, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4189: 
+4190:             cleanup_delay = parse_timedelta(
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4190, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
+4191:                 dask.config.get("distributed.scheduler.events-cleanup-delay")
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4191, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4191, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4191, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_26 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_11, __pyx_kp_u_distributed_scheduler_events_cle) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_events_cle);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4191, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_26);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
            }
          }
          __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_2, __pyx_t_26) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_26);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4190, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_cleanup_delay = __pyx_t_5;
          __pyx_t_5 = 0;
 4192:             )
+4193:             self.loop.call_later(cleanup_delay, remove_worker_from_events)
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4193, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_call_later); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4193, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_26);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_13 = NULL;
          __pyx_t_24 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_26))) {
            __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_26);
            if (likely(__pyx_t_13)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_26, function);
              __pyx_t_24 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_26)) {
            PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_cur_scope->__pyx_v_cleanup_delay, __pyx_cur_scope->__pyx_v_remove_worker_from_events};
            __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_26, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4193, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_26)) {
            PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_cur_scope->__pyx_v_cleanup_delay, __pyx_cur_scope->__pyx_v_remove_worker_from_events};
            __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_26, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4193, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          {
            __pyx_t_2 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4193, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (__pyx_t_13) {
              __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_13); __pyx_t_13 = NULL;
            }
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_cleanup_delay);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_cleanup_delay);
            PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_24, __pyx_cur_scope->__pyx_v_cleanup_delay);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_remove_worker_from_events);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_remove_worker_from_events);
            PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_24, __pyx_cur_scope->__pyx_v_remove_worker_from_events);
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_26, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4193, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4194:             logger.debug("Removed worker %s", ws)
          __Pyx_GetModuleGlobalName(__pyx_t_26, __pyx_n_s_logger); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4194, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_26, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4194, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_26 = NULL;
          __pyx_t_24 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_26)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_26);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_24 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_26, __pyx_kp_u_Removed_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4194, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_26, __pyx_kp_u_Removed_worker_s, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
            __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4194, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          {
            __pyx_t_13 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4194, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (__pyx_t_26) {
              __Pyx_GIVEREF(__pyx_t_26); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_26); __pyx_t_26 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Removed_worker_s);
            __Pyx_GIVEREF(__pyx_kp_u_Removed_worker_s);
            PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_24, __pyx_kp_u_Removed_worker_s);
            __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_24, ((PyObject *)__pyx_cur_scope->__pyx_v_ws));
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_13, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4194, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4195: 
+4196:         return "OK"
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_n_u_OK);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4197: 
+4198:     def stimulus_cancel(self, comm, keys=None, client=None, force=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_40stimulus_cancel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_39stimulus_cancel[] = " Stop execution on a list of keys ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_40stimulus_cancel = {"stimulus_cancel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_40stimulus_cancel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_39stimulus_cancel};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_40stimulus_cancel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_force = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_cancel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_client,&__pyx_n_s_force,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("stimulus_cancel", 0, 2, 5, 1); __PYX_ERR(0, 4198, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_force);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stimulus_cancel") < 0)) __PYX_ERR(0, 4198, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_client = values[3];
    __pyx_v_force = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stimulus_cancel", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4198, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_39stimulus_cancel(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_client, __pyx_v_force);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_39stimulus_cancel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_client, PyObject *__pyx_v_force) {
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stimulus_cancel", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stimulus_cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__198 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_client, __pyx_n_s_force, __pyx_n_s_key); if (unlikely(!__pyx_tuple__198)) __PYX_ERR(0, 4198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__198);
  __Pyx_GIVEREF(__pyx_tuple__198);
  __pyx_codeobj__199 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__198, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stimulus_cancel, 4198, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__199)) __PYX_ERR(0, 4198, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_40stimulus_cancel, 0, __pyx_n_s_Scheduler_stimulus_cancel, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__199)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__200);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stimulus_cancel, __pyx_t_12) < 0) __PYX_ERR(0, 4198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__200 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__200)) __PYX_ERR(0, 4198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__200);
  __Pyx_GIVEREF(__pyx_tuple__200);
 4199:         """ Stop execution on a list of keys """
+4200:         logger.info("Client %s requests to cancel %d keys", client, len(keys))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = PyObject_Length(__pyx_v_keys); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4200, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_Client_s_requests_to_cancel_d_ke, __pyx_v_client, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4200, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_Client_s_requests_to_cancel_d_ke, __pyx_v_client, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4200, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Client_s_requests_to_cancel_d_ke);
    __Pyx_GIVEREF(__pyx_kp_u_Client_s_requests_to_cancel_d_ke);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_kp_u_Client_s_requests_to_cancel_d_ke);
    __Pyx_INCREF(__pyx_v_client);
    __Pyx_GIVEREF(__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_client);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4201:         if client:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_client); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4201, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4202:             self.log_event(
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4202, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+4203:                 client, {"action": "cancel", "count": len(keys), "force": force}
    __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_action, __pyx_n_u_cancel) < 0) __PYX_ERR(0, 4203, __pyx_L1_error)
    __pyx_t_4 = PyObject_Length(__pyx_v_keys); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4203, __pyx_L1_error)
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_count, __pyx_t_2) < 0) __PYX_ERR(0, 4203, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_force, __pyx_v_force) < 0) __PYX_ERR(0, 4203, __pyx_L1_error)
    __pyx_t_2 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4202, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4202, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4202, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_client);
      __Pyx_GIVEREF(__pyx_v_client);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_client);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4202, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4204:             )
+4205:         for key in keys:
  if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
    __pyx_t_1 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4205, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4205, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4205, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4205, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4205, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_9(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4205, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4206:             self.cancel_key(key, client, force=force)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cancel_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_client);
    __Pyx_GIVEREF(__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_client);
    __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_force, __pyx_v_force) < 0) __PYX_ERR(0, 4206, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4207: 
+4208:     def cancel_key(self, key, client, retries=5, force=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_42cancel_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_41cancel_key[] = " Cancel a particular key and all dependents ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_42cancel_key = {"cancel_key", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_42cancel_key, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_41cancel_key};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_42cancel_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_retries = 0;
  PyObject *__pyx_v_force = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel_key (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_client,&__pyx_n_s_retries,&__pyx_n_s_force,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[3] = ((PyObject *)((PyObject *)__pyx_int_5));
    values[4] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cancel_key", 0, 3, 5, 1); __PYX_ERR(0, 4208, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cancel_key", 0, 3, 5, 2); __PYX_ERR(0, 4208, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_retries);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_force);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cancel_key") < 0)) __PYX_ERR(0, 4208, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_client = values[2];
    __pyx_v_retries = values[3];
    __pyx_v_force = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cancel_key", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4208, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.cancel_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_41cancel_key(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_client, __pyx_v_retries, __pyx_v_force);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_41cancel_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_client, PyObject *__pyx_v_retries, PyObject *__pyx_v_force) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_clients = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel_key", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_18_cancel_key(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_18_cancel_key, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4208, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_key = __pyx_v_key;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
  __pyx_cur_scope->__pyx_v_client = __pyx_v_client;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  __pyx_cur_scope->__pyx_v_retries = __pyx_v_retries;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_retries);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_retries);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.cancel_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_clients);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__201 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_client, __pyx_n_s_retries, __pyx_n_s_force, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts, __pyx_n_s_cs, __pyx_n_s_clients); if (unlikely(!__pyx_tuple__201)) __PYX_ERR(0, 4208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__201);
  __Pyx_GIVEREF(__pyx_tuple__201);
  __pyx_codeobj__202 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_cancel_key, 4208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__202)) __PYX_ERR(0, 4208, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_42cancel_key, 0, __pyx_n_s_Scheduler_cancel_key, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__202)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__203);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_cancel_key, __pyx_t_12) < 0) __PYX_ERR(0, 4208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__203 = PyTuple_Pack(2, ((PyObject *)__pyx_int_5), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__203)) __PYX_ERR(0, 4208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__203);
  __Pyx_GIVEREF(__pyx_tuple__203);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key {
  PyObject_HEAD
  PyObject *__pyx_v_client;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_retries;
  PyObject *__pyx_v_self;
};

 4209:         """ Cancel a particular key and all dependents """
 4210:         # TODO: this should be converted to use the transition mechanism
+4211:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4212:         ts: TaskState = parent._tasks.get(key)
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 4212, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4212, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4213:         dts: TaskState
+4214:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }
+4215:             cs: ClientState = parent._clients[client]
      if (unlikely(__pyx_v_parent->_clients == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4215, __pyx_L3_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_clients, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4215, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4215, __pyx_L3_error)
      __pyx_v_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1);
      __pyx_t_1 = 0;
+4216:         except KeyError:
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.cancel_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 4216, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
+4217:             return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+4218:         if ts is None or not ts._who_wants:  # no key yet, lets try again in a moment
  __pyx_t_9 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_10 = (__pyx_t_9 != 0);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_8 = __pyx_t_10;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
  __pyx_t_9 = ((!__pyx_t_10) != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_8) {
/* … */
  }
+4219:             if retries:
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_retries); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4219, __pyx_L1_error)
    if (__pyx_t_8) {
/* … */
    }
+4220:                 self.loop.call_later(
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4220, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_call_later); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4220, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4221:                     0.2, lambda: self.cancel_key(key, client, retries - 1)
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_10cancel_key_lambda9(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_10cancel_key_lambda9 = {"lambda9", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_10cancel_key_lambda9, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_10cancel_key_lambda9(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda9 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda9(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda9(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda9", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_18_cancel_key *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4221, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_cancel_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(!__pyx_cur_scope->__pyx_v_key)) { __Pyx_RaiseClosureNameError("key"); __PYX_ERR(0, 4221, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_client)) { __Pyx_RaiseClosureNameError("client"); __PYX_ERR(0, 4221, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_retries)) { __Pyx_RaiseClosureNameError("retries"); __PYX_ERR(0, 4221, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_cur_scope->__pyx_v_retries, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_key, __pyx_cur_scope->__pyx_v_client, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4221, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_key, __pyx_cur_scope->__pyx_v_client, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4221, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_cur_scope->__pyx_v_key);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_client);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.cancel_key.lambda9", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
      __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_10cancel_key_lambda9, 0, __pyx_n_s_Scheduler_cancel_key_locals_lamb, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_5 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_2, __pyx_t_6};
        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4220, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_2, __pyx_t_6};
        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4220, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else
      #endif
      {
        __pyx_t_12 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4220, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__pyx_t_11) {
          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
        }
        __Pyx_INCREF(__pyx_float_0_2);
        __Pyx_GIVEREF(__pyx_float_0_2);
        PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_5, __pyx_float_0_2);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_5, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_12, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4220, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4222:                 )
+4223:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4224:         if force or ts._who_wants == {cs}:  # no one else wants this key
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4224, __pyx_L1_error)
  if (!__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L16_bool_binop_done;
  }
  __pyx_t_7 = PySet_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PySet_Add(__pyx_t_7, ((PyObject *)__pyx_v_cs)) < 0) __PYX_ERR(0, 4224, __pyx_L1_error)
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ts->_who_wants, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __pyx_t_9;
  __pyx_L16_bool_binop_done:;
  if (__pyx_t_8) {
/* … */
  }
+4225:             for dts in list(ts._dependents):
    __pyx_t_1 = PySequence_List(__pyx_v_ts->_dependents); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_7)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4225, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4225, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4226:                 self.cancel_key(dts._key, client, force=force)
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_cancel_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_INCREF(__pyx_v_dts->_key);
      __Pyx_GIVEREF(__pyx_v_dts->_key);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_dts->_key);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_cur_scope->__pyx_v_client);
      __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_force, __pyx_v_force) < 0) __PYX_ERR(0, 4226, __pyx_L1_error)
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_12, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+4227:         logger.info("Scheduler cancels key %s.  Force=%s", key, force)
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logger); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_kp_u_Scheduler_cancels_key_s_Force_s, __pyx_cur_scope->__pyx_v_key, __pyx_v_force};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4227, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_kp_u_Scheduler_cancels_key_s_Force_s, __pyx_cur_scope->__pyx_v_key, __pyx_v_force};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4227, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Scheduler_cancels_key_s_Force_s);
    __Pyx_GIVEREF(__pyx_kp_u_Scheduler_cancels_key_s_Force_s);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_5, __pyx_kp_u_Scheduler_cancels_key_s_Force_s);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_key);
    __Pyx_INCREF(__pyx_v_force);
    __Pyx_GIVEREF(__pyx_v_force);
    PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_5, __pyx_v_force);
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4228:         self.report({"op": "cancelled-key", "key": key})
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_report); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_12 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_op, __pyx_kp_u_cancelled_key) < 0) __PYX_ERR(0, 4228, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_key, __pyx_cur_scope->__pyx_v_key) < 0) __PYX_ERR(0, 4228, __pyx_L1_error)
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_7 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_11, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4229:         clients = list(ts._who_wants) if force else [cs]
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4229, __pyx_L1_error)
  if (__pyx_t_8) {
    __pyx_t_6 = PySequence_List(__pyx_v_ts->_who_wants); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(((PyObject *)__pyx_v_cs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_cs));
    PyList_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_cs));
    __pyx_t_7 = __pyx_t_6;
    __pyx_t_6 = 0;
  }
  __pyx_v_clients = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
+4230:         for cs in clients:
  if (unlikely(__pyx_v_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 4230, __pyx_L1_error)
  }
  __pyx_t_7 = __pyx_v_clients; __Pyx_INCREF(__pyx_t_7); __pyx_t_13 = 0;
  for (;;) {
    if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_7)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_13); __Pyx_INCREF(__pyx_t_6); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4230, __pyx_L1_error)
    #else
    __pyx_t_6 = PySequence_ITEM(__pyx_t_7, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4230, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_6));
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4231:             self.client_releases_keys(keys=[key], client=cs._client_key)
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_releases_keys_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = PyList_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
    PyList_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_v_key);
    if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_keys, __pyx_t_11) < 0) __PYX_ERR(0, 4231, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_client, __pyx_v_cs->_client_key) < 0) __PYX_ERR(0, 4231, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 4232: 
+4233:     def client_desires_keys(self, keys=None, client=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_44client_desires_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_44client_desires_keys = {"client_desires_keys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_44client_desires_keys, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_44client_desires_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_desires_keys (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_keys,&__pyx_n_s_client,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "client_desires_keys") < 0)) __PYX_ERR(0, 4233, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_keys = values[1];
    __pyx_v_client = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("client_desires_keys", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4233, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_desires_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_43client_desires_keys(__pyx_self, __pyx_v_self, __pyx_v_keys, __pyx_v_client);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_43client_desires_keys(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_keys, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_desires_keys", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_desires_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__204 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_keys, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_cs, __pyx_n_s_ts, __pyx_n_s_k); if (unlikely(!__pyx_tuple__204)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__204);
  __Pyx_GIVEREF(__pyx_tuple__204);
  __pyx_codeobj__205 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_client_desires_keys_2, 4233, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__205)) __PYX_ERR(0, 4233, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_44client_desires_keys, 0, __pyx_n_s_Scheduler_client_desires_keys, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__205)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__206);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_client_desires_keys_2, __pyx_t_12) < 0) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__206 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__206)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__206);
  __Pyx_GIVEREF(__pyx_tuple__206);
+4234:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4235:         cs: ClientState = parent._clients.get(client)
  if (unlikely(__pyx_v_parent->_clients == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 4235, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_clients, __pyx_v_client, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4235, __pyx_L1_error)
  __pyx_v_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4236:         if cs is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_cs) == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
 4237:             # For publish, queues etc.
+4238:             parent._clients[client] = cs = ClientState(client)
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_11distributed_9scheduler_ClientState), __pyx_v_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_parent->_clients == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 4238, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_parent->_clients, __pyx_v_client, __pyx_t_1) < 0)) __PYX_ERR(0, 4238, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1));
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4239:         ts: TaskState
+4240:         for k in keys:
  if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
    __pyx_t_1 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4240, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4240, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4240, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4240, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4240, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4240, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4241:             ts = parent._tasks.get(k)
    if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 4241, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4241, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+4242:             if ts is None:
    __pyx_t_3 = (((PyObject *)__pyx_v_ts) == Py_None);
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
 4243:                 # For publish, queues etc.
+4244:                 ts = self.new_task(k, None, "released")
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_new_task); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4244, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
          __pyx_t_9 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_7)) {
        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_k, Py_None, __pyx_n_u_released};
        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4244, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_6);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_k, Py_None, __pyx_n_u_released};
        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4244, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_6);
      } else
      #endif
      {
        __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4244, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (__pyx_t_8) {
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
        }
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_v_k);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, Py_None);
        __Pyx_INCREF(__pyx_n_u_released);
        __Pyx_GIVEREF(__pyx_n_u_released);
        PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_n_u_released);
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4244, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4244, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
      __pyx_t_6 = 0;
+4245:             ts._who_wants.add(cs)
    if (unlikely(__pyx_v_ts->_who_wants == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
      __PYX_ERR(0, 4245, __pyx_L1_error)
    }
    __pyx_t_11 = PySet_Add(__pyx_v_ts->_who_wants, ((PyObject *)__pyx_v_cs)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 4245, __pyx_L1_error)
+4246:             cs._wants_what.add(ts)
    if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
      __PYX_ERR(0, 4246, __pyx_L1_error)
    }
    __pyx_t_11 = PySet_Add(__pyx_v_cs->_wants_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 4246, __pyx_L1_error)
 4247: 
+4248:             if ts._state in ("memory", "erred"):
    __Pyx_INCREF(__pyx_v_ts->_state);
    __pyx_t_12 = __pyx_v_ts->_state;
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4248, __pyx_L1_error)
    __pyx_t_13 = (__pyx_t_3 != 0);
    if (!__pyx_t_13) {
    } else {
      __pyx_t_2 = __pyx_t_13;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_t_12, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 4248, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_13 != 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L8_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
/* … */
    }
+4249:                 self.report_on_key(ts=ts, client=client)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report_on_key); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4249, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4249, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_ts, ((PyObject *)__pyx_v_ts)) < 0) __PYX_ERR(0, 4249, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 4249, __pyx_L1_error)
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4249, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 4250: 
+4251:     def client_releases_keys(self, keys=None, client=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_46client_releases_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_45client_releases_keys[] = " Remove keys from client desired list ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_46client_releases_keys = {"client_releases_keys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_46client_releases_keys, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_45client_releases_keys};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_46client_releases_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_releases_keys (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_keys,&__pyx_n_s_client,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "client_releases_keys") < 0)) __PYX_ERR(0, 4251, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_keys = values[1];
    __pyx_v_client = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("client_releases_keys", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4251, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_releases_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_45client_releases_keys(__pyx_self, __pyx_v_self, __pyx_v_keys, __pyx_v_client);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_45client_releases_keys(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_keys, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_releases_keys", 0);
  __Pyx_INCREF(__pyx_v_keys);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_releases_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__207 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_keys, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_cs, __pyx_n_s_recommendations); if (unlikely(!__pyx_tuple__207)) __PYX_ERR(0, 4251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__207);
  __Pyx_GIVEREF(__pyx_tuple__207);
  __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_client_releases_keys_2, 4251, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) __PYX_ERR(0, 4251, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_46client_releases_keys, 0, __pyx_n_s_Scheduler_client_releases_keys, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__208)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__209);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_client_releases_keys_2, __pyx_t_12) < 0) __PYX_ERR(0, 4251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__209 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__209)) __PYX_ERR(0, 4251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__209);
  __Pyx_GIVEREF(__pyx_tuple__209);
 4252:         """ Remove keys from client desired list """
 4253: 
+4254:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4255:         if not isinstance(keys, list):
  __pyx_t_2 = PyList_Check(__pyx_v_keys); 
  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
  if (__pyx_t_3) {
/* … */
  }
+4256:             keys = list(keys)
    __pyx_t_1 = PySequence_List(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_1);
    __pyx_t_1 = 0;
+4257:         cs: ClientState = parent._clients[client]
  if (unlikely(__pyx_v_parent->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4257, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_clients, __pyx_v_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4257, __pyx_L1_error)
  __pyx_v_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4258:         recommendations: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4259: 
+4260:         _client_releases_keys(parent, keys=keys, cs=cs, recommendations=recommendations)
  if (!(likely(PyList_CheckExact(__pyx_v_keys))||((__pyx_v_keys) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_keys)->tp_name), 0))) __PYX_ERR(0, 4260, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11distributed_9scheduler__client_releases_keys(__pyx_v_parent, ((PyObject*)__pyx_v_keys), __pyx_v_cs, __pyx_v_recommendations); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4261:         self.transitions(recommendations)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4262: 
+4263:     def client_heartbeat(self, client=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_48client_heartbeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_47client_heartbeat[] = " Handle heartbeats from Client ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_48client_heartbeat = {"client_heartbeat", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_48client_heartbeat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_47client_heartbeat};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_48client_heartbeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_heartbeat (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "client_heartbeat") < 0)) __PYX_ERR(0, 4263, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("client_heartbeat", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4263, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_heartbeat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_47client_heartbeat(__pyx_self, __pyx_v_self, __pyx_v_client);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_47client_heartbeat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_heartbeat", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_heartbeat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__210 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_cs); if (unlikely(!__pyx_tuple__210)) __PYX_ERR(0, 4263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__210);
  __Pyx_GIVEREF(__pyx_tuple__210);
  __pyx_codeobj__211 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_client_heartbeat, 4263, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__211)) __PYX_ERR(0, 4263, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_48client_heartbeat, 0, __pyx_n_s_Scheduler_client_heartbeat, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__211)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__212);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_client_heartbeat, __pyx_t_12) < 0) __PYX_ERR(0, 4263, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__212 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__212)) __PYX_ERR(0, 4263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__212);
  __Pyx_GIVEREF(__pyx_tuple__212);
 4264:         """ Handle heartbeats from Client """
+4265:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4266:         cs: ClientState = parent._clients[client]
  if (unlikely(__pyx_v_parent->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4266, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_clients, __pyx_v_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4266, __pyx_L1_error)
  __pyx_v_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4267:         cs._last_seen = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cs->_last_seen = __pyx_t_4;
 4268: 
 4269:     ###################
 4270:     # Task Validation #
 4271:     ###################
 4272: 
+4273:     def validate_released(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_50validate_released(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_50validate_released = {"validate_released", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_50validate_released, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_50validate_released(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_released (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_released", 1, 2, 2, 1); __PYX_ERR(0, 4273, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_released") < 0)) __PYX_ERR(0, 4273, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_released", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4273, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_49validate_released(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_49validate_released(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr45__pyx_v_dts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_released", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_released", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr45__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__213 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts, __pyx_n_s_dts); if (unlikely(!__pyx_tuple__213)) __PYX_ERR(0, 4273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__213);
  __Pyx_GIVEREF(__pyx_tuple__213);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_50validate_released, 0, __pyx_n_s_Scheduler_validate_released, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__214)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_released, __pyx_t_12) < 0) __PYX_ERR(0, 4273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_released, 4273, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) __PYX_ERR(0, 4273, __pyx_L1_error)
+4274:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4275:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4275, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4275, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4276:         dts: TaskState
+4277:         assert ts._state == "released"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_released, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4277, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4277, __pyx_L1_error)
    }
  }
  #endif
+4278:         assert not ts._waiters
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4278, __pyx_L1_error)
    }
  }
  #endif
+4279:         assert not ts._waiting_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4279, __pyx_L1_error)
    }
  }
  #endif
+4280:         assert not ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4280, __pyx_L1_error)
    }
  }
  #endif
+4281:         assert not ts._processing_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4281, __pyx_L1_error)
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4281, __pyx_L1_error)
    }
  }
  #endif
+4282:         assert not any([ts in dts._waiters for dts in ts._dependencies])
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4282, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = 0;
      __pyx_t_7 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4282, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_8 = __Pyx_set_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_7, __pyx_t_6);
        if (unlikely(__pyx_t_8 == 0)) break;
        if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 4282, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4282, __pyx_L5_error)
        __Pyx_XDECREF_SET(__pyx_9genexpr45__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_7));
        __pyx_t_7 = 0;
        if (unlikely(__pyx_9genexpr45__pyx_v_dts->_waiters == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 4282, __pyx_L5_error)
        }
        __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_9genexpr45__pyx_v_dts->_waiters, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4282, __pyx_L5_error)
        __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4282, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 4282, __pyx_L5_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr45__pyx_v_dts); __pyx_9genexpr45__pyx_v_dts = 0;
      goto __pyx_L8_exit_scope;
      __pyx_L5_error:;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr45__pyx_v_dts); __pyx_9genexpr45__pyx_v_dts = 0;
      goto __pyx_L1_error;
      __pyx_L8_exit_scope:;
    } /* exit inner scope */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4282, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4282, __pyx_L1_error)
    }
  }
  #endif
+4283:         assert ts not in parent._unrunnable
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_parent->_unrunnable == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4283, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_parent->_unrunnable, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4283, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4283, __pyx_L1_error)
    }
  }
  #endif
 4284: 
+4285:     def validate_waiting(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_52validate_waiting(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_52validate_waiting = {"validate_waiting", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_52validate_waiting, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_52validate_waiting(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_waiting (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_waiting", 1, 2, 2, 1); __PYX_ERR(0, 4285, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_waiting") < 0)) __PYX_ERR(0, 4285, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_waiting", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4285, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_51validate_waiting(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_51validate_waiting(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_waiting", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_waiting", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__215 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts); if (unlikely(!__pyx_tuple__215)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__215);
  __Pyx_GIVEREF(__pyx_tuple__215);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_52validate_waiting, 0, __pyx_n_s_Scheduler_validate_waiting, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__216)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_waiting, __pyx_t_12) < 0) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_waiting, 4285, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) __PYX_ERR(0, 4285, __pyx_L1_error)
+4286:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4287:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4287, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4287, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4288:         dts: TaskState
+4289:         assert ts._waiting_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
    if (unlikely(!__pyx_t_2)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4289, __pyx_L1_error)
    }
  }
  #endif
+4290:         assert not ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4290, __pyx_L1_error)
    }
  }
  #endif
+4291:         assert not ts._processing_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4291, __pyx_L1_error)
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4291, __pyx_L1_error)
    }
  }
  #endif
+4292:         assert ts not in parent._unrunnable
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_parent->_unrunnable == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4292, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_parent->_unrunnable, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4292, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4292, __pyx_L1_error)
    }
  }
  #endif
+4293:         for dts in ts._dependencies:
  __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
 4294:             # We are waiting on a dependency iff it's not stored
+4295:             assert (not not dts._who_has) != (dts in ts._waiting_on)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
      if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 4295, __pyx_L1_error)
      }
      __pyx_t_8 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_dts), __pyx_v_ts->_waiting_on, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4295, __pyx_L1_error)
      if (unlikely(!(((!((!__pyx_t_2) != 0)) != __pyx_t_8) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4295, __pyx_L1_error)
      }
    }
    #endif
+4296:             assert ts in dts._waiters  # XXX even if dts._who_has?
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_dts->_waiters == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 4296, __pyx_L1_error)
      }
      __pyx_t_8 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_dts->_waiters, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4296, __pyx_L1_error)
      if (unlikely(!(__pyx_t_8 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4296, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4297: 
+4298:     def validate_processing(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_54validate_processing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_54validate_processing = {"validate_processing", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_54validate_processing, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_54validate_processing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_processing (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_processing", 1, 2, 2, 1); __PYX_ERR(0, 4298, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_processing") < 0)) __PYX_ERR(0, 4298, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_processing", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4298, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_53validate_processing(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_53validate_processing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_processing", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__217 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__217)) __PYX_ERR(0, 4298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__217);
  __Pyx_GIVEREF(__pyx_tuple__217);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_54validate_processing, 0, __pyx_n_s_Scheduler_validate_processing, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__218)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_processing, __pyx_t_12) < 0) __PYX_ERR(0, 4298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_processing, 4298, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) __PYX_ERR(0, 4298, __pyx_L1_error)
+4299:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4300:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4300, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4300, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4301:         dts: TaskState
+4302:         assert not ts._waiting_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4302, __pyx_L1_error)
    }
  }
  #endif
+4303:         ws: WorkerState = ts._processing_on
  __pyx_t_1 = ((PyObject *)__pyx_v_ts->_processing_on);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4304:         assert ws
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4304, __pyx_L1_error)
    if (unlikely(!__pyx_t_2)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4304, __pyx_L1_error)
    }
  }
  #endif
+4305:         assert ts in ws._processing
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_ws->_processing == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4305, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_processing, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4305, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4305, __pyx_L1_error)
    }
  }
  #endif
+4306:         assert not ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4306, __pyx_L1_error)
    }
  }
  #endif
+4307:         for dts in ts._dependencies:
  __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4307, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+4308:             assert dts._who_has
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
      if (unlikely(!__pyx_t_2)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4308, __pyx_L1_error)
      }
    }
    #endif
+4309:             assert ts in dts._waiters
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_dts->_waiters == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 4309, __pyx_L1_error)
      }
      __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_dts->_waiters, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4309, __pyx_L1_error)
      if (unlikely(!(__pyx_t_2 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4309, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4310: 
+4311:     def validate_memory(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_56validate_memory(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_56validate_memory = {"validate_memory", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_56validate_memory, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_56validate_memory(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_memory (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_memory", 1, 2, 2, 1); __PYX_ERR(0, 4311, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_memory") < 0)) __PYX_ERR(0, 4311, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_memory", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4311, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_55validate_memory(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_55validate_memory(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_memory", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__219 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts); if (unlikely(!__pyx_tuple__219)) __PYX_ERR(0, 4311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__219);
  __Pyx_GIVEREF(__pyx_tuple__219);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_56validate_memory, 0, __pyx_n_s_Scheduler_validate_memory, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__220)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_memory, __pyx_t_12) < 0) __PYX_ERR(0, 4311, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__220 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_memory, 4311, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__220)) __PYX_ERR(0, 4311, __pyx_L1_error)
+4312:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4313:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4313, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4313, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4314:         dts: TaskState
+4315:         assert ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!__pyx_t_2)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4315, __pyx_L1_error)
    }
  }
  #endif
+4316:         assert not ts._processing_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4316, __pyx_L1_error)
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4316, __pyx_L1_error)
    }
  }
  #endif
+4317:         assert not ts._waiting_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4317, __pyx_L1_error)
    }
  }
  #endif
+4318:         assert ts not in parent._unrunnable
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_parent->_unrunnable == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4318, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_parent->_unrunnable, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4318, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4318, __pyx_L1_error)
    }
  }
  #endif
+4319:         for dts in ts._dependents:
  __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4319, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+4320:             assert (dts in ts._waiters) == (dts._state in ("waiting", "processing"))
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 4320, __pyx_L1_error)
      }
      __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_dts), __pyx_v_ts->_waiters, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_INCREF(__pyx_v_dts->_state);
      __pyx_t_8 = __pyx_v_dts->_state;
      __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_8, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __pyx_t_11 = (__pyx_t_10 != 0);
      if (!__pyx_t_11) {
      } else {
        __pyx_t_9 = __pyx_t_11;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_11 = (__Pyx_PyUnicode_Equals(__pyx_t_8, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __pyx_t_10 = (__pyx_t_11 != 0);
      __pyx_t_9 = __pyx_t_10;
      __pyx_L5_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!((__pyx_t_2 == __pyx_t_9) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4320, __pyx_L1_error)
      }
    }
    #endif
+4321:             assert ts not in dts._waiting_on
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_dts->_waiting_on == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 4321, __pyx_L1_error)
      }
      __pyx_t_9 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_dts->_waiting_on, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4321, __pyx_L1_error)
      if (unlikely(!(__pyx_t_9 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4321, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4322: 
+4323:     def validate_no_worker(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_58validate_no_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_58validate_no_worker = {"validate_no_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_58validate_no_worker, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_58validate_no_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_no_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_no_worker", 1, 2, 2, 1); __PYX_ERR(0, 4323, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_no_worker") < 0)) __PYX_ERR(0, 4323, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_no_worker", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4323, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_no_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_57validate_no_worker(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_57validate_no_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_no_worker", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_no_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__221 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts); if (unlikely(!__pyx_tuple__221)) __PYX_ERR(0, 4323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__221);
  __Pyx_GIVEREF(__pyx_tuple__221);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_58validate_no_worker, 0, __pyx_n_s_Scheduler_validate_no_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__222)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_no_worker, __pyx_t_12) < 0) __PYX_ERR(0, 4323, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__222 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__221, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_no_worker, 4323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__222)) __PYX_ERR(0, 4323, __pyx_L1_error)
+4324:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4325:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4325, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4325, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4326:         dts: TaskState
+4327:         assert ts in parent._unrunnable
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_parent->_unrunnable == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4327, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_parent->_unrunnable, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4327, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4327, __pyx_L1_error)
    }
  }
  #endif
+4328:         assert not ts._waiting_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4328, __pyx_L1_error)
    }
  }
  #endif
+4329:         assert ts in parent._unrunnable
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_parent->_unrunnable == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4329, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_parent->_unrunnable, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4329, __pyx_L1_error)
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4329, __pyx_L1_error)
    }
  }
  #endif
+4330:         assert not ts._processing_on
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4330, __pyx_L1_error)
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4330, __pyx_L1_error)
    }
  }
  #endif
+4331:         assert not ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4331, __pyx_L1_error)
    }
  }
  #endif
+4332:         for dts in ts._dependencies:
  __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4332, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+4333:             assert dts._who_has
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
      if (unlikely(!__pyx_t_2)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4333, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4334: 
+4335:     def validate_erred(self, key):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_60validate_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_60validate_erred = {"validate_erred", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_60validate_erred, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_60validate_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_erred (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_erred", 1, 2, 2, 1); __PYX_ERR(0, 4335, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_erred") < 0)) __PYX_ERR(0, 4335, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_erred", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4335, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_59validate_erred(__pyx_self, __pyx_v_self, __pyx_v_key);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_59validate_erred(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_erred", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__223 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__223)) __PYX_ERR(0, 4335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__223);
  __Pyx_GIVEREF(__pyx_tuple__223);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_60validate_erred, 0, __pyx_n_s_Scheduler_validate_erred, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__224)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_erred, __pyx_t_12) < 0) __PYX_ERR(0, 4335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__224 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_erred, 4335, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__224)) __PYX_ERR(0, 4335, __pyx_L1_error)
+4336:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4337:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4337, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4337, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4338:         assert ts._exception_blame
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_exception_blame); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4338, __pyx_L1_error)
    if (unlikely(!__pyx_t_2)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4338, __pyx_L1_error)
    }
  }
  #endif
+4339:         assert not ts._who_has
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    if (unlikely(!((!__pyx_t_2) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4339, __pyx_L1_error)
    }
  }
  #endif
 4340: 
+4341:     def validate_key(self, key, ts: TaskState = None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_62validate_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_62validate_key = {"validate_key", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_62validate_key, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_62validate_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_key (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_ts,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct __pyx_obj_11distributed_9scheduler_TaskState *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_key", 0, 2, 3, 1); __PYX_ERR(0, 4341, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_key") < 0)) __PYX_ERR(0, 4341, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_key", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4341, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 4341, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_61validate_key(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_ts);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_61validate_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_func = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_key", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_ts);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_func);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__225 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_ts, __pyx_n_s_parent, __pyx_n_s_func, __pyx_n_s_e, __pyx_n_s_pdb); if (unlikely(!__pyx_tuple__225)) __PYX_ERR(0, 4341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__225);
  __Pyx_GIVEREF(__pyx_tuple__225);
  __pyx_codeobj__226 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_key, 4341, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__226)) __PYX_ERR(0, 4341, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_ts, __pyx_n_u_TaskState) < 0) __PYX_ERR(0, 4341, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_62validate_key, 0, __pyx_n_s_Scheduler_validate_key, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__226)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__227);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_12);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_key, __pyx_t_2) < 0) __PYX_ERR(0, 4341, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__227 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__227)) __PYX_ERR(0, 4341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__227);
  __Pyx_GIVEREF(__pyx_tuple__227);
+4342:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4343:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+4344:             if ts is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
/* … */
      }
+4345:                 ts = parent._tasks.get(key)
        if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
          __PYX_ERR(0, 4345, __pyx_L3_error)
        }
        __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4345, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4345, __pyx_L3_error)
        __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
        __pyx_t_1 = 0;
+4346:             if ts is None:
      __pyx_t_6 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (__pyx_t_5) {
/* … */
        goto __pyx_L10;
      }
+4347:                 logger.debug("Key lost: %s", key)
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4347, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_debug); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4347, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Key_lost_s, __pyx_v_key};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4347, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Key_lost_s, __pyx_v_key};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4347, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4347, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (__pyx_t_7) {
            __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7); __pyx_t_7 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Key_lost_s);
          __Pyx_GIVEREF(__pyx_kp_u_Key_lost_s);
          PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_kp_u_Key_lost_s);
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_v_key);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4347, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4348:             else:
+4349:                 ts.validate()
      /*else*/ {
        __pyx_t_1 = __pyx_f_11distributed_9scheduler_9TaskState_validate(__pyx_v_ts, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4349, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4350:                 try:
        {
          /*try:*/ {
/* … */
          }
/* … */
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          goto __pyx_L3_error;
          __pyx_L12_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          __pyx_L16_try_end:;
        }
      }
      __pyx_L10:;
+4351:                     func = getattr(self, "validate_" + ts._state.replace("-", "_"))
            if (unlikely(__pyx_v_ts->_state == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
              __PYX_ERR(0, 4351, __pyx_L11_error)
            }
            __pyx_t_1 = PyUnicode_Replace(__pyx_v_ts->_state, __pyx_kp_u__60, __pyx_n_u__61, -1L); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4351, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_n_u_validate_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4351, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_GetAttr(__pyx_v_self, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4351, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_v_func = __pyx_t_1;
            __pyx_t_1 = 0;
+4352:                 except AttributeError:
          __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
          if (__pyx_t_9) {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_10) < 0) __PYX_ERR(0, 4352, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_GOTREF(__pyx_t_10);
+4353:                     logger.error(
            __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_error); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+4354:                         "self.validate_%s not found", ts._state.replace("-", "_")
            if (unlikely(__pyx_v_ts->_state == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
              __PYX_ERR(0, 4354, __pyx_L13_except_error)
            }
            __pyx_t_14 = PyUnicode_Replace(__pyx_v_ts->_state, __pyx_kp_u__60, __pyx_n_u__61, -1L); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4354, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_16 = NULL;
            __pyx_t_9 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
              __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15);
              if (likely(__pyx_t_16)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
                __Pyx_INCREF(__pyx_t_16);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_15, function);
                __pyx_t_9 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_15)) {
              PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_kp_u_self_validate__s_not_found, __pyx_t_14};
              __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
              PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_kp_u_self_validate__s_not_found, __pyx_t_14};
              __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            } else
            #endif
            {
              __pyx_t_17 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
              __Pyx_GOTREF(__pyx_t_17);
              if (__pyx_t_16) {
                __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); __pyx_t_16 = NULL;
              }
              __Pyx_INCREF(__pyx_kp_u_self_validate__s_not_found);
              __Pyx_GIVEREF(__pyx_kp_u_self_validate__s_not_found);
              PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_9, __pyx_kp_u_self_validate__s_not_found);
              __Pyx_GIVEREF(__pyx_t_14);
              PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_9, __pyx_t_14);
              __pyx_t_14 = 0;
              __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_17, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4353, __pyx_L13_except_error)
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            }
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            goto __pyx_L12_exception_handled;
          }
          goto __pyx_L13_except_error;
          __pyx_L13_except_error:;
 4355:                     )
 4356:                 else:
+4357:                     func(key)
          /*else:*/ {
            __Pyx_INCREF(__pyx_v_func);
            __pyx_t_8 = __pyx_v_func; __pyx_t_10 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
              __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
              if (likely(__pyx_t_10)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
                __Pyx_INCREF(__pyx_t_10);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_8, function);
              }
            }
            __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_key);
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4357, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          goto __pyx_L16_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+4358:         except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_8, &__pyx_t_1) < 0) __PYX_ERR(0, 4358, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_v_e = __pyx_t_8;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L24_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_9 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          }
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
          __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+4359:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_logger); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4359, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4359, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_17, function);
          }
        }
        __pyx_t_7 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_15, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4359, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4360:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4360, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 4360, __pyx_L24_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_5) {
/* … */
        }
+4361:                 import pdb
          __pyx_t_7 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4361, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_v_pdb = __pyx_t_7;
          __pyx_t_7 = 0;
 4362: 
+4363:                 pdb.set_trace()
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4363, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
            }
          }
          __pyx_t_7 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_17);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4363, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4364:             raise
        __Pyx_GIVEREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_1);
        __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_8, __pyx_t_1);
        __pyx_t_10 = 0; __pyx_t_8 = 0; __pyx_t_1 = 0; 
        __PYX_ERR(0, 4364, __pyx_L24_error)
      }
 4365: 
+4366:     def validate_state(self, allow_overlap=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_64validate_state(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_64validate_state = {"validate_state", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_64validate_state, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_64validate_state(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_allow_overlap = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_state (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_allow_overlap,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allow_overlap);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_state") < 0)) __PYX_ERR(0, 4366, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_allow_overlap = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_state", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4366, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_63validate_state(__pyx_self, __pyx_v_self, __pyx_v_allow_overlap);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_14validate_state_9genexpr47_2generator32(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_63validate_state(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_allow_overlap) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_c = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_v_actual_total_occupancy = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_worker = NULL;
  PyObject *__pyx_9genexpr46__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr46__pyx_v_ws = NULL;
  PyObject *__pyx_9genexpr47__pyx_v_w = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_state", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_19_validate_state(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_19_validate_state, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4366, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XDECREF(__pyx_v_actual_total_occupancy);
  __Pyx_XDECREF(__pyx_v_worker);
  __Pyx_XDECREF(__pyx_9genexpr46__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr46__pyx_v_ws);
  __Pyx_XDECREF(__pyx_9genexpr47__pyx_v_w);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__228 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_allow_overlap, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_ts, __pyx_n_s_k, __pyx_n_s_c, __pyx_n_s_cs, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_actual_total_occupancy, __pyx_n_s_worker, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__228)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__228);
  __Pyx_GIVEREF(__pyx_tuple__228);
  __pyx_codeobj__229 = (PyObject*)__Pyx_PyCode_New(2, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_state, 4366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__229)) __PYX_ERR(0, 4366, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_64validate_state, 0, __pyx_n_s_Scheduler_validate_state, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__229)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__230);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_validate_state, __pyx_t_2) < 0) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__230 = PyTuple_Pack(1, ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__230)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__230);
  __Pyx_GIVEREF(__pyx_tuple__230);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr47__pyx_v_ws;
};

+4367:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4368:         validate_state(parent._tasks, parent._workers, parent._clients)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_validate_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_parent->_tasks, __pyx_v_parent->_workers, __pyx_v_parent->_clients};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4368, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_parent->_tasks, __pyx_v_parent->_workers, __pyx_v_parent->_clients};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4368, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parent->_tasks);
    __Pyx_GIVEREF(__pyx_v_parent->_tasks);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parent->_tasks);
    __Pyx_INCREF(__pyx_v_parent->_workers);
    __Pyx_GIVEREF(__pyx_v_parent->_workers);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_parent->_workers);
    __Pyx_INCREF(__pyx_v_parent->_clients);
    __Pyx_GIVEREF(__pyx_v_parent->_clients);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_parent->_clients);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4369: 
+4370:         if not (set(parent._workers_dv) == set(self.stream_comms)):
  __pyx_t_1 = PySet_New(__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PySet_New(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = ((!__pyx_t_6) != 0);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+4371:             raise ValueError("Workers not the same in all collections")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 4371, __pyx_L1_error)
/* … */
  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_u_Workers_not_the_same_in_all_coll); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 4371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__62);
  __Pyx_GIVEREF(__pyx_tuple__62);
 4372: 
 4373:         ws: WorkerState
+4374:         for w, ws in parent._workers_dv.items():
  __pyx_t_8 = 0;
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4374, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_9, &__pyx_t_8, &__pyx_t_5, &__pyx_t_1, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4374, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4374, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
    __pyx_t_1 = 0;
+4375:             assert isinstance(w, str), (type(w), w)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = PyUnicode_Check(__pyx_v_w); 
      if (unlikely(!(__pyx_t_7 != 0))) {
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4375, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_w)));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_v_w)));
        PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(__pyx_v_w)));
        __Pyx_INCREF(__pyx_v_w);
        __Pyx_GIVEREF(__pyx_v_w);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_w);
        __pyx_t_5 = PyTuple_Pack(1, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4375, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 4375, __pyx_L1_error)
      }
    }
    #endif
+4376:             assert isinstance(ws, WorkerState), (type(ws), ws)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = __Pyx_TypeCheck(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState); 
      if (unlikely(!(__pyx_t_7 != 0))) {
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4376, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ws))));
        __Pyx_INCREF(((PyObject *)__pyx_v_ws));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ws));
        PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_ws));
        __pyx_t_1 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4376, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 4376, __pyx_L1_error)
      }
    }
    #endif
+4377:             assert ws._address == w
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_v_ws->_address, __pyx_v_w, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4377, __pyx_L1_error)
      if (unlikely(!__pyx_t_7)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4377, __pyx_L1_error)
      }
    }
    #endif
+4378:             if not ws._processing:
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_ws->_processing); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4378, __pyx_L1_error)
    __pyx_t_6 = ((!__pyx_t_7) != 0);
    if (__pyx_t_6) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4379:                 assert not ws._occupancy
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(!((!(__pyx_v_ws->_occupancy != 0)) != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 4379, __pyx_L1_error)
        }
      }
      #endif
+4380:                 assert ws._address in parent._idle_dv
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_parent->_idle_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 4380, __pyx_L1_error)
        }
        __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_v_ws->_address, __pyx_v_parent->_idle_dv, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4380, __pyx_L1_error)
        if (unlikely(!(__pyx_t_6 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 4380, __pyx_L1_error)
        }
      }
      #endif
 4381: 
 4382:         ts: TaskState
+4383:         for k, ts in parent._tasks.items():
  __pyx_t_9 = 0;
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4383, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_parent->_tasks, 1, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_9, &__pyx_t_1, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4383, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+4384:             assert isinstance(ts, TaskState), (type(ts), ts)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = __Pyx_TypeCheck(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState); 
      if (unlikely(!(__pyx_t_6 != 0))) {
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4384, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ts))));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ts))));
        PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_ts))));
        __Pyx_INCREF(((PyObject *)__pyx_v_ts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
        PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_ts));
        __pyx_t_1 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4384, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 4384, __pyx_L1_error)
      }
    }
    #endif
+4385:             assert ts._key == k
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_key, __pyx_v_k, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4385, __pyx_L1_error)
      if (unlikely(!__pyx_t_6)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4385, __pyx_L1_error)
      }
    }
    #endif
+4386:             self.validate_key(k, ts)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_validate_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_k, ((PyObject *)__pyx_v_ts)};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4386, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_k, ((PyObject *)__pyx_v_ts)};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4386, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_k);
      __Pyx_GIVEREF(__pyx_v_k);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_k);
      __Pyx_INCREF(((PyObject *)__pyx_v_ts));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, ((PyObject *)__pyx_v_ts));
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4387: 
 4388:         c: str
 4389:         cs: ClientState
+4390:         for c, cs in parent._clients.items():
  __pyx_t_8 = 0;
  if (unlikely(__pyx_v_parent->_clients == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4390, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_parent->_clients, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_9, &__pyx_t_8, &__pyx_t_1, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4390, __pyx_L1_error)
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4390, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_c, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_5));
    __pyx_t_5 = 0;
 4391:             # client=None is often used in tests...
+4392:             assert c is None or type(c) == str, (type(c), c)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = (__pyx_v_c == ((PyObject*)Py_None));
      __pyx_t_12 = (__pyx_t_7 != 0);
      if (!__pyx_t_12) {
      } else {
        __pyx_t_6 = __pyx_t_12;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_5 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_c)), ((PyObject *)(&PyUnicode_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4392, __pyx_L1_error)
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4392, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = __pyx_t_12;
      __pyx_L11_bool_binop_done:;
      if (unlikely(!__pyx_t_6)) {
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4392, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_c)));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_v_c)));
        PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(__pyx_v_c)));
        __Pyx_INCREF(__pyx_v_c);
        __Pyx_GIVEREF(__pyx_v_c);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_c);
        __pyx_t_1 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4392, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 4392, __pyx_L1_error)
      }
    }
    #endif
+4393:             assert type(cs) == ClientState, (type(cs), cs)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cs))), ((PyObject *)__pyx_ptype_11distributed_9scheduler_ClientState), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4393, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4393, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) {
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4393, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cs))));
        __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cs))));
        PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cs))));
        __Pyx_INCREF(((PyObject *)__pyx_v_cs));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_cs));
        PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_cs));
        __pyx_t_5 = PyTuple_Pack(1, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4393, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 4393, __pyx_L1_error)
      }
    }
    #endif
+4394:             assert cs._client_key == c
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_cs->_client_key, __pyx_v_c, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4394, __pyx_L1_error)
      if (unlikely(!(__pyx_t_6 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4394, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4395: 
+4396:         a = {w: ws._nbytes for w, ws in parent._workers_dv.items()}
  { /* enter inner scope */
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4396, __pyx_L15_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = 0;
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 4396, __pyx_L15_error)
    }
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4396, __pyx_L15_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_1, &__pyx_t_11, NULL, __pyx_t_4);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4396, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_11);
      if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4396, __pyx_L15_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr46__pyx_v_w, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_9genexpr46__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
      __pyx_t_11 = 0;
      __pyx_t_11 = PyInt_FromSsize_t(__pyx_9genexpr46__pyx_v_ws->_nbytes); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4396, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_9genexpr46__pyx_v_w, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 4396, __pyx_L15_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr46__pyx_v_w); __pyx_9genexpr46__pyx_v_w = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr46__pyx_v_ws); __pyx_9genexpr46__pyx_v_ws = 0;
    goto __pyx_L18_exit_scope;
    __pyx_L15_error:;
    __Pyx_XDECREF(__pyx_9genexpr46__pyx_v_w); __pyx_9genexpr46__pyx_v_w = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr46__pyx_v_ws); __pyx_9genexpr46__pyx_v_ws = 0;
    goto __pyx_L1_error;
    __pyx_L18_exit_scope:;
  } /* exit inner scope */
  __pyx_v_a = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+4397:         b = {
  { /* enter inner scope */
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4397, __pyx_L21_error)
    __Pyx_GOTREF(__pyx_t_2);
+4398:             w: sum(ts.get_nbytes() for ts in ws._has_what)
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_14validate_state_9genexpr47_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_20_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_20_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_20_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_20_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_20_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4398, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_14validate_state_9genexpr47_2generator32, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_validate_state_locals, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4398, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.validate_state.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_14validate_state_9genexpr47_2generator32(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4398, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr47__pyx_v_ws)) { __Pyx_RaiseClosureNameError("ws"); __PYX_ERR(0, 4398, __pyx_L1_error) }
  __pyx_t_5 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr47__pyx_v_ws->_has_what, 1, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 4398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ts);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_ts, __pyx_n_s_get_nbytes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4398, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
      __pyx_t_1 = __pyx_pf_11distributed_9scheduler_9Scheduler_14validate_state_9genexpr47_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4398, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4398, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_9genexpr47__pyx_v_w, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 4398, __pyx_L21_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr47__pyx_v_w); __pyx_9genexpr47__pyx_v_w = 0;
    goto __pyx_L24_exit_scope;
    __pyx_L21_error:;
    __Pyx_XDECREF(__pyx_9genexpr47__pyx_v_w); __pyx_9genexpr47__pyx_v_w = 0;
    goto __pyx_L1_error;
    __pyx_L24_exit_scope:;
  } /* exit inner scope */
  __pyx_v_b = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_20_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_19_validate_state *__pyx_outer_scope;
  PyObject *__pyx_v_ts;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

+4399:             for w, ws in parent._workers_dv.items()
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 4399, __pyx_L21_error)
    }
    __pyx_t_11 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_4)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4399, __pyx_L21_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_11;
    __pyx_t_11 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_11, &__pyx_t_1, NULL, __pyx_t_4);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4399, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4399, __pyx_L21_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr47__pyx_v_w, __pyx_t_11);
      __pyx_t_11 = 0;
      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr47__pyx_v_ws));
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr47__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
 4400:         }
+4401:         assert a == b, (a, b)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4401, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4401, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) {
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_a);
      __Pyx_GIVEREF(__pyx_v_a);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a);
      __Pyx_INCREF(__pyx_v_b);
      __Pyx_GIVEREF(__pyx_v_b);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_b);
      __pyx_t_5 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(0, 4401, __pyx_L1_error)
    }
  }
  #endif
 4402: 
+4403:         actual_total_occupancy = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_actual_total_occupancy = __pyx_int_0;
+4404:         for worker, ws in parent._workers_dv.items():
  __pyx_t_9 = 0;
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4404, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __pyx_t_5 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_2, &__pyx_t_11, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4404, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_t_11);
    if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4404, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_worker, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
    __pyx_t_11 = 0;
+4405:             assert abs(sum(ws._processing.values()) - ws._occupancy) < 1e-8
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_ws->_processing == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
        __PYX_ERR(0, 4405, __pyx_L1_error)
      }
      __pyx_t_11 = __Pyx_PyDict_Values(__pyx_v_ws->_processing); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyFloat_FromDouble(__pyx_v_ws->_occupancy); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_11, __pyx_float_1eneg_8, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4405, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 4405, __pyx_L1_error)
      }
    }
    #endif
+4406:             actual_total_occupancy += ws._occupancy
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_ws->_occupancy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = PyNumber_InPlaceAdd(__pyx_v_actual_total_occupancy, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_actual_total_occupancy, __pyx_t_11);
    __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4407: 
+4408:         assert abs(actual_total_occupancy - parent._total_occupancy) < 1e-8, (
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_parent->_total_occupancy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_11 = PyNumber_Subtract(__pyx_v_actual_total_occupancy, __pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyNumber_Absolute(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = PyObject_RichCompare(__pyx_t_5, __pyx_float_1eneg_8, Py_LT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_6)) {
+4409:             actual_total_occupancy,
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4409, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_actual_total_occupancy);
      __Pyx_GIVEREF(__pyx_v_actual_total_occupancy);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_actual_total_occupancy);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11);
      __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4409, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_11);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(0, 4408, __pyx_L1_error)
    }
  }
  #endif
+4410:             parent._total_occupancy,
      __pyx_t_11 = PyFloat_FromDouble(__pyx_v_parent->_total_occupancy); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
 4411:         )
 4412: 
 4413:     ###################
 4414:     # Manage Messages #
 4415:     ###################
 4416: 
+4417:     def report(self, msg: dict, ts: TaskState = None, client: str = None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_66report(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_65report[] = "\n        Publish updates to all listening Queues and Comms\n\n        If the message contains a key then we only send the message to those\n        comms that care about the key.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_66report = {"report", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_66report, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_65report};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_66report(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_msg = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("report (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_msg,&__pyx_n_s_ts,&__pyx_n_s_client,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)((struct __pyx_obj_11distributed_9scheduler_TaskState *)((PyObject *)Py_None));
    values[3] = ((PyObject*)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("report", 0, 2, 4, 1); __PYX_ERR(0, 4417, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "report") < 0)) __PYX_ERR(0, 4417, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_msg = ((PyObject*)values[1]);
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[2]);
    __pyx_v_client = ((PyObject*)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("report", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4417, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.report", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_msg), (&PyDict_Type), 1, "msg", 1))) __PYX_ERR(0, 4417, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 4417, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_client), (&PyUnicode_Type), 1, "client", 1))) __PYX_ERR(0, 4417, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_65report(__pyx_self, __pyx_v_self, __pyx_v_msg, __pyx_v_ts, __pyx_v_client);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_65report(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_msg_key = NULL;
  PyObject *__pyx_v_tasks = 0;
  PyObject *__pyx_v_client_comms = 0;
  PyObject *__pyx_v_client_keys = 0;
  PyObject *__pyx_v_k = 0;
  PyObject *__pyx_v_c = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_9genexpr49__pyx_v_cs = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_9genexpr50__pyx_v_cs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("report", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_ts);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.report", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_msg_key);
  __Pyx_XDECREF(__pyx_v_tasks);
  __Pyx_XDECREF(__pyx_v_client_comms);
  __Pyx_XDECREF(__pyx_v_client_keys);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr49__pyx_v_cs);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr50__pyx_v_cs);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_69generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__231 = PyTuple_Pack(14, __pyx_n_s_self, __pyx_n_s_msg, __pyx_n_s_ts, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_msg_key, __pyx_n_s_tasks, __pyx_n_s_cs, __pyx_n_s_client_comms, __pyx_n_s_client_keys, __pyx_n_s_k, __pyx_n_s_c, __pyx_n_s_cs, __pyx_n_s_cs); if (unlikely(!__pyx_tuple__231)) __PYX_ERR(0, 4417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__231);
  __Pyx_GIVEREF(__pyx_tuple__231);
  __pyx_codeobj__232 = (PyObject*)__Pyx_PyCode_New(4, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_report, 4417, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__232)) __PYX_ERR(0, 4417, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_msg, __pyx_n_u_dict_2) < 0) __PYX_ERR(0, 4417, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ts, __pyx_n_u_TaskState) < 0) __PYX_ERR(0, 4417, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_n_u_unicode) < 0) __PYX_ERR(0, 4417, __pyx_L1_error)
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_66report, 0, __pyx_n_s_Scheduler_report, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__232)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__233);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_12, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_report, __pyx_t_12) < 0) __PYX_ERR(0, 4417, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__233 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__233)) __PYX_ERR(0, 4417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__233);
  __Pyx_GIVEREF(__pyx_tuple__233);
 4418:         """
 4419:         Publish updates to all listening Queues and Comms
 4420: 
 4421:         If the message contains a key then we only send the message to those
 4422:         comms that care about the key.
 4423:         """
+4424:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4425:         if ts is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4426:             msg_key = msg.get("key")
    if (unlikely(__pyx_v_msg == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 4426, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_msg, __pyx_n_u_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4426, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_msg_key = __pyx_t_1;
    __pyx_t_1 = 0;
+4427:             if msg_key is not None:
    __pyx_t_3 = (__pyx_v_msg_key != Py_None);
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
+4428:                 tasks: dict = parent._tasks
      __pyx_t_1 = __pyx_v_parent->_tasks;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_tasks = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+4429:                 ts = tasks.get(msg_key)
      if (unlikely(__pyx_v_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 4429, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_tasks, __pyx_v_msg_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4429, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
      __pyx_t_1 = 0;
 4430: 
 4431:         cs: ClientState
+4432:         client_comms: dict = self.client_comms
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4432, __pyx_L1_error)
  __pyx_v_client_comms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4433:         client_keys: list
+4434:         if ts is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L5;
  }
 4435:             # Notify all clients
+4436:             client_keys = list(client_comms)
    __pyx_t_1 = PySequence_List(__pyx_v_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_client_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+4437:         elif client is None:
  __pyx_t_3 = (__pyx_v_client == ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
 4438:             # Notify clients interested in key
+4439:             client_keys = [cs._client_key for cs in ts._who_wants]
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4439, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4439, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 4439, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4439, __pyx_L8_error)
        __Pyx_XDECREF_SET(__pyx_9genexpr49__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_8));
        __pyx_t_8 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr49__pyx_v_cs->_client_key))) __PYX_ERR(0, 4439, __pyx_L8_error)
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr49__pyx_v_cs); __pyx_9genexpr49__pyx_v_cs = 0;
      goto __pyx_L11_exit_scope;
      __pyx_L8_error:;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr49__pyx_v_cs); __pyx_9genexpr49__pyx_v_cs = 0;
      goto __pyx_L1_error;
      __pyx_L11_exit_scope:;
    } /* exit inner scope */
    __pyx_v_client_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 4440:         else:
 4441:             # Notify clients interested in key (including `client`)
+4442:             client_keys = [
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4442, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_1);
+4443:                 cs._client_key for cs in ts._who_wants if cs._client_key != client
      __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4443, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 4443, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4443, __pyx_L14_error)
        __Pyx_XDECREF_SET(__pyx_9genexpr50__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_8));
        __pyx_t_8 = 0;
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_9genexpr50__pyx_v_cs->_client_key, __pyx_v_client, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4443, __pyx_L14_error)
        __pyx_t_3 = (__pyx_t_2 != 0);
        if (__pyx_t_3) {
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr50__pyx_v_cs->_client_key))) __PYX_ERR(0, 4442, __pyx_L14_error)
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr50__pyx_v_cs); __pyx_9genexpr50__pyx_v_cs = 0;
      goto __pyx_L18_exit_scope;
      __pyx_L14_error:;
      __Pyx_XDECREF((PyObject *)__pyx_9genexpr50__pyx_v_cs); __pyx_9genexpr50__pyx_v_cs = 0;
      goto __pyx_L1_error;
      __pyx_L18_exit_scope:;
    } /* exit inner scope */
    __pyx_v_client_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 4444:             ]
+4445:             client_keys.append(client)
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_client_keys, __pyx_v_client); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 4445, __pyx_L1_error)
  }
  __pyx_L5:;
 4446: 
 4447:         k: str
+4448:         for k in client_keys:
  __pyx_t_1 = __pyx_v_client_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
  for (;;) {
    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4448, __pyx_L1_error)
    #else
    __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 4448, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_k, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
/* … */
    __pyx_L19_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4449:             c = client_comms.get(k)
    if (unlikely(__pyx_v_client_comms == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 4449, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_comms, __pyx_v_k, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_4);
    __pyx_t_4 = 0;
+4450:             if c is None:
    __pyx_t_3 = (__pyx_v_c == Py_None);
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
+4451:                 continue
      goto __pyx_L19_continue;
+4452:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L29_try_end;
      __pyx_L22_error:;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L1_error;
      __pyx_L23_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_L29_try_end:;
    }
+4453:                 c.send(msg)
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_c, __pyx_n_s_send); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4453, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
          }
        }
        __pyx_t_4 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_14, __pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_msg);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4453, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4454:                 # logger.debug("Scheduler sends message to client %s", msg)
+4455:             except CommClosedError:
      __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_8, &__pyx_t_14);
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4455, __pyx_L24_except_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_7 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_15);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_ErrRestore(__pyx_t_4, __pyx_t_8, __pyx_t_14);
      __pyx_t_4 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0;
      if (__pyx_t_7) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.report", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_8, &__pyx_t_4) < 0) __PYX_ERR(0, 4455, __pyx_L24_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_t_4);
+4456:                 if self.status == Status.running:
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4456, __pyx_L24_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_Status); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4456, __pyx_L24_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_running); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4456, __pyx_L24_except_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = PyObject_RichCompare(__pyx_t_15, __pyx_t_17, Py_EQ); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4456, __pyx_L24_except_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4456, __pyx_L24_except_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (__pyx_t_2) {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L23_exception_handled;
      }
      goto __pyx_L24_except_error;
      __pyx_L24_except_error:;
+4457:                     logger.critical("Tried writing to closed comm: %s", msg)
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_logger); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_critical); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_17 = NULL;
          __pyx_t_7 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
              __pyx_t_7 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msg};
            __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_16);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msg};
            __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_16);
          } else
          #endif
          {
            __pyx_t_18 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
            __Pyx_GOTREF(__pyx_t_18);
            if (__pyx_t_17) {
              __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); __pyx_t_17 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
            __Pyx_GIVEREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
            PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_7, __pyx_kp_u_Tried_writing_to_closed_comm_s);
            __Pyx_INCREF(__pyx_v_msg);
            __Pyx_GIVEREF(__pyx_v_msg);
            PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_7, __pyx_v_msg);
            __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_18, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4457, __pyx_L24_except_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          }
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 4458: 
+4459:     async def add_client(self, comm, client=None, versions=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_68add_client(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_67add_client[] = "Add client to network\n\n        We listen to all future messages from this Comm.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_68add_client = {"add_client", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_68add_client, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_67add_client};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_68add_client(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_versions = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_client (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_client,&__pyx_n_s_versions,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("add_client", 0, 2, 4, 1); __PYX_ERR(0, 4459, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_versions);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_client") < 0)) __PYX_ERR(0, 4459, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_client = values[2];
    __pyx_v_versions = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_client", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4459, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_67add_client(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_client, __pyx_v_versions);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_67add_client(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, PyObject *__pyx_v_client, PyObject *__pyx_v_versions) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_21_add_client *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_client", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_21_add_client *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_21_add_client(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_21_add_client, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_21_add_client *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4459, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_client = __pyx_v_client;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  __pyx_cur_scope->__pyx_v_versions = __pyx_v_versions;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_versions);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_versions);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_69generator6, __pyx_codeobj__63, (PyObject *) __pyx_cur_scope, __pyx_n_s_add_client, __pyx_n_s_Scheduler_add_client, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4459, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_69generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_client", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4459, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("add_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__234 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_client, __pyx_n_s_versions, __pyx_n_s_parent, __pyx_n_s_plugin, __pyx_n_s_e, __pyx_n_s_bcomm, __pyx_n_s_msg, __pyx_n_s_ws, __pyx_n_s_version_warning, __pyx_n_s_w, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__234)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__234);
  __Pyx_GIVEREF(__pyx_tuple__234);
  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_client, 4459, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 4459, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_68add_client, 0, __pyx_n_s_Scheduler_add_client, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__235);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_client, __pyx_t_12) < 0) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__235 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__235)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__235);
  __Pyx_GIVEREF(__pyx_tuple__235);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_21_add_client {
  PyObject_HEAD
  PyObject *__pyx_v_bcomm;
  PyObject *__pyx_v_client;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_e;
  PyObject *__pyx_v_msg;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_version_warning;
  PyObject *__pyx_v_versions;
  PyObject *__pyx_9genexpr51__pyx_v_w;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr51__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  PyObject *__pyx_t_9;
  PyObject *__pyx_t_10;
  char const *__pyx_t_11;
};

 4460:         """Add client to network
 4461: 
 4462:         We listen to all future messages from this Comm.
 4463:         """
+4464:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4465:         assert client is not None
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (__pyx_cur_scope->__pyx_v_client != Py_None);
    if (unlikely(!(__pyx_t_2 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4465, __pyx_L1_error)
    }
  }
  #endif
+4466:         comm.name = "Scheduler->Client"
  if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_name, __pyx_kp_u_Scheduler_Client) < 0) __PYX_ERR(0, 4466, __pyx_L1_error)
+4467:         logger.info("Receive client connection: %s", client)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Receive_client_connection_s, __pyx_cur_scope->__pyx_v_client};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4467, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Receive_client_connection_s, __pyx_cur_scope->__pyx_v_client};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4467, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Receive_client_connection_s);
    __Pyx_GIVEREF(__pyx_kp_u_Receive_client_connection_s);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_kp_u_Receive_client_connection_s);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_client);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4468:         self.log_event(["all", client], {"action": "add-client", "client": client})
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_u_all);
  __Pyx_GIVEREF(__pyx_n_u_all);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_u_all);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_cur_scope->__pyx_v_client);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_add_client_2) < 0) __PYX_ERR(0, 4468, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4468, __pyx_L1_error)
  __pyx_t_7 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4469:         parent._clients[client] = ClientState(client, versions=versions)
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_client);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_versions, __pyx_cur_scope->__pyx_v_versions) < 0) __PYX_ERR(0, 4469, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11distributed_9scheduler_ClientState), __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4469, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_parent->_clients, __pyx_cur_scope->__pyx_v_client, __pyx_t_8) < 0)) __PYX_ERR(0, 4469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 4470: 
+4471:         for plugin in self.plugins[:]:
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_8, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_8 = __pyx_t_4; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4471, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_8))) {
        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_8)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 4471, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4471, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 4471, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4471, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_10(__pyx_t_8);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4471, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_plugin);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+4472:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L13_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L1_error;
      __pyx_L7_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_L13_try_end:;
    }
+4473:                 plugin.add_client(scheduler=self, client=client)
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_plugin, __pyx_n_s_add_client); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4473, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4473, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scheduler, __pyx_cur_scope->__pyx_v_self) < 0) __PYX_ERR(0, 4473, __pyx_L6_error)
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4473, __pyx_L6_error)
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4473, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4474:             except Exception as e:
      __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_5) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 4474, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_cur_scope->__pyx_v_e = __pyx_t_1;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
            __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
            __pyx_cur_scope->__pyx_v_e = NULL;
            goto __pyx_L20;
          }
          __pyx_L19_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_assign
            __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_22);
            __pyx_t_5 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
            {
              __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
              __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
              __pyx_cur_scope->__pyx_v_e = NULL;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
            }
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
            __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
            goto __pyx_L8_except_error;
          }
          __pyx_L20:;
        }
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L7_exception_handled;
      }
      goto __pyx_L8_except_error;
      __pyx_L8_except_error:;
+4475:                 logger.exception(e)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4475, __pyx_L19_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4475, __pyx_L19_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_14, function);
            }
          }
          __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_7, __pyx_cur_scope->__pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_cur_scope->__pyx_v_e);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4475, __pyx_L19_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
 4476: 
+4477:         try:
  /*try:*/ {
+4478:             bcomm = BatchedSend(interval="2ms", loop=self.loop)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_BatchedSend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4478, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4478, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_interval, __pyx_kp_u_2ms) < 0) __PYX_ERR(0, 4478, __pyx_L26_error)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4478, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_loop, __pyx_t_1) < 0) __PYX_ERR(0, 4478, __pyx_L26_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4478, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_bcomm = __pyx_t_1;
    __pyx_t_1 = 0;
+4479:             bcomm.start(comm)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bcomm, __pyx_n_s_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4479, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_8, __pyx_cur_scope->__pyx_v_comm) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_cur_scope->__pyx_v_comm);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4479, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4480:             self.client_comms[client] = bcomm
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4480, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_client, __pyx_cur_scope->__pyx_v_bcomm) < 0)) __PYX_ERR(0, 4480, __pyx_L26_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4481:             msg = {"op": "stream-start"}
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4481, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_op, __pyx_kp_u_stream_start) < 0) __PYX_ERR(0, 4481, __pyx_L26_error)
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_msg = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 4482:             ws: WorkerState
+4483:             version_warning = version_module.error_message(
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_version_module); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4483, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error_message); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4483, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4484:                 version_module.get_versions(),
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_version_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4484, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_versions); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4484, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4484, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    { /* enter inner scope */
+4485:                 {w: ws._versions for w, ws in parent._workers_dv.items()},
      __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4485, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_9 = 0;
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 4485, __pyx_L26_error)
      }
      __pyx_t_14 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_23), (&__pyx_t_15)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4485, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_XDECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_14;
      __pyx_t_14 = 0;
      while (1) {
        __pyx_t_5 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_23, &__pyx_t_9, &__pyx_t_14, &__pyx_t_7, NULL, __pyx_t_15);
        if (unlikely(__pyx_t_5 == 0)) break;
        if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 4485, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GOTREF(__pyx_t_7);
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4485, __pyx_L26_error)
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr51__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr51__pyx_v_w, __pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_14);
        __pyx_t_14 = 0;
        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr51__pyx_v_ws));
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr51__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_7));
        __Pyx_GIVEREF(__pyx_t_7);
        __pyx_t_7 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_6, (PyObject*)__pyx_cur_scope->__pyx_9genexpr51__pyx_v_w, (PyObject*)__pyx_cur_scope->__pyx_9genexpr51__pyx_v_ws->_versions))) __PYX_ERR(0, 4485, __pyx_L26_error)
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } /* exit inner scope */
+4486:                 versions,
    __pyx_t_3 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_4, __pyx_t_6, __pyx_cur_scope->__pyx_v_versions};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_15, 3+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4483, __pyx_L26_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_4, __pyx_t_6, __pyx_cur_scope->__pyx_v_versions};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_15, 3+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4483, __pyx_L26_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(3+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4483, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_t_6);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_versions);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_versions);
      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_15, __pyx_cur_scope->__pyx_v_versions);
      __pyx_t_4 = 0;
      __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4483, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_version_warning = __pyx_t_1;
    __pyx_t_1 = 0;
 4487:             )
+4488:             msg.update(version_warning)
    __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_cur_scope->__pyx_v_msg, __pyx_cur_scope->__pyx_v_version_warning); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4488, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4489:             bcomm.send(msg)
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bcomm, __pyx_n_s_send); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4489, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_cur_scope->__pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_cur_scope->__pyx_v_msg);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4489, __pyx_L26_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4490: 
+4491:             try:
    /*try:*/ {
+4492:                 await self.handle_stream(comm=comm, extra={"client": client})
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_handle_stream); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4492, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4492, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_comm, __pyx_cur_scope->__pyx_v_comm) < 0) __PYX_ERR(0, 4492, __pyx_L31_error)
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4492, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4492, __pyx_L31_error)
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_extra, __pyx_t_7) < 0) __PYX_ERR(0, 4492, __pyx_L31_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4492, __pyx_L31_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XGOTREF(__pyx_r);
      if (likely(__pyx_r)) {
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, awaiting value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L33_resume_from_await:;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4492, __pyx_L31_error)
      } else {
        PyObject* exc_type = __Pyx_PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
          else __PYX_ERR(0, 4492, __pyx_L31_error)
        }
      }
    }
 4493:             finally:
+4494:                 self.remove_client(client=client)
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_client); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4494, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4494, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4494, __pyx_L26_error)
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4494, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4494, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4494, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4494, __pyx_L35_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4494, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4495:                 logger.debug("Finished handling client %s", client)
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4495, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_debug); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4495, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = NULL;
        __pyx_t_15 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_15 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u_Finished_handling_client_s, __pyx_cur_scope->__pyx_v_client};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4495, __pyx_L26_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u_Finished_handling_client_s, __pyx_cur_scope->__pyx_v_client};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4495, __pyx_L26_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4495, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_8) {
            __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8); __pyx_t_8 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Finished_handling_client_s);
          __Pyx_GIVEREF(__pyx_kp_u_Finished_handling_client_s);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_15, __pyx_kp_u_Finished_handling_client_s);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_15, __pyx_cur_scope->__pyx_v_client);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4495, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L32;
      }
      __pyx_L31_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_assign
        __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_22);
        __Pyx_XGOTREF(__pyx_t_21);
        __Pyx_XGOTREF(__pyx_t_20);
        __pyx_t_15 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_24 = __pyx_filename;
        {
/* … */
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4495, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4495, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = NULL;
          __pyx_t_25 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_25 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Finished_handling_client_s, __pyx_cur_scope->__pyx_v_client};
            __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_25, 2+__pyx_t_25); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4495, __pyx_L35_error)
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_GOTREF(__pyx_t_6);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Finished_handling_client_s, __pyx_cur_scope->__pyx_v_client};
            __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_25, 2+__pyx_t_25); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4495, __pyx_L35_error)
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_GOTREF(__pyx_t_6);
          } else
          #endif
          {
            __pyx_t_8 = PyTuple_New(2+__pyx_t_25); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4495, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (__pyx_t_7) {
              __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Finished_handling_client_s);
            __Pyx_GIVEREF(__pyx_kp_u_Finished_handling_client_s);
            PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_25, __pyx_kp_u_Finished_handling_client_s);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
            PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_25, __pyx_cur_scope->__pyx_v_client);
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4495, __pyx_L35_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
        __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0;
        __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_24;
        goto __pyx_L26_error;
        __pyx_L35_error:;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0;
        goto __pyx_L26_error;
      }
      __pyx_L32:;
    }
  }
 4496:         finally:
+4497:             if not comm.closed():
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_closed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4497, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4497, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4497, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_26 = ((!__pyx_t_2) != 0);
      if (__pyx_t_26) {
/* … */
      }
/* … */
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_closed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4497, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4497, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4497, __pyx_L47_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_26 = ((!__pyx_t_2) != 0);
        if (__pyx_t_26) {
/* … */
        }
+4498:                 self.client_comms[client].send({"op": "stream-closed"})
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4498, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4498, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_send); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4498, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4498, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_op, __pyx_kp_u_stream_closed) < 0) __PYX_ERR(0, 4498, __pyx_L1_error)
        __pyx_t_7 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4498, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4498, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4498, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_send); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4498, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4498, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_op, __pyx_kp_u_stream_closed) < 0) __PYX_ERR(0, 4498, __pyx_L47_error)
          __pyx_t_8 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
            }
          }
          __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4498, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4499:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
        goto __pyx_L42_try_end;
        __pyx_L37_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_XGIVEREF(__pyx_t_22);
        __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        goto __pyx_L1_error;
        __pyx_L38_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_XGIVEREF(__pyx_t_22);
        __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        __pyx_L42_try_end:;
      }
      goto __pyx_L27;
    }
    __pyx_L26_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_22);
      __Pyx_XGOTREF(__pyx_t_21);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
      {
/* … */
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          goto __pyx_L54_try_end;
          __pyx_L49_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          goto __pyx_L47_error;
          __pyx_L50_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_L54_try_end:;
        }
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_22);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_27;
      goto __pyx_L1_error;
      __pyx_L47_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L27:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+4500:                 if not shutting_down():
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_shutting_down); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4500, __pyx_L37_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4500, __pyx_L37_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 4500, __pyx_L37_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((!__pyx_t_26) != 0);
          if (__pyx_t_2) {
/* … */
          }
/* … */
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_shutting_down); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4500, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
              if (likely(__pyx_t_7)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
                __Pyx_INCREF(__pyx_t_7);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_6, function);
              }
            }
            __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4500, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 4500, __pyx_L49_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_2 = ((!__pyx_t_26) != 0);
            if (__pyx_t_2) {
/* … */
            }
+4501:                     await self.client_comms[client].close()
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4501, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4501, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4501, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_8 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_8)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_8);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
              }
            }
            __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4501, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_20);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_20;
              __Pyx_XGIVEREF(__pyx_t_21);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_21;
              __Pyx_XGIVEREF(__pyx_t_22);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_22;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 2;
              return __pyx_r;
              __pyx_L44_resume_from_await:;
              __pyx_t_20 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_20);
              __pyx_t_21 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_21);
              __pyx_t_22 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_22);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4501, __pyx_L37_error)
            } else {
              PyObject* exc_type = __Pyx_PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                else __PYX_ERR(0, 4501, __pyx_L37_error)
              }
            }
/* … */
              __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4501, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4501, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_close); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4501, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_7 = NULL;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
                __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
                if (likely(__pyx_t_7)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
                  __Pyx_INCREF(__pyx_t_7);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_6, function);
                }
              }
              __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4501, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_r);
              if (likely(__pyx_r)) {
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
                __Pyx_XGIVEREF(__pyx_t_11);
                __pyx_cur_scope->__pyx_t_0 = __pyx_t_11;
                __Pyx_XGIVEREF(__pyx_t_12);
                __pyx_cur_scope->__pyx_t_1 = __pyx_t_12;
                __Pyx_XGIVEREF(__pyx_t_13);
                __pyx_cur_scope->__pyx_t_2 = __pyx_t_13;
                __pyx_cur_scope->__pyx_t_4 = __pyx_t_15;
                __Pyx_XGIVEREF(__pyx_t_17);
                __pyx_cur_scope->__pyx_t_5 = __pyx_t_17;
                __Pyx_XGIVEREF(__pyx_t_18);
                __pyx_cur_scope->__pyx_t_6 = __pyx_t_18;
                __Pyx_XGIVEREF(__pyx_t_19);
                __pyx_cur_scope->__pyx_t_7 = __pyx_t_19;
                __Pyx_XGIVEREF(__pyx_t_20);
                __pyx_cur_scope->__pyx_t_8 = __pyx_t_20;
                __Pyx_XGIVEREF(__pyx_t_21);
                __pyx_cur_scope->__pyx_t_9 = __pyx_t_21;
                __Pyx_XGIVEREF(__pyx_t_22);
                __pyx_cur_scope->__pyx_t_10 = __pyx_t_22;
                __pyx_cur_scope->__pyx_t_11 = __pyx_t_27;
                __Pyx_XGIVEREF(__pyx_r);
                __Pyx_RefNannyFinishContext();
                __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                /* return from generator, awaiting value */
                __pyx_generator->resume_label = 3;
                return __pyx_r;
                __pyx_L56_resume_from_await:;
                __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
                __pyx_t_11 = __pyx_cur_scope->__pyx_t_0;
                __pyx_cur_scope->__pyx_t_0 = 0;
                __Pyx_XGOTREF(__pyx_t_11);
                __pyx_t_12 = __pyx_cur_scope->__pyx_t_1;
                __pyx_cur_scope->__pyx_t_1 = 0;
                __Pyx_XGOTREF(__pyx_t_12);
                __pyx_t_13 = __pyx_cur_scope->__pyx_t_2;
                __pyx_cur_scope->__pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_t_13);
                __pyx_t_15 = __pyx_cur_scope->__pyx_t_4;
                __pyx_t_17 = __pyx_cur_scope->__pyx_t_5;
                __pyx_cur_scope->__pyx_t_5 = 0;
                __Pyx_XGOTREF(__pyx_t_17);
                __pyx_t_18 = __pyx_cur_scope->__pyx_t_6;
                __pyx_cur_scope->__pyx_t_6 = 0;
                __Pyx_XGOTREF(__pyx_t_18);
                __pyx_t_19 = __pyx_cur_scope->__pyx_t_7;
                __pyx_cur_scope->__pyx_t_7 = 0;
                __Pyx_XGOTREF(__pyx_t_19);
                __pyx_t_20 = __pyx_cur_scope->__pyx_t_8;
                __pyx_cur_scope->__pyx_t_8 = 0;
                __Pyx_XGOTREF(__pyx_t_20);
                __pyx_t_21 = __pyx_cur_scope->__pyx_t_9;
                __pyx_cur_scope->__pyx_t_9 = 0;
                __Pyx_XGOTREF(__pyx_t_21);
                __pyx_t_22 = __pyx_cur_scope->__pyx_t_10;
                __pyx_cur_scope->__pyx_t_10 = 0;
                __Pyx_XGOTREF(__pyx_t_22);
                __pyx_t_27 = __pyx_cur_scope->__pyx_t_11;
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4501, __pyx_L49_error)
              } else {
                PyObject* exc_type = __Pyx_PyErr_Occurred();
                if (exc_type) {
                  if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                  else __PYX_ERR(0, 4501, __pyx_L49_error)
                }
              }
+4502:                     del self.client_comms[client]
            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4502, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_6);
            if (unlikely(PyObject_DelItem(__pyx_t_6, __pyx_cur_scope->__pyx_v_client) < 0)) __PYX_ERR(0, 4502, __pyx_L37_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4502, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (unlikely(PyObject_DelItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_client) < 0)) __PYX_ERR(0, 4502, __pyx_L49_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4503:                     if self.status == Status.running:
            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4503, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4503, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_running); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4503, __pyx_L37_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4503, __pyx_L37_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4503, __pyx_L37_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_2) {
/* … */
            }
/* … */
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4503, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Status); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4503, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_running); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4503, __pyx_L49_error)
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4503, __pyx_L49_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4503, __pyx_L49_error)
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (__pyx_t_2) {
/* … */
              }
+4504:                         logger.info("Close client connection: %s", client)
              __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4504, __pyx_L37_error)
              __Pyx_GOTREF(__pyx_t_8);
              __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4504, __pyx_L37_error)
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __pyx_t_8 = NULL;
              __pyx_t_5 = 0;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
                __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
                if (likely(__pyx_t_8)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
                  __Pyx_INCREF(__pyx_t_8);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_6, function);
                  __pyx_t_5 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_6)) {
                PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u_Close_client_connection_s, __pyx_cur_scope->__pyx_v_client};
                __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4504, __pyx_L37_error)
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_GOTREF(__pyx_t_1);
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
                PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u_Close_client_connection_s, __pyx_cur_scope->__pyx_v_client};
                __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4504, __pyx_L37_error)
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_GOTREF(__pyx_t_1);
              } else
              #endif
              {
                __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4504, __pyx_L37_error)
                __Pyx_GOTREF(__pyx_t_7);
                if (__pyx_t_8) {
                  __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
                }
                __Pyx_INCREF(__pyx_kp_u_Close_client_connection_s);
                __Pyx_GIVEREF(__pyx_kp_u_Close_client_connection_s);
                PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_5, __pyx_kp_u_Close_client_connection_s);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
                PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_client);
                __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4504, __pyx_L37_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              }
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
                __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4504, __pyx_L49_error)
                __Pyx_GOTREF(__pyx_t_7);
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4504, __pyx_L49_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                __pyx_t_7 = NULL;
                __pyx_t_25 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
                  __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
                  if (likely(__pyx_t_7)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                    __Pyx_INCREF(__pyx_t_7);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_1, function);
                    __pyx_t_25 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_1)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Close_client_connection_s, __pyx_cur_scope->__pyx_v_client};
                  __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_25, 2+__pyx_t_25); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4504, __pyx_L49_error)
                  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __Pyx_GOTREF(__pyx_t_6);
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_u_Close_client_connection_s, __pyx_cur_scope->__pyx_v_client};
                  __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_25, 2+__pyx_t_25); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4504, __pyx_L49_error)
                  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __Pyx_GOTREF(__pyx_t_6);
                } else
                #endif
                {
                  __pyx_t_8 = PyTuple_New(2+__pyx_t_25); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4504, __pyx_L49_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  if (__pyx_t_7) {
                    __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
                  }
                  __Pyx_INCREF(__pyx_kp_u_Close_client_connection_s);
                  __Pyx_GIVEREF(__pyx_kp_u_Close_client_connection_s);
                  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_25, __pyx_kp_u_Close_client_connection_s);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
                  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_25, __pyx_cur_scope->__pyx_v_client);
                  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4504, __pyx_L49_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                }
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4505:             except TypeError:  # comm becomes None during GC
        __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_5) {
          __Pyx_ErrRestore(0,0,0);
          goto __pyx_L38_exception_handled;
        }
        goto __pyx_L39_except_error;
        __pyx_L39_except_error:;
/* … */
          __pyx_t_25 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
          if (__pyx_t_25) {
            __Pyx_ErrRestore(0,0,0);
            goto __pyx_L50_exception_handled;
          }
          goto __pyx_L51_except_error;
          __pyx_L51_except_error:;
 4506:                 pass
 4507: 
+4508:     def remove_client(self, client=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_71remove_client(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_70remove_client[] = " Remove client from network ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_71remove_client = {"remove_client", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_71remove_client, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_70remove_client};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_71remove_client(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_client (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove_client") < 0)) __PYX_ERR(0, 4508, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_client", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4508, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_70remove_client(__pyx_self, __pyx_v_self, __pyx_v_client);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_70remove_client(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_v_plugin = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_remove_client_from_events = 0;
  PyObject *__pyx_v_cleanup_delay = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr52__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_client", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_22_remove_client(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_22_remove_client, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4508, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_client = __pyx_v_client;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_plugin);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_remove_client_from_events);
  __Pyx_XDECREF(__pyx_v_cleanup_delay);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr52__pyx_v_ts);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__236 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_cs, __pyx_n_s_ts, __pyx_n_s_plugin, __pyx_n_s_e, __pyx_n_s_remove_client_from_events, __pyx_n_s_remove_client_from_events, __pyx_n_s_cleanup_delay, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__236)) __PYX_ERR(0, 4508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__236);
  __Pyx_GIVEREF(__pyx_tuple__236);
  __pyx_codeobj__237 = (PyObject*)__Pyx_PyCode_New(2, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__236, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_client, 4508, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__237)) __PYX_ERR(0, 4508, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_71remove_client, 0, __pyx_n_s_Scheduler_remove_client, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__237)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__238);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_remove_client, __pyx_t_12) < 0) __PYX_ERR(0, 4508, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__238 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__238)) __PYX_ERR(0, 4508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__238);
  __Pyx_GIVEREF(__pyx_tuple__238);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client {
  PyObject_HEAD
  PyObject *__pyx_v_client;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_self;
};

 4509:         """ Remove client from network """
+4510:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4511:         if self.status == Status.running:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_running); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4511, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4511, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
/* … */
  }
+4512:             logger.info("Remove client %s", client)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Remove_client_s, __pyx_cur_scope->__pyx_v_client};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4512, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_Remove_client_s, __pyx_cur_scope->__pyx_v_client};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4512, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4512, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_Remove_client_s);
      __Pyx_GIVEREF(__pyx_kp_u_Remove_client_s);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_kp_u_Remove_client_s);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_client);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4512, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4513:         self.log_event(["all", client], {"action": "remove-client", "client": client})
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_u_all);
  __Pyx_GIVEREF(__pyx_n_u_all);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_u_all);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_cur_scope->__pyx_v_client);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_remove_client_2) < 0) __PYX_ERR(0, 4513, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4513, __pyx_L1_error)
  __pyx_t_7 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4513, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4513, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4513, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4513, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4514:         try:
  {
    /*try:*/ {
/* … */
    }
/* … */
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
    __pyx_L9_try_end:;
  }
+4515:             cs: ClientState = parent._clients[client]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4515, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_clients, __pyx_cur_scope->__pyx_v_client); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4515, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4515, __pyx_L4_error)
      __pyx_v_cs = ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_2);
      __pyx_t_2 = 0;
+4516:         except KeyError:
    __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_14) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
 4517:             # XXX is this a legitimate condition?
 4518:             pass
 4519:         else:
+4520:             ts: TaskState
    /*else:*/ {
+4521:             self.client_releases_keys(
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_releases_keys_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4521, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4521, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+4522:                 keys=[ts._key for ts in cs._wants_what], client=cs._client_key
      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4522, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      { /* enter inner scope */
        __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4522, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_12 = 0;
        __pyx_t_6 = __Pyx_set_iterator(__pyx_v_cs->_wants_what, 1, (&__pyx_t_13), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4522, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_3);
        __pyx_t_3 = __pyx_t_6;
        __pyx_t_6 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_set_iter_next(__pyx_t_3, __pyx_t_13, &__pyx_t_12, &__pyx_t_6, __pyx_t_5);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 4522, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4522, __pyx_L12_error)
          __Pyx_XDECREF_SET(__pyx_9genexpr52__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
          __pyx_t_6 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_9genexpr52__pyx_v_ts->_key))) __PYX_ERR(0, 4522, __pyx_L12_error)
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF((PyObject *)__pyx_9genexpr52__pyx_v_ts); __pyx_9genexpr52__pyx_v_ts = 0;
        goto __pyx_L15_exit_scope;
        __pyx_L12_error:;
        __Pyx_XDECREF((PyObject *)__pyx_9genexpr52__pyx_v_ts); __pyx_9genexpr52__pyx_v_ts = 0;
        goto __pyx_L6_except_error;
        __pyx_L15_exit_scope:;
      } /* exit inner scope */
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_keys, __pyx_t_8) < 0) __PYX_ERR(0, 4522, __pyx_L6_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_client, __pyx_v_cs->_client_key) < 0) __PYX_ERR(0, 4522, __pyx_L6_except_error)
 4523:             )
+4524:             del parent._clients[client]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4524, __pyx_L6_except_error)
      }
      if (unlikely(PyDict_DelItem(__pyx_cur_scope->__pyx_v_parent->_clients, __pyx_cur_scope->__pyx_v_client) < 0)) __PYX_ERR(0, 4524, __pyx_L6_except_error)
 4525: 
+4526:             for plugin in self.plugins[:]:
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_8, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8); __pyx_t_13 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_13 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_15 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_15)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4526, __pyx_L6_except_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_15(__pyx_t_8);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 4526, __pyx_L6_except_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_v_plugin, __pyx_t_1);
        __pyx_t_1 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+4527:                 try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          goto __pyx_L25_try_end;
          __pyx_L18_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          goto __pyx_L6_except_error;
          __pyx_L19_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __pyx_L25_try_end:;
        }
+4528:                     plugin.remove_client(scheduler=self, client=client)
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin, __pyx_n_s_remove_client); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4528, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4528, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_scheduler, __pyx_cur_scope->__pyx_v_self) < 0) __PYX_ERR(0, 4528, __pyx_L18_error)
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4528, __pyx_L18_error)
            __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4528, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4529:                 except Exception as e:
          __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
          if (__pyx_t_5) {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_client", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(0, 4529, __pyx_L20_except_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_2);
            __pyx_v_e = __pyx_t_2;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_e);
                __pyx_v_e = NULL;
                goto __pyx_L32;
              }
              __pyx_L31_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
                __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
                if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_21);
                __Pyx_XGOTREF(__pyx_t_22);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_25);
                __Pyx_XGOTREF(__pyx_t_26);
                __pyx_t_5 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_e);
                  __pyx_v_e = NULL;
                }
                if (PY_MAJOR_VERSION >= 3) {
                  __Pyx_XGIVEREF(__pyx_t_24);
                  __Pyx_XGIVEREF(__pyx_t_25);
                  __Pyx_XGIVEREF(__pyx_t_26);
                  __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
                }
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_ErrRestore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
                __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
                __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_20;
                goto __pyx_L20_except_error;
              }
              __pyx_L32:;
            }
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L19_exception_handled;
          }
          goto __pyx_L20_except_error;
          __pyx_L20_except_error:;
+4530:                     logger.exception(e)
              __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4530, __pyx_L31_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exception); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4530, __pyx_L31_error)
              __Pyx_GOTREF(__pyx_t_19);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_7 = NULL;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_19))) {
                __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_19);
                if (likely(__pyx_t_7)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19);
                  __Pyx_INCREF(__pyx_t_7);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_19, function);
                }
              }
              __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_19, __pyx_t_7, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_19, __pyx_v_e);
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4530, __pyx_L31_error)
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            }
 4531: 
+4532:         def remove_client_from_events():
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_client_1remove_client_from_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_13remove_client_1remove_client_from_events = {"remove_client_from_events", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_client_1remove_client_from_events, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_13remove_client_1remove_client_from_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_client_from_events (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_13remove_client_remove_client_from_events(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_13remove_client_remove_client_from_events(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_client_from_events", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_22_remove_client *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_client.remove_client_from_events", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_13remove_client_1remove_client_from_events, 0, __pyx_n_s_Scheduler_remove_client_locals_r, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_remove_client_from_events = __pyx_t_8;
  __pyx_t_8 = 0;
/* … */
  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_client_from_events, 4532, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 4532, __pyx_L1_error)
 4533:             # If the client isn't registered anymore after the delay, remove from events
+4534:             if client not in parent._clients and client in self.events:
  if (unlikely(!__pyx_cur_scope->__pyx_v_client)) { __Pyx_RaiseClosureNameError("client"); __PYX_ERR(0, 4534, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_parent)) { __Pyx_RaiseClosureNameError("parent"); __PYX_ERR(0, 4534, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 4534, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_v_client, __pyx_cur_scope->__pyx_v_parent->_clients, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4534, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  if (unlikely(!__pyx_cur_scope->__pyx_v_client)) { __Pyx_RaiseClosureNameError("client"); __PYX_ERR(0, 4534, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4534, __pyx_L1_error) }
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_client, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4534, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4535:                 del self.events[client]
    if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4535, __pyx_L1_error) }
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4535, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_v_client)) { __Pyx_RaiseClosureNameError("client"); __PYX_ERR(0, 4535, __pyx_L1_error) }
    if (unlikely(PyObject_DelItem(__pyx_t_4, __pyx_cur_scope->__pyx_v_client) < 0)) __PYX_ERR(0, 4535, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4536: 
+4537:         cleanup_delay = parse_timedelta(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+4538:             dask.config.get("distributed.scheduler.events-cleanup-delay")
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dask); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_config); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_kp_u_distributed_scheduler_events_cle) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_distributed_scheduler_events_cle);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cleanup_delay = __pyx_t_8;
  __pyx_t_8 = 0;
 4539:         )
+4540:         self.loop.call_later(cleanup_delay, remove_client_from_events)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_call_later); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_14 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_14 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_cleanup_delay, __pyx_v_remove_client_from_events};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_cleanup_delay, __pyx_v_remove_client_from_events};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_cleanup_delay);
    __Pyx_GIVEREF(__pyx_v_cleanup_delay);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_14, __pyx_v_cleanup_delay);
    __Pyx_INCREF(__pyx_v_remove_client_from_events);
    __Pyx_GIVEREF(__pyx_v_remove_client_from_events);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_14, __pyx_v_remove_client_from_events);
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 4541: 
+4542:     def send_task_to_worker(self, worker, ts: TaskState, duration=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_73send_task_to_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_72send_task_to_worker[] = " Send a single computational task to a worker ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_73send_task_to_worker = {"send_task_to_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_73send_task_to_worker, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_72send_task_to_worker};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_73send_task_to_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_duration = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_task_to_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,&__pyx_n_s_ts,&__pyx_n_s_duration,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("send_task_to_worker", 0, 3, 4, 1); __PYX_ERR(0, 4542, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("send_task_to_worker", 0, 3, 4, 2); __PYX_ERR(0, 4542, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_duration);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "send_task_to_worker") < 0)) __PYX_ERR(0, 4542, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[2]);
    __pyx_v_duration = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("send_task_to_worker", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4542, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_task_to_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 4542, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_72send_task_to_worker(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_ts, __pyx_v_duration);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_72send_task_to_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, PyObject *__pyx_v_duration) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_task_to_worker", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_task_to_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__239 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_ts, __pyx_n_s_duration, __pyx_n_s_parent, __pyx_n_s_msg, __pyx_n_s_e, __pyx_n_s_pdb); if (unlikely(!__pyx_tuple__239)) __PYX_ERR(0, 4542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__239);
  __Pyx_GIVEREF(__pyx_tuple__239);
  __pyx_codeobj__240 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__239, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_send_task_to_worker, 4542, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__240)) __PYX_ERR(0, 4542, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_ts, __pyx_n_u_TaskState) < 0) __PYX_ERR(0, 4542, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_73send_task_to_worker, 0, __pyx_n_s_Scheduler_send_task_to_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__240)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__241);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_12);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_send_task_to_worker, __pyx_t_2) < 0) __PYX_ERR(0, 4542, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__241 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__241)) __PYX_ERR(0, 4542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__241);
  __Pyx_GIVEREF(__pyx_tuple__241);
 4543:         """ Send a single computational task to a worker """
+4544:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4545:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+4546:             msg: dict = _task_to_msg(parent, ts, duration)
      __pyx_t_5.__pyx_n = 1;
      __pyx_t_5.duration = __pyx_v_duration;
      __pyx_t_1 = __pyx_f_11distributed_9scheduler__task_to_msg(__pyx_v_parent, __pyx_v_ts, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4546, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_msg = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+4547:             self.worker_send(worker, msg)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_worker_send); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4547, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_8 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_worker, __pyx_v_msg};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4547, __pyx_L3_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_worker, __pyx_v_msg};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4547, __pyx_L3_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      {
        __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4547, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (__pyx_t_7) {
          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
        }
        __Pyx_INCREF(__pyx_v_worker);
        __Pyx_GIVEREF(__pyx_v_worker);
        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_worker);
        __Pyx_INCREF(__pyx_v_msg);
        __Pyx_GIVEREF(__pyx_v_msg);
        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_msg);
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4547, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4548:         except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_task_to_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(0, 4548, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __pyx_t_8 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
          }
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
          __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+4549:             logger.exception(e)
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_logger); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4549, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4549, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
          }
        }
        __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_e);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4549, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4550:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4550, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4550, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_12) {
/* … */
        }
+4551:                 import pdb
          __pyx_t_7 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4551, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_v_pdb = __pyx_t_7;
          __pyx_t_7 = 0;
 4552: 
+4553:                 pdb.set_trace()
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4553, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_10 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_10)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_10);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4553, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4554:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_9);
        __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_9 = 0; 
        __PYX_ERR(0, 4554, __pyx_L14_error)
      }
 4555: 
+4556:     def handle_uncaught_error(self, **msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_75handle_uncaught_error(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_75handle_uncaught_error = {"handle_uncaught_error", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_75handle_uncaught_error, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_75handle_uncaught_error(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_uncaught_error (wrapper)", 0);
  __pyx_v_msg = PyDict_New(); if (unlikely(!__pyx_v_msg)) return NULL;
  __Pyx_GOTREF(__pyx_v_msg);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_msg, values, pos_args, "handle_uncaught_error") < 0)) __PYX_ERR(0, 4556, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_uncaught_error", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4556, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_msg); __pyx_v_msg = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_uncaught_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_74handle_uncaught_error(__pyx_self, __pyx_v_self, __pyx_v_msg);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_74handle_uncaught_error(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_msg) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_uncaught_error", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_uncaught_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__242 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_msg); if (unlikely(!__pyx_tuple__242)) __PYX_ERR(0, 4556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__242);
  __Pyx_GIVEREF(__pyx_tuple__242);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_75handle_uncaught_error, 0, __pyx_n_s_Scheduler_handle_uncaught_error, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__243)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_uncaught_error, __pyx_t_2) < 0) __PYX_ERR(0, 4556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__243 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__242, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_uncaught_error, 4556, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__243)) __PYX_ERR(0, 4556, __pyx_L1_error)
+4557:         logger.exception(clean_exception(**msg)[1])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_clean_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_v_msg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4558: 
+4559:     def handle_task_finished(self, key=None, worker=None, **msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_77handle_task_finished(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_77handle_task_finished = {"handle_task_finished", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_77handle_task_finished, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_77handle_task_finished(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_task_finished (wrapper)", 0);
  __pyx_v_msg = PyDict_New(); if (unlikely(!__pyx_v_msg)) return NULL;
  __Pyx_GOTREF(__pyx_v_msg);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_msg, values, pos_args, "handle_task_finished") < 0)) __PYX_ERR(0, 4559, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_task_finished", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4559, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_msg); __pyx_v_msg = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_task_finished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_76handle_task_finished(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker, __pyx_v_msg);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_76handle_task_finished(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_worker, PyObject *__pyx_v_msg) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_task_finished", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_task_finished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__244 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_msg, __pyx_n_s_parent, __pyx_n_s_r); if (unlikely(!__pyx_tuple__244)) __PYX_ERR(0, 4559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__244);
  __Pyx_GIVEREF(__pyx_tuple__244);
  __pyx_codeobj__245 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__244, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_task_finished, 4559, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__245)) __PYX_ERR(0, 4559, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_77handle_task_finished, 0, __pyx_n_s_Scheduler_handle_task_finished, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__245)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__246);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_task_finished, __pyx_t_2) < 0) __PYX_ERR(0, 4559, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__246 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__246)) __PYX_ERR(0, 4559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__246);
  __Pyx_GIVEREF(__pyx_tuple__246);
+4560:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4561:         if worker not in parent._workers_dv:
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 4561, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_worker, __pyx_v_parent->_workers_dv, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4561, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4562:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4563:         validate_key(key)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_validate_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4564:         r = self.stimulus_task_finished(key=key, worker=worker, **msg)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stimulus_task_finished); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_v_key) < 0) __PYX_ERR(0, 4564, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_worker, __pyx_v_worker) < 0) __PYX_ERR(0, 4564, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_t_5 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_4, __pyx_v_msg) < 0) __PYX_ERR(0, 4564, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_r = __pyx_t_5;
  __pyx_t_5 = 0;
+4565:         self.transitions(r)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_r) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_r);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4566: 
+4567:     def handle_task_erred(self, key=None, **msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_79handle_task_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_79handle_task_erred = {"handle_task_erred", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_79handle_task_erred, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_79handle_task_erred(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_task_erred (wrapper)", 0);
  __pyx_v_msg = PyDict_New(); if (unlikely(!__pyx_v_msg)) return NULL;
  __Pyx_GOTREF(__pyx_v_msg);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_msg, values, pos_args, "handle_task_erred") < 0)) __PYX_ERR(0, 4567, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_task_erred", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4567, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_msg); __pyx_v_msg = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_task_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_78handle_task_erred(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_msg);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_78handle_task_erred(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_msg) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_task_erred", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_task_erred", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__247 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_msg, __pyx_n_s_r); if (unlikely(!__pyx_tuple__247)) __PYX_ERR(0, 4567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__247);
  __Pyx_GIVEREF(__pyx_tuple__247);
  __pyx_codeobj__248 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__247, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_task_erred, 4567, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__248)) __PYX_ERR(0, 4567, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_79handle_task_erred, 0, __pyx_n_s_Scheduler_handle_task_erred, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__248)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__249);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_task_erred, __pyx_t_2) < 0) __PYX_ERR(0, 4567, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__249 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__249)) __PYX_ERR(0, 4567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__249);
  __Pyx_GIVEREF(__pyx_tuple__249);
+4568:         r = self.stimulus_task_erred(key=key, **msg)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stimulus_task_erred); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_key, __pyx_v_key) < 0) __PYX_ERR(0, 4568, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_t_3 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_msg) < 0) __PYX_ERR(0, 4568, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_r = __pyx_t_3;
  __pyx_t_3 = 0;
+4569:         self.transitions(r)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_r) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_r);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4570: 
+4571:     def handle_release_data(self, key=None, worker=None, client=None, **msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_81handle_release_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_81handle_release_data = {"handle_release_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_81handle_release_data, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_81handle_release_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_release_data (wrapper)", 0);
  __pyx_v_msg = PyDict_New(); if (unlikely(!__pyx_v_msg)) return NULL;
  __Pyx_GOTREF(__pyx_v_msg);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,&__pyx_n_s_client,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_msg, values, pos_args, "handle_release_data") < 0)) __PYX_ERR(0, 4571, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_client = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_release_data", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4571, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_msg); __pyx_v_msg = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_release_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_80handle_release_data(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker, __pyx_v_client, __pyx_v_msg);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_80handle_release_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_worker, CYTHON_UNUSED PyObject *__pyx_v_client, PyObject *__pyx_v_msg) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_release_data", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_release_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__250 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_client, __pyx_n_s_msg, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_r); if (unlikely(!__pyx_tuple__250)) __PYX_ERR(0, 4571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__250);
  __Pyx_GIVEREF(__pyx_tuple__250);
  __pyx_codeobj__251 = (PyObject*)__Pyx_PyCode_New(4, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__250, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_release_data, 4571, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__251)) __PYX_ERR(0, 4571, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_81handle_release_data, 0, __pyx_n_s_Scheduler_handle_release_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__251)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__252);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_release_data, __pyx_t_2) < 0) __PYX_ERR(0, 4571, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__252 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__252)) __PYX_ERR(0, 4571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__252);
  __Pyx_GIVEREF(__pyx_tuple__252);
+4572:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4573:         ts: TaskState = parent._tasks.get(key)
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 4573, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4573, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4574:         if ts is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4575:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4576:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4576, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4576, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4577:         if ts._processing_on != ws:
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_ts->_processing_on), ((PyObject *)__pyx_v_ws), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4577, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4577, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+4578:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4579:         r = self.stimulus_missing_data(key=key, ensure=False, **msg)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stimulus_missing_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_v_key) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_ensure, Py_False) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_t_5 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_4, __pyx_v_msg) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_r = __pyx_t_5;
  __pyx_t_5 = 0;
+4580:         self.transitions(r)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_r) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_r);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4581: 
+4582:     def handle_missing_data(self, key=None, errant_worker=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_83handle_missing_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_83handle_missing_data = {"handle_missing_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_83handle_missing_data, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_83handle_missing_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_errant_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_missing_data (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_errant_worker,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errant_worker);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "handle_missing_data") < 0)) __PYX_ERR(0, 4582, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_errant_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_missing_data", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4582, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_missing_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_82handle_missing_data(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_errant_worker, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_82handle_missing_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_errant_worker, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_missing_data", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_missing_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__253 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_errant_worker, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__253)) __PYX_ERR(0, 4582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__253);
  __Pyx_GIVEREF(__pyx_tuple__253);
  __pyx_codeobj__254 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__253, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_missing_data, 4582, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__254)) __PYX_ERR(0, 4582, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_83handle_missing_data, 0, __pyx_n_s_Scheduler_handle_missing_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__254)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__255);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_missing_data, __pyx_t_2) < 0) __PYX_ERR(0, 4582, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__255 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__255)) __PYX_ERR(0, 4582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__255);
  __Pyx_GIVEREF(__pyx_tuple__255);
+4583:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4584:         logger.debug("handle missing data key=%s worker=%s", key, errant_worker)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_handle_missing_data_key_s_worker, __pyx_v_key, __pyx_v_errant_worker};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4584, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_handle_missing_data_key_s_worker, __pyx_v_key, __pyx_v_errant_worker};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4584, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_handle_missing_data_key_s_worker);
    __Pyx_GIVEREF(__pyx_kp_u_handle_missing_data_key_s_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_handle_missing_data_key_s_worker);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_errant_worker);
    __Pyx_GIVEREF(__pyx_v_errant_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_errant_worker);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4585:         self.log.append(("missing", key, errant_worker))
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_u_missing);
  __Pyx_GIVEREF(__pyx_n_u_missing);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_missing);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_key);
  __Pyx_INCREF(__pyx_v_errant_worker);
  __Pyx_GIVEREF(__pyx_v_errant_worker);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_errant_worker);
  __pyx_t_6 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 4585, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4586: 
+4587:         ts: TaskState = parent._tasks.get(key)
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 4587, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4587, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3);
  __pyx_t_3 = 0;
+4588:         if ts is None or not ts._who_has:
  __pyx_t_8 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_7 = __pyx_t_9;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_9 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
  __pyx_t_8 = ((!__pyx_t_9) != 0);
  __pyx_t_7 = __pyx_t_8;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+4589:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4590:         if errant_worker in parent._workers_dv:
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 4590, __pyx_L1_error)
  }
  __pyx_t_7 = (__Pyx_PyDict_ContainsTF(__pyx_v_errant_worker, __pyx_v_parent->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4590, __pyx_L1_error)
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
  }
+4591:             ws: WorkerState = parent._workers_dv[errant_worker]
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 4591, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_errant_worker); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4591, __pyx_L1_error)
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3);
    __pyx_t_3 = 0;
+4592:             if ws in ts._who_has:
    if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 4592, __pyx_L1_error)
    }
    __pyx_t_8 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ws), __pyx_v_ts->_who_has, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4592, __pyx_L1_error)
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
/* … */
    }
+4593:                 ts._who_has.remove(ws)
      if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 4593, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_PySet_Remove(__pyx_v_ts->_who_has, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 4593, __pyx_L1_error)
+4594:                 ws._has_what.remove(ts)
      if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 4594, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_PySet_Remove(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 4594, __pyx_L1_error)
+4595:                 ws._nbytes -= ts.get_nbytes()
      __pyx_t_10 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4595, __pyx_L1_error)
      __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes - __pyx_t_10);
+4596:         if not ts._who_has:
  __pyx_t_7 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
  __pyx_t_8 = ((!__pyx_t_7) != 0);
  if (__pyx_t_8) {
/* … */
  }
+4597:             if ts._run_spec:
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4597, __pyx_L1_error)
    if (__pyx_t_8) {
/* … */
      goto __pyx_L9;
    }
+4598:                 self.transitions({key: "released"})
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4598, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4598, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_v_key, __pyx_n_u_released) < 0) __PYX_ERR(0, 4598, __pyx_L1_error)
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4598, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4599:             else:
+4600:                 self.transitions({key: "forgotten"})
    /*else*/ {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4600, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4600, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_v_key, __pyx_n_u_forgotten) < 0) __PYX_ERR(0, 4600, __pyx_L1_error)
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4600, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_L9:;
 4601: 
+4602:     def release_worker_data(self, comm=None, keys=None, worker=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_85release_worker_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_85release_worker_data = {"release_worker_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_85release_worker_data, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_85release_worker_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release_worker_data (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_worker,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_worker_data") < 0)) __PYX_ERR(0, 4602, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_worker = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("release_worker_data", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4602, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.release_worker_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_84release_worker_data(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_worker);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_84release_worker_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_worker) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_tasks = NULL;
  PyObject *__pyx_v_removed_tasks = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_wh = NULL;
  PyObject *__pyx_9genexpr53__pyx_v_k = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release_worker_data", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.release_worker_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_tasks);
  __Pyx_XDECREF(__pyx_v_removed_tasks);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_wh);
  __Pyx_XDECREF(__pyx_9genexpr53__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__256 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_worker, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_tasks, __pyx_n_s_removed_tasks, __pyx_n_s_ts, __pyx_n_s_recommendations, __pyx_n_s_wh, __pyx_n_s_k); if (unlikely(!__pyx_tuple__256)) __PYX_ERR(0, 4602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__256);
  __Pyx_GIVEREF(__pyx_tuple__256);
  __pyx_codeobj__257 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_release_worker_data_2, 4602, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__257)) __PYX_ERR(0, 4602, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_85release_worker_data, 0, __pyx_n_s_Scheduler_release_worker_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__257)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__258);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_release_worker_data_2, __pyx_t_2) < 0) __PYX_ERR(0, 4602, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__258 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__258)) __PYX_ERR(0, 4602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__258);
  __Pyx_GIVEREF(__pyx_tuple__258);
+4603:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4604:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4604, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4604, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4605:         tasks = {parent._tasks[k] for k in keys}
  { /* enter inner scope */
    __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4605, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
      __pyx_t_2 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4605, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4605, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 4605, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4605, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 4605, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4605, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4605, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr53__pyx_v_k, __pyx_t_5);
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4605, __pyx_L5_error)
      }
      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_9genexpr53__pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4605, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 4605, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_9genexpr53__pyx_v_k); __pyx_9genexpr53__pyx_v_k = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr53__pyx_v_k); __pyx_9genexpr53__pyx_v_k = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_v_tasks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4606:         removed_tasks = tasks & ws._has_what
  __pyx_t_1 = PyNumber_And(__pyx_v_tasks, __pyx_v_ws->_has_what); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_removed_tasks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4607:         ws._has_what -= removed_tasks
  __pyx_t_1 = PyNumber_InPlaceSubtract(__pyx_v_ws->_has_what, __pyx_v_removed_tasks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4607, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_ws->_has_what);
  __Pyx_DECREF(__pyx_v_ws->_has_what);
  __pyx_v_ws->_has_what = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4608: 
 4609:         ts: TaskState
+4610:         recommendations: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4611:         for ts in removed_tasks:
  __pyx_t_3 = 0;
  __pyx_t_2 = __Pyx_set_iterator(__pyx_v_removed_tasks, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_8 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_3, &__pyx_t_2, __pyx_t_7);
    if (unlikely(__pyx_t_8 == 0)) break;
    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 4611, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4611, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
    __pyx_t_2 = 0;
+4612:             ws._nbytes -= ts.get_nbytes()
    __pyx_t_9 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4612, __pyx_L1_error)
    __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes - __pyx_t_9);
+4613:             wh = ts._who_has
    __pyx_t_2 = __pyx_v_ts->_who_has;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_wh, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+4614:             wh.remove(ws)
    if (unlikely(__pyx_v_wh == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 4614, __pyx_L1_error)
    }
    __pyx_t_10 = __Pyx_PySet_Remove(__pyx_v_wh, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 4614, __pyx_L1_error)
+4615:             if not wh:
    __pyx_t_11 = (__pyx_v_wh != Py_None)&&(PySet_GET_SIZE(__pyx_v_wh) != 0);
    __pyx_t_12 = ((!__pyx_t_11) != 0);
    if (__pyx_t_12) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4616:                 recommendations[ts._key] = "released"
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 4616, __pyx_L1_error)
+4617:         if recommendations:
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_recommendations); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4617, __pyx_L1_error)
  if (__pyx_t_12) {
/* … */
  }
+4618:             self.transitions(recommendations)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_recommendations) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_recommendations);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4618, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4619: 
+4620:     def handle_long_running(self, key=None, worker=None, compute_duration=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_87handle_long_running(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_86handle_long_running[] = "A task has seceded from the thread pool\n\n        We stop the task from being stolen in the future, and change task\n        duration accounting as if the task has stopped.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_87handle_long_running = {"handle_long_running", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_87handle_long_running, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_86handle_long_running};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_87handle_long_running(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  CYTHON_UNUSED PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_compute_duration = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_long_running (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,&__pyx_n_s_compute_duration,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compute_duration);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "handle_long_running") < 0)) __PYX_ERR(0, 4620, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_compute_duration = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_long_running", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4620, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_long_running", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_86handle_long_running(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker, __pyx_v_compute_duration);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_86handle_long_running(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, CYTHON_UNUSED PyObject *__pyx_v_worker, PyObject *__pyx_v_compute_duration) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  double __pyx_v_old_duration;
  PyObject *__pyx_v_new_duration = NULL;
  PyObject *__pyx_v_avg_duration = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_long_running", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_long_running", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_new_duration);
  __Pyx_XDECREF(__pyx_v_avg_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_90generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__259 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_compute_duration, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_old_duration, __pyx_n_s_new_duration, __pyx_n_s_avg_duration); if (unlikely(!__pyx_tuple__259)) __PYX_ERR(0, 4620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__259);
  __Pyx_GIVEREF(__pyx_tuple__259);
  __pyx_codeobj__260 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__259, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_long_running, 4620, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__260)) __PYX_ERR(0, 4620, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_87handle_long_running, 0, __pyx_n_s_Scheduler_handle_long_running, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__260)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__261);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_long_running, __pyx_t_2) < 0) __PYX_ERR(0, 4620, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__261 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__261)) __PYX_ERR(0, 4620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__261);
  __Pyx_GIVEREF(__pyx_tuple__261);
 4621:         """A task has seceded from the thread pool
 4622: 
 4623:         We stop the task from being stolen in the future, and change task
 4624:         duration accounting as if the task has stopped.
 4625:         """
+4626:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4627:         ts: TaskState = parent._tasks[key]
  if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4627, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4627, __pyx_L1_error)
  __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4628:         if "stealing" in self._extensions:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_extensions_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_stealing, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4629:             self._extensions["stealing"].remove_key_from_stealable(ts)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_extensions_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_4, __pyx_n_u_stealing); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_remove_key_from_stealable); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_ts));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4630: 
+4631:         ws: WorkerState = ts._processing_on
  __pyx_t_1 = ((PyObject *)__pyx_v_ts->_processing_on);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4632:         if ws is None:
  __pyx_t_3 = (((PyObject *)__pyx_v_ws) == Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+4633:             logger.debug("Received long-running signal from duplicate task. Ignoring.")
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_kp_u_Received_long_running_signal_fro) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_kp_u_Received_long_running_signal_fro);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4634:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 4635: 
+4636:         if compute_duration:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_compute_duration); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4636, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+4637:             old_duration = ts._prefix._duration_average
    __pyx_t_6 = __pyx_v_ts->_prefix->_duration_average;
    __pyx_v_old_duration = __pyx_t_6;
+4638:             new_duration = compute_duration
    __Pyx_INCREF(__pyx_v_compute_duration);
    __pyx_v_new_duration = __pyx_v_compute_duration;
+4639:             if old_duration < 0:
    __pyx_t_2 = ((__pyx_v_old_duration < 0.0) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+4640:                 avg_duration = new_duration
      __Pyx_INCREF(__pyx_v_new_duration);
      __pyx_v_avg_duration = __pyx_v_new_duration;
 4641:             else:
+4642:                 avg_duration = 0.5 * old_duration + 0.5 * new_duration
    /*else*/ {
      __pyx_t_1 = PyFloat_FromDouble((0.5 * __pyx_v_old_duration)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4642, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_5, __pyx_v_new_duration); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4642, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4642, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_avg_duration = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_L6:;
 4643: 
+4644:             ts._prefix._duration_average = avg_duration
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_avg_duration); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4644, __pyx_L1_error)
    __pyx_v_ts->_prefix->_duration_average = __pyx_t_6;
 4645: 
+4646:         ws._occupancy -= ws._processing[ts]
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_ws->_occupancy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(__pyx_v_ws->_processing == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4646, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyNumber_InPlaceSubtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4646, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ws->_occupancy = __pyx_t_6;
+4647:         parent._total_occupancy -= ws._processing[ts]
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_parent->_total_occupancy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_v_ws->_processing == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4647, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyNumber_InPlaceSubtract(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4647, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_parent->_total_occupancy = __pyx_t_6;
+4648:         ws._processing[ts] = 0
  if (unlikely(__pyx_v_ws->_processing == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4648, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts), __pyx_int_0) < 0)) __PYX_ERR(0, 4648, __pyx_L1_error)
+4649:         self.check_idle_saturated(ws)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_check_idle_saturated); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, ((PyObject *)__pyx_v_ws)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_ws));
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4650: 
+4651:     async def handle_worker(self, comm=None, worker=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_89handle_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_88handle_worker[] = "\n        Listen to responses from a single worker\n\n        This is the main loop for scheduler-worker interaction\n\n        See Also\n        --------\n        Scheduler.handle_client: Equivalent coroutine for clients\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_89handle_worker = {"handle_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_89handle_worker, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_88handle_worker};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_89handle_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_worker (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_worker,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "handle_worker") < 0)) __PYX_ERR(0, 4651, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("handle_worker", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4651, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_88handle_worker(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_worker);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_88handle_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, PyObject *__pyx_v_worker) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_23_handle_worker *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_worker", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_23_handle_worker *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_23_handle_worker(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_23_handle_worker, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_23_handle_worker *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4651, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_worker = __pyx_v_worker;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_90generator7, __pyx_codeobj__65, (PyObject *) __pyx_cur_scope, __pyx_n_s_handle_worker, __pyx_n_s_Scheduler_handle_worker, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4651, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.handle_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_90generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("handle_worker", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4651, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("handle_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__262 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_worker, __pyx_n_s_worker_comm); if (unlikely(!__pyx_tuple__262)) __PYX_ERR(0, 4651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__262);
  __Pyx_GIVEREF(__pyx_tuple__262);
  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__262, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_handle_worker, 4651, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 4651, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_89handle_worker, 0, __pyx_n_s_Scheduler_handle_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__263);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_handle_worker, __pyx_t_2) < 0) __PYX_ERR(0, 4651, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__263 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__263)) __PYX_ERR(0, 4651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__263);
  __Pyx_GIVEREF(__pyx_tuple__263);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_23_handle_worker {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_worker;
  PyObject *__pyx_v_worker_comm;
  int __pyx_t_0;
  int __pyx_t_1;
  char const *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
};

 4652:         """
 4653:         Listen to responses from a single worker
 4654: 
 4655:         This is the main loop for scheduler-worker interaction
 4656: 
 4657:         See Also
 4658:         --------
 4659:         Scheduler.handle_client: Equivalent coroutine for clients
 4660:         """
+4661:         comm.name = "Scheduler connection to worker"
  if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_name, __pyx_kp_u_Scheduler_connection_to_worker) < 0) __PYX_ERR(0, 4661, __pyx_L1_error)
+4662:         worker_comm = self.stream_comms[worker]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_worker_comm = __pyx_t_2;
  __pyx_t_2 = 0;
+4663:         worker_comm.start(comm)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_worker_comm, __pyx_n_s_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_cur_scope->__pyx_v_comm) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_comm);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4664:         logger.info("Starting worker compute stream, %s", worker)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Starting_worker_compute_stream_s, __pyx_cur_scope->__pyx_v_worker};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4664, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Starting_worker_compute_stream_s, __pyx_cur_scope->__pyx_v_worker};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4664, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4664, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Starting_worker_compute_stream_s);
    __Pyx_GIVEREF(__pyx_kp_u_Starting_worker_compute_stream_s);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Starting_worker_compute_stream_s);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_worker);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4664, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4665:         try:
  /*try:*/ {
+4666:             await self.handle_stream(comm=comm, extra={"worker": worker})
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_handle_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4666, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4666, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_comm, __pyx_cur_scope->__pyx_v_comm) < 0) __PYX_ERR(0, 4666, __pyx_L5_error)
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4666, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_worker, __pyx_cur_scope->__pyx_v_worker) < 0) __PYX_ERR(0, 4666, __pyx_L5_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_extra, __pyx_t_5) < 0) __PYX_ERR(0, 4666, __pyx_L5_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4666, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4666, __pyx_L5_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 4666, __pyx_L5_error)
      }
    }
  }
 4667:         finally:
+4668:             if worker in self.stream_comms:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4668, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_worker, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4668, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = (__pyx_t_6 != 0);
      if (__pyx_t_7) {
/* … */
      }
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __pyx_t_4 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
      {
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4668, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_worker, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4668, __pyx_L11_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_6 = (__pyx_t_7 != 0);
        if (__pyx_t_6) {
/* … */
        }
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
      goto __pyx_L1_error;
      __pyx_L11_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+4669:                 worker_comm.abort()
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_worker_comm, __pyx_n_s_abort); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4669, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4669, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_worker_comm, __pyx_n_s_abort); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4669, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4669, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4670:                 await self.remove_worker(address=worker)
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4670, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4670, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_worker) < 0) __PYX_ERR(0, 4670, __pyx_L1_error)
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4670, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XGOTREF(__pyx_r);
        if (likely(__pyx_r)) {
          __Pyx_XGIVEREF(__pyx_r);
          __Pyx_RefNannyFinishContext();
          __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
          /* return from generator, awaiting value */
          __pyx_generator->resume_label = 2;
          return __pyx_r;
          __pyx_L9_resume_from_await:;
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4670, __pyx_L1_error)
        } else {
          PyObject* exc_type = __Pyx_PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
            else __PYX_ERR(0, 4670, __pyx_L1_error)
          }
        }
/* … */
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4670, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4670, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_worker) < 0) __PYX_ERR(0, 4670, __pyx_L11_error)
          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4670, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_8;
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
            __Pyx_XGIVEREF(__pyx_t_10);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_10;
            __Pyx_XGIVEREF(__pyx_t_11);
            __pyx_cur_scope->__pyx_t_4 = __pyx_t_11;
            __Pyx_XGIVEREF(__pyx_t_12);
            __pyx_cur_scope->__pyx_t_5 = __pyx_t_12;
            __Pyx_XGIVEREF(__pyx_t_13);
            __pyx_cur_scope->__pyx_t_6 = __pyx_t_13;
            __Pyx_XGIVEREF(__pyx_t_14);
            __pyx_cur_scope->__pyx_t_7 = __pyx_t_14;
            __Pyx_XGIVEREF(__pyx_t_15);
            __pyx_cur_scope->__pyx_t_8 = __pyx_t_15;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 3;
            return __pyx_r;
            __pyx_L13_resume_from_await:;
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_1;
            __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
            __pyx_t_10 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_10);
            __pyx_t_11 = __pyx_cur_scope->__pyx_t_4;
            __pyx_cur_scope->__pyx_t_4 = 0;
            __Pyx_XGOTREF(__pyx_t_11);
            __pyx_t_12 = __pyx_cur_scope->__pyx_t_5;
            __pyx_cur_scope->__pyx_t_5 = 0;
            __Pyx_XGOTREF(__pyx_t_12);
            __pyx_t_13 = __pyx_cur_scope->__pyx_t_6;
            __pyx_cur_scope->__pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_t_13);
            __pyx_t_14 = __pyx_cur_scope->__pyx_t_7;
            __pyx_cur_scope->__pyx_t_7 = 0;
            __Pyx_XGOTREF(__pyx_t_14);
            __pyx_t_15 = __pyx_cur_scope->__pyx_t_8;
            __pyx_cur_scope->__pyx_t_8 = 0;
            __Pyx_XGOTREF(__pyx_t_15);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4670, __pyx_L11_error)
          } else {
            PyObject* exc_type = __Pyx_PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
              else __PYX_ERR(0, 4670, __pyx_L11_error)
            }
          }
 4671: 
+4672:     def add_plugin(self, plugin=None, idempotent=False, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_92add_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_91add_plugin[] = "\n        Add external plugin to scheduler\n\n        See https://distributed.readthedocs.io/en/latest/plugins.html\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_92add_plugin = {"add_plugin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_92add_plugin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_91add_plugin};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_92add_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_plugin = 0;
  PyObject *__pyx_v_idempotent = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_plugin (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_plugin,&__pyx_n_s_idempotent,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_plugin);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idempotent);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "add_plugin") < 0)) __PYX_ERR(0, 4672, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_plugin = values[1];
    __pyx_v_idempotent = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_plugin", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4672, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_91add_plugin(__pyx_self, __pyx_v_self, __pyx_v_plugin, __pyx_v_idempotent, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_10add_plugin_2generator33(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_91add_plugin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_plugin, PyObject *__pyx_v_idempotent, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_plugin", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_24_add_plugin(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_24_add_plugin, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4672, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_plugin = __pyx_v_plugin;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_plugin);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_plugin);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__264 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_plugin, __pyx_n_s_idempotent, __pyx_n_s_kwargs, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__264)) __PYX_ERR(0, 4672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__264);
  __Pyx_GIVEREF(__pyx_tuple__264);
  __pyx_codeobj__265 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__264, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_plugin, 4672, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__265)) __PYX_ERR(0, 4672, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_92add_plugin, 0, __pyx_n_s_Scheduler_add_plugin, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__265)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__266);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_plugin, __pyx_t_2) < 0) __PYX_ERR(0, 4672, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__266 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__266)) __PYX_ERR(0, 4672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__266);
  __Pyx_GIVEREF(__pyx_tuple__266);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin {
  PyObject_HEAD
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_self;
};

 4673:         """
 4674:         Add external plugin to scheduler
 4675: 
 4676:         See https://distributed.readthedocs.io/en/latest/plugins.html
 4677:         """
+4678:         if isinstance(plugin, type):
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_plugin;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyType_Check(__pyx_t_1); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4679:             plugin = plugin(self, **kwargs)
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_self);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_1, __pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_plugin);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
 4680: 
+4681:         if idempotent and any(isinstance(p, type(plugin)) for p in self.plugins):
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_10add_plugin_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_25_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_25_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_25_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_25_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_25_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4681, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_10add_plugin_2generator33, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_add_plugin_locals_gene, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4681, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_plugin.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_10add_plugin_2generator33(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4681, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4681, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4681, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 4681, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4681, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 4681, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4681, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4681, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_p);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_p, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_plugin)) { __Pyx_RaiseClosureNameError("plugin"); __PYX_ERR(0, 4681, __pyx_L1_error) }
    __pyx_t_5 = PyObject_IsInstance(__pyx_cur_scope->__pyx_v_p, ((PyObject *)Py_TYPE(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_plugin))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4681, __pyx_L1_error)
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_True);
      __pyx_r = Py_True;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_idempotent); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4681, __pyx_L1_error)
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = __pyx_pf_11distributed_9scheduler_9Scheduler_10add_plugin_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_Generator_Next(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4681, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_25_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_24_add_plugin *__pyx_outer_scope;
  PyObject *__pyx_v_p;
};

+4682:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 4683: 
+4684:         self.plugins.append(plugin)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_cur_scope->__pyx_v_plugin); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4684, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4685: 
+4686:     def remove_plugin(self, plugin):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_94remove_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_93remove_plugin[] = " Remove external plugin from scheduler ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_94remove_plugin = {"remove_plugin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_94remove_plugin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_93remove_plugin};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_94remove_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_plugin = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_plugin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_plugin,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_plugin)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("remove_plugin", 1, 2, 2, 1); __PYX_ERR(0, 4686, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove_plugin") < 0)) __PYX_ERR(0, 4686, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_plugin = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_plugin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4686, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_93remove_plugin(__pyx_self, __pyx_v_self, __pyx_v_plugin);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_93remove_plugin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_plugin) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_plugin", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__267 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_plugin); if (unlikely(!__pyx_tuple__267)) __PYX_ERR(0, 4686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__267);
  __Pyx_GIVEREF(__pyx_tuple__267);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_94remove_plugin, 0, __pyx_n_s_Scheduler_remove_plugin, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__268)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_remove_plugin, __pyx_t_2) < 0) __PYX_ERR(0, 4686, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__268 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__267, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_plugin, 4686, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__268)) __PYX_ERR(0, 4686, __pyx_L1_error)
 4687:         """ Remove external plugin from scheduler """
+4688:         self.plugins.remove(plugin)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_remove); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_plugin) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_plugin);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4689: 
+4690:     def worker_send(self, worker, msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_96worker_send(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_95worker_send[] = "Send message to worker\n\n        This also handles connection failures by adding a callback to remove\n        the worker on the next cycle.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_96worker_send = {"worker_send", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_96worker_send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_95worker_send};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_96worker_send(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("worker_send (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,&__pyx_n_s_msg,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("worker_send", 1, 3, 3, 1); __PYX_ERR(0, 4690, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("worker_send", 1, 3, 3, 2); __PYX_ERR(0, 4690, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "worker_send") < 0)) __PYX_ERR(0, 4690, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
    __pyx_v_msg = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("worker_send", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4690, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.worker_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_95worker_send(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_msg);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_95worker_send(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker, PyObject *__pyx_v_msg) {
  PyObject *__pyx_v_stream_comms = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("worker_send", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.worker_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_stream_comms);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__269 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_msg, __pyx_n_s_stream_comms); if (unlikely(!__pyx_tuple__269)) __PYX_ERR(0, 4690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__269);
  __Pyx_GIVEREF(__pyx_tuple__269);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_96worker_send, 0, __pyx_n_s_Scheduler_worker_send, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__270)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_worker_send, __pyx_t_2) < 0) __PYX_ERR(0, 4690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__270 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__269, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_worker_send, 4690, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__270)) __PYX_ERR(0, 4690, __pyx_L1_error)
 4691:         """Send message to worker
 4692: 
 4693:         This also handles connection failures by adding a callback to remove
 4694:         the worker on the next cycle.
 4695:         """
+4696:         stream_comms: dict = self.stream_comms
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4696, __pyx_L1_error)
  __pyx_v_stream_comms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4697:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }
+4698:             stream_comms[worker].send(msg)
      if (unlikely(__pyx_v_stream_comms == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4698, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_stream_comms, __pyx_v_worker); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4698, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_send); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4698, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_msg);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4698, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4699:         except (CommClosedError, AttributeError):
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_6, &__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4699, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_AttributeError);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_6, __pyx_t_5);
    __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0;
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.worker_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(0, 4699, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);
+4700:             self.loop.add_callback(self.remove_worker, address=worker)
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_add_callback); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_address, __pyx_v_worker) < 0) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4700, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 4701: 
+4702:     def client_send(self, client, msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_98client_send(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_97client_send[] = "Send message to client";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_98client_send = {"client_send", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_98client_send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_97client_send};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_98client_send(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_send (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,&__pyx_n_s_msg,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("client_send", 1, 3, 3, 1); __PYX_ERR(0, 4702, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("client_send", 1, 3, 3, 2); __PYX_ERR(0, 4702, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "client_send") < 0)) __PYX_ERR(0, 4702, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
    __pyx_v_msg = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("client_send", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4702, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_97client_send(__pyx_self, __pyx_v_self, __pyx_v_client, __pyx_v_msg);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_97client_send(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client, PyObject *__pyx_v_msg) {
  PyObject *__pyx_v_client_comms = 0;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("client_send", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_client_comms);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__271 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_msg, __pyx_n_s_client_comms, __pyx_n_s_c); if (unlikely(!__pyx_tuple__271)) __PYX_ERR(0, 4702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__271);
  __Pyx_GIVEREF(__pyx_tuple__271);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_98client_send, 0, __pyx_n_s_Scheduler_client_send, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__272)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_client_send, __pyx_t_2) < 0) __PYX_ERR(0, 4702, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__272 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__271, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_client_send, 4702, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__272)) __PYX_ERR(0, 4702, __pyx_L1_error)
 4703:         """Send message to client"""
+4704:         client_comms: dict = self.client_comms
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4704, __pyx_L1_error)
  __pyx_v_client_comms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4705:         c = client_comms.get(client)
  if (unlikely(__pyx_v_client_comms == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 4705, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_comms, __pyx_v_client, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_c = __pyx_t_1;
  __pyx_t_1 = 0;
+4706:         if c is None:
  __pyx_t_2 = (__pyx_v_c == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+4707:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4708:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L9_try_end:;
  }
+4709:             c.send(msg)
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_c, __pyx_n_s_send); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4709, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_msg) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_msg);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4709, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4710:         except CommClosedError:
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4710, __pyx_L6_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_9);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_7, __pyx_t_8);
    __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0;
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.client_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_1) < 0) __PYX_ERR(0, 4710, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_1);
+4711:             if self.status == Status.running:
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4711, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_Status); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4711, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_running); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4711, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_t_12, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4711, __pyx_L6_except_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4711, __pyx_L6_except_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__pyx_t_3) {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
+4712:                 logger.critical("Tried writing to closed comm: %s", msg)
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_logger); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_critical); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_10 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msg};
          __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_11);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msg};
          __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_11);
        } else
        #endif
        {
          __pyx_t_13 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12); __pyx_t_12 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
          __Pyx_GIVEREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
          PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_10, __pyx_kp_u_Tried_writing_to_closed_comm_s);
          __Pyx_INCREF(__pyx_v_msg);
          __Pyx_GIVEREF(__pyx_v_msg);
          PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_10, __pyx_v_msg);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4712, __pyx_L6_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 4713: 
+4714:     def send_all(self, client_msgs: dict, worker_msgs: dict):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_100send_all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_99send_all[] = "Send messages to client and workers";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_100send_all = {"send_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_100send_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_99send_all};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_100send_all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client_msgs,&__pyx_n_s_worker_msgs,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client_msgs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("send_all", 1, 3, 3, 1); __PYX_ERR(0, 4714, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker_msgs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("send_all", 1, 3, 3, 2); __PYX_ERR(0, 4714, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "send_all") < 0)) __PYX_ERR(0, 4714, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_client_msgs = ((PyObject*)values[1]);
    __pyx_v_worker_msgs = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("send_all", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4714, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_client_msgs), (&PyDict_Type), 1, "client_msgs", 1))) __PYX_ERR(0, 4714, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_worker_msgs), (&PyDict_Type), 1, "worker_msgs", 1))) __PYX_ERR(0, 4714, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_99send_all(__pyx_self, __pyx_v_self, __pyx_v_client_msgs, __pyx_v_worker_msgs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_99send_all(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client_msgs, PyObject *__pyx_v_worker_msgs) {
  PyObject *__pyx_v_stream_comms = 0;
  PyObject *__pyx_v_client_comms = 0;
  PyObject *__pyx_v_msgs = 0;
  PyObject *__pyx_v_worker = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_v_client = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_all", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_stream_comms);
  __Pyx_XDECREF(__pyx_v_client_comms);
  __Pyx_XDECREF(__pyx_v_msgs);
  __Pyx_XDECREF(__pyx_v_worker);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_client);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_103generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__273 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_client_msgs, __pyx_n_s_worker_msgs, __pyx_n_s_stream_comms, __pyx_n_s_client_comms, __pyx_n_s_msgs, __pyx_n_s_worker, __pyx_n_s_w, __pyx_n_s_client, __pyx_n_s_c); if (unlikely(!__pyx_tuple__273)) __PYX_ERR(0, 4714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__273);
  __Pyx_GIVEREF(__pyx_tuple__273);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client_msgs, __pyx_n_u_dict_2) < 0) __PYX_ERR(0, 4714, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_worker_msgs, __pyx_n_u_dict_2) < 0) __PYX_ERR(0, 4714, __pyx_L1_error)
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_100send_all, 0, __pyx_n_s_Scheduler_send_all, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__274)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_12, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_send_all, __pyx_t_12) < 0) __PYX_ERR(0, 4714, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__274 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__273, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_send_all, 4714, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__274)) __PYX_ERR(0, 4714, __pyx_L1_error)
 4715:         """Send messages to client and workers"""
+4716:         stream_comms: dict = self.stream_comms
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stream_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4716, __pyx_L1_error)
  __pyx_v_stream_comms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4717:         client_comms: dict = self.client_comms
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_comms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4717, __pyx_L1_error)
  __pyx_v_client_comms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4718:         msgs: list
 4719: 
+4720:         for worker, msgs in worker_msgs.items():
  __pyx_t_2 = 0;
  if (unlikely(__pyx_v_worker_msgs == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4720, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_worker_msgs, 1, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(PyList_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 4720, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_worker, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_6));
    __pyx_t_6 = 0;
+4721:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L12_try_end;
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L6_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_L12_try_end:;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4722:                 w = stream_comms[worker]
        if (unlikely(__pyx_v_stream_comms == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 4722, __pyx_L5_error)
        }
        __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_stream_comms, __pyx_v_worker); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4722, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_6);
        __pyx_t_6 = 0;
+4723:                 w.send(*msgs)
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_w, __pyx_n_s_send); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4723, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = PySequence_Tuple(__pyx_v_msgs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4723, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4723, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+4724:             except (CommClosedError, AttributeError):
      __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_5, &__pyx_t_6);
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4724, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_7 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_11, __pyx_t_12) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_11, __pyx_builtin_AttributeError);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_5, __pyx_t_6);
      __pyx_t_11 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
      if (__pyx_t_7) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_11) < 0) __PYX_ERR(0, 4724, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_11);
+4725:                 self.loop.add_callback(self.remove_worker, address=worker)
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_add_callback); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12);
        __pyx_t_12 = 0;
        __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_address, __pyx_v_worker) < 0) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_14, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4725, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
      __pyx_L7_except_error:;
 4726: 
+4727:         for client, msgs in client_msgs.items():
  __pyx_t_3 = 0;
  if (unlikely(__pyx_v_client_msgs == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 4727, __pyx_L1_error)
  }
  __pyx_t_11 = __Pyx_dict_iterator(__pyx_v_client_msgs, 1, __pyx_n_s_items, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_11;
  __pyx_t_11 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, &__pyx_t_11, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 4727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(PyList_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 4727, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_client, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+4728:             c = client_comms.get(client)
    if (unlikely(__pyx_v_client_comms == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 4728, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_comms, __pyx_v_client, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_5);
    __pyx_t_5 = 0;
+4729:             if c is None:
    __pyx_t_16 = (__pyx_v_c == Py_None);
    __pyx_t_17 = (__pyx_t_16 != 0);
    if (__pyx_t_17) {
/* … */
    }
+4730:                 continue
      goto __pyx_L15_continue;
+4731:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L25_try_end;
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L19_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
      __pyx_L25_try_end:;
    }
    __pyx_L15_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4732:                 c.send(*msgs)
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_c, __pyx_n_s_send); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4732, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = PySequence_Tuple(__pyx_v_msgs); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4732, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4732, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4733:             except CommClosedError:
      __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_11, &__pyx_t_5);
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4733, __pyx_L20_except_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_7 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_6, __pyx_t_15);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_11, __pyx_t_5);
      __pyx_t_6 = 0; __pyx_t_11 = 0; __pyx_t_5 = 0;
      if (__pyx_t_7) {
        __Pyx_AddTraceback("distributed.scheduler.Scheduler.send_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_11, &__pyx_t_6) < 0) __PYX_ERR(0, 4733, __pyx_L20_except_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GOTREF(__pyx_t_6);
+4734:                 if self.status == Status.running:
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4734, __pyx_L20_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_Status); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4734, __pyx_L20_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_running); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4734, __pyx_L20_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = PyObject_RichCompare(__pyx_t_15, __pyx_t_14, Py_EQ); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4734, __pyx_L20_except_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 4734, __pyx_L20_except_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (__pyx_t_17) {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L19_exception_handled;
      }
      goto __pyx_L20_except_error;
      __pyx_L20_except_error:;
+4735:                     logger.critical("Tried writing to closed comm: %s", msgs)
          __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_critical); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_14 = NULL;
          __pyx_t_7 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_14)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_14);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
              __pyx_t_7 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msgs};
            __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_GOTREF(__pyx_t_12);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_u_Tried_writing_to_closed_comm_s, __pyx_v_msgs};
            __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_GOTREF(__pyx_t_12);
          } else
          #endif
          {
            __pyx_t_13 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (__pyx_t_14) {
              __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14); __pyx_t_14 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
            __Pyx_GIVEREF(__pyx_kp_u_Tried_writing_to_closed_comm_s);
            PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_kp_u_Tried_writing_to_closed_comm_s);
            __Pyx_INCREF(__pyx_v_msgs);
            __Pyx_GIVEREF(__pyx_v_msgs);
            PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_msgs);
            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_13, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4735, __pyx_L20_except_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 4736: 
 4737:     ############################
 4738:     # Less common interactions #
 4739:     ############################
 4740: 
+4741:     async def scatter(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_102scatter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_101scatter[] = "Send data out to workers\n\n        See also\n        --------\n        Scheduler.broadcast:\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_102scatter = {"scatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_102scatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_101scatter};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_102scatter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_broadcast = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_data,&__pyx_n_s_workers,&__pyx_n_s_client,&__pyx_n_s_broadcast,&__pyx_n_s_timeout,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_101scatter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_data, PyObject *__pyx_v_workers, PyObject *__pyx_v_client, PyObject *__pyx_v_broadcast, PyObject *__pyx_v_timeout) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_26_scatter *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scatter", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_26_scatter *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_26_scatter(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_26_scatter, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_26_scatter *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4741, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_data = __pyx_v_data;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_data);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_data);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_client = __pyx_v_client;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  __pyx_cur_scope->__pyx_v_broadcast = __pyx_v_broadcast;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_broadcast);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_broadcast);
  __pyx_cur_scope->__pyx_v_timeout = __pyx_v_timeout;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_timeout);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_timeout);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_103generator8, __pyx_codeobj__66, (PyObject *) __pyx_cur_scope, __pyx_n_s_scatter, __pyx_n_s_Scheduler_scatter, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4741, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_103generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scatter", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4741, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_106generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__275 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_data, __pyx_n_s_workers, __pyx_n_s_client, __pyx_n_s_broadcast, __pyx_n_s_timeout, __pyx_n_s_parent, __pyx_n_s_start, __pyx_n_s_ws, __pyx_n_s_nthreads, __pyx_n_s_keys, __pyx_n_s_who_has, __pyx_n_s_nbytes, __pyx_n_s_n, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_w); if (unlikely(!__pyx_tuple__275)) __PYX_ERR(0, 4741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__275);
  __Pyx_GIVEREF(__pyx_tuple__275);
  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(7, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__275, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_scatter, 4741, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 4741, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_102scatter, 0, __pyx_n_s_Scheduler_scatter, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__276);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_scatter, __pyx_t_12) < 0) __PYX_ERR(0, 4741, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__276 = PyTuple_Pack(6, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)__pyx_int_2)); if (unlikely(!__pyx_tuple__276)) __PYX_ERR(0, 4741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__276);
  __Pyx_GIVEREF(__pyx_tuple__276);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_26_scatter {
  PyObject_HEAD
  PyObject *__pyx_v_broadcast;
  PyObject *__pyx_v_client;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_data;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_n;
  PyObject *__pyx_v_nbytes;
  PyObject *__pyx_v_nthreads;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_start;
  PyObject *__pyx_v_timeout;
  PyObject *__pyx_9genexpr55__pyx_v_w;
  PyObject *__pyx_9genexpr56__pyx_v_w;
  PyObject *__pyx_9genexpr57__pyx_v_w;
  PyObject *__pyx_v_who_has;
  PyObject *__pyx_v_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr55__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
};

 4742:         self,
+4743:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+4744:         data=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+4745:         workers=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+4746:         client=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+4747:         broadcast=False,
    values[5] = ((PyObject *)((PyObject *)Py_False));
    values[6] = ((PyObject *)((PyObject *)__pyx_int_2));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_broadcast);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timeout);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) __PYX_ERR(0, 4741, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_data = values[2];
    __pyx_v_workers = values[3];
    __pyx_v_client = values[4];
    __pyx_v_broadcast = values[5];
    __pyx_v_timeout = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scatter", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4741, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_101scatter(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_data, __pyx_v_workers, __pyx_v_client, __pyx_v_broadcast, __pyx_v_timeout);
 4748:         timeout=2,
 4749:     ):
 4750:         """Send data out to workers
 4751: 
 4752:         See also
 4753:         --------
 4754:         Scheduler.broadcast:
 4755:         """
+4756:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4757:         start = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_start = __pyx_t_1;
  __pyx_t_1 = 0;
+4758:         while not parent._workers_dv:
  while (1) {
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4758, __pyx_L1_error)
    __pyx_t_5 = ((!__pyx_t_4) != 0);
    if (!__pyx_t_5) break;
+4759:             await asyncio.sleep(0.2)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sleep); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_float_0_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_float_0_2);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L6_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4759, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 4759, __pyx_L1_error)
      }
    }
+4760:             if time() > start + timeout:
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4760, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4760, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Add(__pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_timeout); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4760, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4760, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 4760, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__pyx_t_5)) {
/* … */
    }
  }
+4761:                 raise TimeoutError("No workers found")
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TimeoutError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4761, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_kp_u_No_workers_found) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_No_workers_found);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4761, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 4761, __pyx_L1_error)
 4762: 
+4763:         if workers is None:
  __pyx_t_5 = (__pyx_cur_scope->__pyx_v_workers == Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L8;
  }
 4764:             ws: WorkerState
+4765:             nthreads = {w: ws._nthreads for w, ws in parent._workers_dv.items()}
    { /* enter inner scope */
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = 0;
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 4765, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_1;
      __pyx_t_1 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_7, &__pyx_t_6, &__pyx_t_1, &__pyx_t_9, NULL, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 4765, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_9);
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4765, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr55__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr55__pyx_v_w, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr55__pyx_v_ws));
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr55__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_9));
        __Pyx_GIVEREF(__pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_9genexpr55__pyx_v_ws->_nthreads); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4765, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_cur_scope->__pyx_9genexpr55__pyx_v_w, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 4765, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_v_nthreads = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 4766:         else:
+4767:             workers = [self.coerce_address(w) for w in workers]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
        __pyx_t_3 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
        __pyx_t_11 = NULL;
      } else {
        __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4767, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_11)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 4767, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4767, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 4767, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4767, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_11(__pyx_t_3);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 4767, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr56__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr56__pyx_v_w, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_12 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_9 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_cur_scope->__pyx_9genexpr56__pyx_v_w) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_9genexpr56__pyx_v_w);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 4767, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } /* exit inner scope */
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
+4768:             nthreads = {w: parent._workers_dv[w].nthreads for w in workers}
    { /* enter inner scope */
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
        __pyx_t_3 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
        __pyx_t_11 = NULL;
      } else {
        __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4768, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4768, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_11)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 4768, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4768, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 4768, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4768, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_11(__pyx_t_3);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 4768, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr57__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr57__pyx_v_w, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        __pyx_t_9 = 0;
        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 4768, __pyx_L1_error)
        }
        __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_9genexpr57__pyx_v_w); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4768, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nthreads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4768, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_cur_scope->__pyx_9genexpr57__pyx_v_w, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 4768, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_v_nthreads = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L8:;
 4769: 
+4770:         assert isinstance(data, dict)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_4 = PyDict_Check(__pyx_cur_scope->__pyx_v_data); 
    if (unlikely(!(__pyx_t_4 != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 4770, __pyx_L1_error)
    }
  }
  #endif
 4771: 
+4772:         keys, who_has, nbytes = await scatter_to_workers(
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scatter_to_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nthreads);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nthreads);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_nthreads);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_data);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_data);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_cur_scope->__pyx_v_data);
/* … */
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 2;
    return __pyx_r;
    __pyx_L15_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4772, __pyx_L1_error)
    __pyx_t_9 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_9);
  } else {
    __pyx_t_9 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_9) < 0) __PYX_ERR(0, 4772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
    PyObject* sequence = __pyx_t_9;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 4772, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_12 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_3 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_3)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_2 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_2)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 3) < 0) __PYX_ERR(0, 4772, __pyx_L1_error)
    __pyx_t_13 = NULL;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    goto __pyx_L17_unpacking_done;
    __pyx_L16_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 4772, __pyx_L1_error)
    __pyx_L17_unpacking_done:;
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_keys = __pyx_t_1;
  __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_who_has = __pyx_t_3;
  __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_nbytes = __pyx_t_2;
  __pyx_t_2 = 0;
+4773:             nthreads, data, rpc=self.rpc, report=False
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_rpc, __pyx_t_9) < 0) __PYX_ERR(0, 4773, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_report, Py_False) < 0) __PYX_ERR(0, 4773, __pyx_L1_error)
 4774:         )
 4775: 
+4776:         self.update_data(who_has=who_has, nbytes=nbytes, client=client)
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_update_data_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_who_has, __pyx_cur_scope->__pyx_v_who_has) < 0) __PYX_ERR(0, 4776, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nbytes, __pyx_cur_scope->__pyx_v_nbytes) < 0) __PYX_ERR(0, 4776, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4776, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4777: 
+4778:         if broadcast:
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_broadcast); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4778, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
  }
+4779:             if broadcast == True:  # noqa: E712
    __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_broadcast, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
      goto __pyx_L19;
    }
+4780:                 n = len(nthreads)
      __pyx_t_7 = PyDict_Size(__pyx_cur_scope->__pyx_v_nthreads); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4780, __pyx_L1_error)
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4780, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_cur_scope->__pyx_v_n = __pyx_t_3;
      __pyx_t_3 = 0;
 4781:             else:
+4782:                 n = broadcast
    /*else*/ {
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_broadcast);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_broadcast);
      __pyx_cur_scope->__pyx_v_n = __pyx_cur_scope->__pyx_v_broadcast;
    }
    __pyx_L19:;
+4783:             await self.replicate(keys=keys, workers=workers, n=n)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_replicate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keys, __pyx_cur_scope->__pyx_v_keys) < 0) __PYX_ERR(0, 4783, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_workers, __pyx_cur_scope->__pyx_v_workers) < 0) __PYX_ERR(0, 4783, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_n, __pyx_cur_scope->__pyx_v_n) < 0) __PYX_ERR(0, 4783, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 3;
      return __pyx_r;
      __pyx_L20_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4783, __pyx_L1_error)
    } else {
      PyObject* exc_type = __Pyx_PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
        else __PYX_ERR(0, 4783, __pyx_L1_error)
      }
    }
 4784: 
+4785:         self.log_event(
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+4786:             [client, "all"], {"action": "scatter", "client": client, "count": len(data)}
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_client);
  __Pyx_INCREF(__pyx_n_u_all);
  __Pyx_GIVEREF(__pyx_n_u_all);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_all);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_action, __pyx_n_u_scatter) < 0) __PYX_ERR(0, 4786, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4786, __pyx_L1_error)
  __pyx_t_7 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4786, __pyx_L1_error)
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_count, __pyx_t_12) < 0) __PYX_ERR(0, 4786, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_3, __pyx_t_1};
    __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4785, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_3, __pyx_t_1};
    __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4785, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_8, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_8, __pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_14, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 4787:         )
+4788:         return keys
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_keys);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4789: 
+4790:     async def gather(self, comm=None, keys=None, serializers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_105gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_104gather[] = " Collect data in from workers ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_105gather = {"gather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_105gather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_104gather};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_105gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_serializers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_serializers,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_serializers);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) __PYX_ERR(0, 4790, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_serializers = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("gather", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4790, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_104gather(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_serializers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_104gather(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_serializers) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_27_gather *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gather", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_27_gather *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_27_gather(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_27_gather, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_27_gather *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4790, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  __pyx_cur_scope->__pyx_v_serializers = __pyx_v_serializers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_serializers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_serializers);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_106generator9, __pyx_codeobj__67, (PyObject *) __pyx_cur_scope, __pyx_n_s_gather, __pyx_n_s_Scheduler_gather, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4790, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_106generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gather", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4790, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__277 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_serializers, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_who_has, __pyx_n_s_key, __pyx_n_s_ts, __pyx_n_s_data, __pyx_n_s_missing_keys, __pyx_n_s_missing_workers, __pyx_n_s_result, __pyx_n_s_missing_states, __pyx_n_s_workers, __pyx_n_s_worker, __pyx_n_s_ws, __pyx_n_s_key, __pyx_n_s_worker); if (unlikely(!__pyx_tuple__277)) __PYX_ERR(0, 4790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__277);
  __Pyx_GIVEREF(__pyx_tuple__277);
  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(4, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__277, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_gather, 4790, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 4790, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_105gather, 0, __pyx_n_s_Scheduler_gather, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__278);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_gather, __pyx_t_12) < 0) __PYX_ERR(0, 4790, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__278 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__278)) __PYX_ERR(0, 4790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__278);
  __Pyx_GIVEREF(__pyx_tuple__278);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_27_gather {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_data;
  PyObject *__pyx_9genexpr59__pyx_v_key;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_missing_keys;
  PyObject *__pyx_v_missing_states;
  PyObject *__pyx_v_missing_workers;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_result;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_serializers;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_v_who_has;
  PyObject *__pyx_9genexpr60__pyx_v_worker;
  PyObject *__pyx_v_worker;
  PyObject *__pyx_v_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr58__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};

 4791:         """ Collect data in from workers """
+4792:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 4793:         ws: WorkerState
+4794:         keys = list(keys)
  __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_keys, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+4795:         who_has = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_who_has = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4796:         for key in keys:
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4796, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4796, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4796, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4796, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4796, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4796, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4797:             ts: TaskState = parent._tasks.get(key)
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 4797, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4797, __pyx_L1_error)
    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
+4798:             if ts is not None:
    __pyx_t_5 = (((PyObject *)__pyx_cur_scope->__pyx_v_ts) != Py_None);
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L6;
    }
+4799:                 who_has[key] = [ws._address for ws in ts._who_has]
      { /* enter inner scope */
        __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4799, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = 0;
        __pyx_t_11 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_ts->_who_has, 1, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4799, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_7);
        __pyx_t_7 = __pyx_t_11;
        __pyx_t_11 = 0;
        while (1) {
          __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_7, __pyx_t_9, &__pyx_t_8, &__pyx_t_11, __pyx_t_10);
          if (unlikely(__pyx_t_12 == 0)) break;
          if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4799, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4799, __pyx_L1_error)
          __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr58__pyx_v_ws));
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr58__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
          __Pyx_GIVEREF(__pyx_t_11);
          __pyx_t_11 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_cur_scope->__pyx_9genexpr58__pyx_v_ws->_address))) __PYX_ERR(0, 4799, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } /* exit inner scope */
      if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_who_has, __pyx_cur_scope->__pyx_v_key, __pyx_t_4) < 0)) __PYX_ERR(0, 4799, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4800:             else:
+4801:                 who_has[key] = []
    /*else*/ {
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_who_has, __pyx_cur_scope->__pyx_v_key, __pyx_t_4) < 0)) __PYX_ERR(0, 4801, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_L6:;
 4802: 
+4803:         data, missing_keys, missing_workers = await gather_from_workers(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_gather_from_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_who_has);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_who_has);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_who_has);
/* … */
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L9_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4803, __pyx_L1_error)
    __pyx_t_11 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_11);
  } else {
    __pyx_t_11 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_11) < 0) __PYX_ERR(0, 4803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
    PyObject* sequence = __pyx_t_11;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 4803, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_13 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
    index = 0; __pyx_t_7 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_7)) goto __pyx_L10_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_7);
    index = 1; __pyx_t_4 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L10_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 2; __pyx_t_1 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_1)) goto __pyx_L10_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 3) < 0) __PYX_ERR(0, 4803, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L11_unpacking_done;
    __pyx_L10_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 4803, __pyx_L1_error)
    __pyx_L11_unpacking_done:;
  }
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_cur_scope->__pyx_v_data = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_missing_keys = __pyx_t_4;
  __pyx_t_4 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_missing_workers = __pyx_t_1;
  __pyx_t_1 = 0;
+4804:             who_has, rpc=self.rpc, close=False, serializers=serializers
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_rpc, __pyx_t_11) < 0) __PYX_ERR(0, 4804, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_close, Py_False) < 0) __PYX_ERR(0, 4804, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_serializers, __pyx_cur_scope->__pyx_v_serializers) < 0) __PYX_ERR(0, 4804, __pyx_L1_error)
 4805:         )
+4806:         if not missing_keys:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_missing_keys); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4806, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_6) != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L12;
  }
+4807:             result = {"status": "OK", "data": data}
    __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_status, __pyx_n_u_OK) < 0) __PYX_ERR(0, 4807, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_data, __pyx_cur_scope->__pyx_v_data) < 0) __PYX_ERR(0, 4807, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_cur_scope->__pyx_v_result = ((PyObject*)__pyx_t_11);
    __pyx_t_11 = 0;
 4808:         else:
+4809:             missing_states = [
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4809, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
+4810:                 (parent._tasks[key].state if key in parent._tasks else None)
        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 4810, __pyx_L1_error)
        }
        __pyx_t_5 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_9genexpr59__pyx_v_key, __pyx_cur_scope->__pyx_v_parent->_tasks, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 4810, __pyx_L1_error)
        if ((__pyx_t_5 != 0)) {
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 4810, __pyx_L1_error)
          }
          __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_9genexpr59__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4810, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_state); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4810, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_4 = __pyx_t_13;
          __pyx_t_13 = 0;
        } else {
          __Pyx_INCREF(Py_None);
          __pyx_t_4 = Py_None;
        }
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 4809, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4811:                 for key in missing_keys
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_missing_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_missing_keys)) {
        __pyx_t_1 = __pyx_cur_scope->__pyx_v_missing_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
        __pyx_t_3 = NULL;
      } else {
        __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_missing_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4811, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4811, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_3)) {
          if (likely(PyList_CheckExact(__pyx_t_1))) {
            if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4811, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4811, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          } else {
            if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4811, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4811, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          }
        } else {
          __pyx_t_4 = __pyx_t_3(__pyx_t_1);
          if (unlikely(!__pyx_t_4)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 4811, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr59__pyx_v_key);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr59__pyx_v_key, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_4 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_cur_scope->__pyx_v_missing_states = ((PyObject*)__pyx_t_11);
    __pyx_t_11 = 0;
 4812:             ]
+4813:             logger.exception(
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4814:                 "Couldn't gather keys %s state: %s workers: %s",
 4815:                 missing_keys,
 4816:                 missing_states,
+4817:                 missing_workers,
    __pyx_t_1 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[5] = {__pyx_t_1, __pyx_kp_u_Couldn_t_gather_keys_s_state_s_w, __pyx_cur_scope->__pyx_v_missing_keys, __pyx_cur_scope->__pyx_v_missing_states, __pyx_cur_scope->__pyx_v_missing_workers};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4813, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_11);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[5] = {__pyx_t_1, __pyx_kp_u_Couldn_t_gather_keys_s_state_s_w, __pyx_cur_scope->__pyx_v_missing_keys, __pyx_cur_scope->__pyx_v_missing_states, __pyx_cur_scope->__pyx_v_missing_workers};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4813, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_11);
    } else
    #endif
    {
      __pyx_t_13 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_Couldn_t_gather_keys_s_state_s_w);
      __Pyx_GIVEREF(__pyx_kp_u_Couldn_t_gather_keys_s_state_s_w);
      PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_10, __pyx_kp_u_Couldn_t_gather_keys_s_state_s_w);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_missing_keys);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_missing_keys);
      PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_10, __pyx_cur_scope->__pyx_v_missing_keys);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_missing_states);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_missing_states);
      PyTuple_SET_ITEM(__pyx_t_13, 2+__pyx_t_10, __pyx_cur_scope->__pyx_v_missing_states);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_missing_workers);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_missing_workers);
      PyTuple_SET_ITEM(__pyx_t_13, 3+__pyx_t_10, __pyx_cur_scope->__pyx_v_missing_workers);
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 4818:             )
+4819:             result = {"status": "error", "keys": missing_keys}
    __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_status, __pyx_n_u_error) < 0) __PYX_ERR(0, 4819, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_keys, __pyx_cur_scope->__pyx_v_missing_keys) < 0) __PYX_ERR(0, 4819, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_cur_scope->__pyx_v_result = ((PyObject*)__pyx_t_11);
    __pyx_t_11 = 0;
+4820:             with log_errors():
    /*with:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_t_11, __pyx_n_s_exit); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_13 = __Pyx_PyObject_LookupSpecial(__pyx_t_11, __pyx_n_s_enter); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4820, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4820, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          goto __pyx_L24_try_end;
          __pyx_L19_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("distributed.scheduler.Scheduler.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_4, &__pyx_t_19) < 0) __PYX_ERR(0, 4820, __pyx_L21_except_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_20 = PyTuple_Pack(3, __pyx_t_11, __pyx_t_4, __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4820, __pyx_L21_except_error)
            __Pyx_GOTREF(__pyx_t_20);
            __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_20, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
            if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4820, __pyx_L21_except_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            if (__pyx_t_5 < 0) __PYX_ERR(0, 4820, __pyx_L21_except_error)
            __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
            if (__pyx_t_6) {
              __Pyx_GIVEREF(__pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_4);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ErrRestoreWithState(__pyx_t_11, __pyx_t_4, __pyx_t_19);
              __pyx_t_11 = 0; __pyx_t_4 = 0; __pyx_t_19 = 0; 
              __PYX_ERR(0, 4820, __pyx_L21_except_error)
            }
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            goto __pyx_L20_exception_handled;
          }
          __pyx_L21_except_error:;
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          goto __pyx_L1_error;
          __pyx_L20_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __pyx_L24_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_15) {
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__12, NULL);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4820, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          }
          goto __pyx_L18;
        }
        __pyx_L18:;
      }
      goto __pyx_L41;
      __pyx_L15_error:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L1_error;
      __pyx_L41:;
    }
  }
  __pyx_L12:;
 4821:                 # Remove suspicious workers from the scheduler but allow them to
 4822:                 # reconnect.
+4823:                 await asyncio.gather(
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4823, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_gather); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4823, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            { /* enter inner scope */
/* … */
            __pyx_t_13 = PySequence_Tuple(__pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4823, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4823, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_15);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_15;
              __Pyx_XGIVEREF(__pyx_t_16);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_16;
              __Pyx_XGIVEREF(__pyx_t_17);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_17;
              __Pyx_XGIVEREF(__pyx_t_18);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_18;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 2;
              return __pyx_r;
              __pyx_L27_resume_from_await:;
              __pyx_t_15 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_15);
              __pyx_t_16 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_16);
              __pyx_t_17 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_17);
              __pyx_t_18 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_18);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4823, __pyx_L19_error)
            } else {
              PyObject* exc_type = __Pyx_PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                else __PYX_ERR(0, 4823, __pyx_L19_error)
              }
            }
+4824:                     *[
              __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4824, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_11);
+4825:                         self.remove_worker(address=worker, close=False)
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4825, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4825, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_7);
                if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_address, __pyx_cur_scope->__pyx_9genexpr60__pyx_v_worker) < 0) __PYX_ERR(0, 4825, __pyx_L19_error)
                if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_close, Py_False) < 0) __PYX_ERR(0, 4825, __pyx_L19_error)
                __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4825, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_19);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_19))) __PYX_ERR(0, 4824, __pyx_L19_error)
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4826:                         for worker in missing_workers
              if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_missing_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_missing_workers)) {
                __pyx_t_13 = __pyx_cur_scope->__pyx_v_missing_workers; __Pyx_INCREF(__pyx_t_13); __pyx_t_2 = 0;
                __pyx_t_3 = NULL;
              } else {
                __pyx_t_2 = -1; __pyx_t_13 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_missing_workers); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4826, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_3 = Py_TYPE(__pyx_t_13)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4826, __pyx_L19_error)
              }
              for (;;) {
                if (likely(!__pyx_t_3)) {
                  if (likely(PyList_CheckExact(__pyx_t_13))) {
                    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_13)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4826, __pyx_L19_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4826, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  } else {
                    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_13)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_13, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4826, __pyx_L19_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4826, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  }
                } else {
                  __pyx_t_1 = __pyx_t_3(__pyx_t_13);
                  if (unlikely(!__pyx_t_1)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 4826, __pyx_L19_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_1);
                }
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr60__pyx_v_worker);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr60__pyx_v_worker, __pyx_t_1);
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;
/* … */
              }
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            } /* exit inner scope */
 4827:                     ]
 4828:                 )
+4829:                 for key, workers in missing_keys.items():
            __pyx_t_2 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_missing_keys == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 4829, __pyx_L19_error)
            }
            __pyx_t_13 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_missing_keys, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4829, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_XDECREF(__pyx_t_11);
            __pyx_t_11 = __pyx_t_13;
            __pyx_t_13 = 0;
            while (1) {
              __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_9, &__pyx_t_2, &__pyx_t_13, &__pyx_t_4, NULL, __pyx_t_10);
              if (unlikely(__pyx_t_12 == 0)) break;
              if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4829, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_13);
              __Pyx_GIVEREF(__pyx_t_13);
              __pyx_t_13 = 0;
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_workers);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;
 4830:                     # Task may already be gone if it was held by a
 4831:                     # `missing_worker`
+4832:                     ts: TaskState = parent._tasks.get(key)
              if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
                __PYX_ERR(0, 4832, __pyx_L19_error)
              }
              __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4832, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4832, __pyx_L19_error)
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;
+4833:                     logger.exception(
              __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4833, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exception); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4833, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_19);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 4834:                         "Workers don't have promised key: %s, %s",
+4835:                         str(workers),
              __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4835, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_13);
+4836:                         str(key),
              __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_cur_scope->__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4836, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_1 = NULL;
              __pyx_t_12 = 0;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_19))) {
                __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_19);
                if (likely(__pyx_t_1)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19);
                  __Pyx_INCREF(__pyx_t_1);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_19, function);
                  __pyx_t_12 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_19)) {
                PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_Workers_don_t_have_promised_key, __pyx_t_13, __pyx_t_7};
                __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4833, __pyx_L19_error)
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_19)) {
                PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_Workers_don_t_have_promised_key, __pyx_t_13, __pyx_t_7};
                __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4833, __pyx_L19_error)
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              } else
              #endif
              {
                __pyx_t_20 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4833, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_20);
                if (__pyx_t_1) {
                  __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_1); __pyx_t_1 = NULL;
                }
                __Pyx_INCREF(__pyx_kp_u_Workers_don_t_have_promised_key);
                __Pyx_GIVEREF(__pyx_kp_u_Workers_don_t_have_promised_key);
                PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_12, __pyx_kp_u_Workers_don_t_have_promised_key);
                __Pyx_GIVEREF(__pyx_t_13);
                PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_12, __pyx_t_13);
                __Pyx_GIVEREF(__pyx_t_7);
                PyTuple_SET_ITEM(__pyx_t_20, 2+__pyx_t_12, __pyx_t_7);
                __pyx_t_13 = 0;
                __pyx_t_7 = 0;
                __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_20, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4833, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
              }
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4837:                     )
+4838:                     if not workers or ts is None:
              __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 4838, __pyx_L19_error)
              __pyx_t_21 = ((!__pyx_t_6) != 0);
              if (!__pyx_t_21) {
              } else {
                __pyx_t_5 = __pyx_t_21;
                goto __pyx_L31_bool_binop_done;
              }
              __pyx_t_21 = (((PyObject *)__pyx_cur_scope->__pyx_v_ts) == Py_None);
              __pyx_t_6 = (__pyx_t_21 != 0);
              __pyx_t_5 = __pyx_t_6;
              __pyx_L31_bool_binop_done:;
              if (__pyx_t_5) {
/* … */
              }
+4839:                         continue
                goto __pyx_L28_continue;
+4840:                     for worker in workers:
              if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                __pyx_t_4 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
                __pyx_t_3 = NULL;
              } else {
                __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4840, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_t_3 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4840, __pyx_L19_error)
              }
              for (;;) {
                if (likely(!__pyx_t_3)) {
                  if (likely(PyList_CheckExact(__pyx_t_4))) {
                    if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_19 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_19); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 4840, __pyx_L19_error)
                    #else
                    __pyx_t_19 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4840, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_19);
                    #endif
                  } else {
                    if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_19 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_19); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 4840, __pyx_L19_error)
                    #else
                    __pyx_t_19 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4840, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_19);
                    #endif
                  }
                } else {
                  __pyx_t_19 = __pyx_t_3(__pyx_t_4);
                  if (unlikely(!__pyx_t_19)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 4840, __pyx_L19_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_19);
                }
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_worker);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_worker, __pyx_t_19);
                __Pyx_GIVEREF(__pyx_t_19);
                __pyx_t_19 = 0;
/* … */
              }
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_L28_continue:;
            }
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+4841:                         ws = parent._workers_dv.get(worker)
                if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
                  __PYX_ERR(0, 4841, __pyx_L19_error)
                }
                __pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_v_worker, Py_None); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4841, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_19);
                if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4841, __pyx_L19_error)
                __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_19));
                __Pyx_GIVEREF(__pyx_t_19);
                __pyx_t_19 = 0;
+4842:                         if ws is not None and ts in ws._has_what:
                __pyx_t_6 = (((PyObject *)__pyx_cur_scope->__pyx_v_ws) != Py_None);
                __pyx_t_21 = (__pyx_t_6 != 0);
                if (__pyx_t_21) {
                } else {
                  __pyx_t_5 = __pyx_t_21;
                  goto __pyx_L36_bool_binop_done;
                }
                if (unlikely(__pyx_cur_scope->__pyx_v_ws->_has_what == Py_None)) {
                  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
                  __PYX_ERR(0, 4842, __pyx_L19_error)
                }
                __pyx_t_21 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_cur_scope->__pyx_v_ts), __pyx_cur_scope->__pyx_v_ws->_has_what, Py_EQ)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 4842, __pyx_L19_error)
                __pyx_t_6 = (__pyx_t_21 != 0);
                __pyx_t_5 = __pyx_t_6;
                __pyx_L36_bool_binop_done:;
                if (__pyx_t_5) {
/* … */
                }
+4843:                             ws._has_what.remove(ts)
                  if (unlikely(__pyx_cur_scope->__pyx_v_ws->_has_what == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
                    __PYX_ERR(0, 4843, __pyx_L19_error)
                  }
                  __pyx_t_22 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_ws->_has_what, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4843, __pyx_L19_error)
+4844:                             ts._who_has.remove(ws)
                  if (unlikely(__pyx_cur_scope->__pyx_v_ts->_who_has == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
                    __PYX_ERR(0, 4844, __pyx_L19_error)
                  }
                  __pyx_t_22 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_ts->_who_has, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4844, __pyx_L19_error)
+4845:                             ws._nbytes -= ts.get_nbytes()
                  __pyx_t_23 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_cur_scope->__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4845, __pyx_L19_error)
                  __pyx_cur_scope->__pyx_v_ws->_nbytes = (__pyx_cur_scope->__pyx_v_ws->_nbytes - __pyx_t_23);
+4846:                             self.transitions({key: "released"})
                  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4846, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_20);
                  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4846, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_7);
                  if (PyDict_SetItem(__pyx_t_7, __pyx_cur_scope->__pyx_v_key, __pyx_n_u_released) < 0) __PYX_ERR(0, 4846, __pyx_L19_error)
                  __pyx_t_13 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
                    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_20);
                    if (likely(__pyx_t_13)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
                      __Pyx_INCREF(__pyx_t_13);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_20, function);
                    }
                  }
                  __pyx_t_19 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_13, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_7);
                  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4846, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4847: 
+4848:         self.log_event("all", {"action": "gather", "count": len(keys)})
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_action, __pyx_n_u_gather) < 0) __PYX_ERR(0, 4848, __pyx_L1_error)
  __pyx_t_9 = PyObject_Length(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4848, __pyx_L1_error)
  __pyx_t_20 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_count, __pyx_t_20) < 0) __PYX_ERR(0, 4848, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_20)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_20);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_n_u_all, __pyx_t_11};
    __pyx_t_19 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4848, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_GOTREF(__pyx_t_19);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_n_u_all, __pyx_t_11};
    __pyx_t_19 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4848, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_GOTREF(__pyx_t_19);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4848, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_20) {
      __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_20); __pyx_t_20 = NULL;
    }
    __Pyx_INCREF(__pyx_n_u_all);
    __Pyx_GIVEREF(__pyx_n_u_all);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_10, __pyx_n_u_all);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_10, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4848, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4849:         return result
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_result);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4850: 
+4851:     def clear_task_state(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_108clear_task_state(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_108clear_task_state = {"clear_task_state", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_108clear_task_state, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_108clear_task_state(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_task_state (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_107clear_task_state(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_107clear_task_state(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_v_collection = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_task_state", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.clear_task_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_collection);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_111generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__279 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_collection); if (unlikely(!__pyx_tuple__279)) __PYX_ERR(0, 4851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__279);
  __Pyx_GIVEREF(__pyx_tuple__279);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_108clear_task_state, 0, __pyx_n_s_Scheduler_clear_task_state, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__280)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_clear_task_state, __pyx_t_12) < 0) __PYX_ERR(0, 4851, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__280 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__279, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_clear_task_state, 4851, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__280)) __PYX_ERR(0, 4851, __pyx_L1_error)
 4852:         # XXX what about nested state such as ClientState.wants_what
 4853:         # (see also fire-and-forget...)
+4854:         logger.info("Clear task state")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Clear_task_state) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Clear_task_state);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4855:         for collection in self._task_state_collections:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_task_state_collections); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4855, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4855, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4855, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 4855, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4855, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_collection, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4856:             collection.clear()
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_collection, __pyx_n_s_clear); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4857: 
+4858:     async def restart(self, client=None, timeout=3):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_110restart(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_109restart[] = " Restart all workers.  Reset local state. ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_110restart = {"restart", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_110restart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_109restart};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_110restart(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("restart (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_client,&__pyx_n_s_timeout,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)__pyx_int_3));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timeout);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restart") < 0)) __PYX_ERR(0, 4858, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_client = values[1];
    __pyx_v_timeout = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("restart", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4858, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_109restart(__pyx_self, __pyx_v_self, __pyx_v_client, __pyx_v_timeout);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_7restart_2generator34(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_109restart(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_client, PyObject *__pyx_v_timeout) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("restart", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_28_restart(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_28_restart, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4858, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_client = __pyx_v_client;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
  __pyx_cur_scope->__pyx_v_timeout = __pyx_v_timeout;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_timeout);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_timeout);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_111generator10, __pyx_codeobj__68, (PyObject *) __pyx_cur_scope, __pyx_n_s_restart, __pyx_n_s_Scheduler_restart, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4858, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_111generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("restart", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4858, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_114generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__281 = PyTuple_Pack(24, __pyx_n_s_self, __pyx_n_s_client, __pyx_n_s_timeout, __pyx_n_s_parent, __pyx_n_s_n_workers, __pyx_n_s_cs, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_nannies, __pyx_n_s_addr, __pyx_n_s_e, __pyx_n_s_plugin, __pyx_n_s_resps, __pyx_n_s_c, __pyx_n_s_start, __pyx_n_s_ts, __pyx_n_s_addr, __pyx_n_s_ws, __pyx_n_s_nanny_address, __pyx_n_s_nanny, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_nanny, __pyx_n_s_nanny); if (unlikely(!__pyx_tuple__281)) __PYX_ERR(0, 4858, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__281);
  __Pyx_GIVEREF(__pyx_tuple__281);
  __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(3, 0, 24, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__281, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_restart, 4858, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 4858, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_110restart, 0, __pyx_n_s_Scheduler_restart, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__68)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4858, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__282);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_restart, __pyx_t_12) < 0) __PYX_ERR(0, 4858, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__282 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)__pyx_int_3)); if (unlikely(!__pyx_tuple__282)) __PYX_ERR(0, 4858, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__282);
  __Pyx_GIVEREF(__pyx_tuple__282);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart {
  PyObject_HEAD
  PyObject *__pyx_9genexpr62__pyx_v_addr;
  PyObject *__pyx_v_addr;
  PyObject *__pyx_v_c;
  PyObject *__pyx_v_client;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs;
  PyObject *__pyx_v_e;
  PyObject *__pyx_v_genexpr;
  Py_ssize_t __pyx_v_n_workers;
  PyObject *__pyx_v_nannies;
  PyObject *__pyx_9genexpr64__pyx_v_nanny;
  PyObject *__pyx_9genexpr66__pyx_v_nanny;
  PyObject *__pyx_9genexpr67__pyx_v_nanny;
  PyObject *__pyx_9genexpr63__pyx_v_nanny_address;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_resps;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_start;
  PyObject *__pyx_v_timeout;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr61__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr62__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  PyObject *__pyx_t_11;
  PyObject *__pyx_t_12;
  char const *__pyx_t_13;
};

 4859:         """ Restart all workers.  Reset local state. """
+4860:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4861:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4861, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4861, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_16, &__pyx_t_3) < 0) __PYX_ERR(0, 4861, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_13, __pyx_t_16, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4861, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_26 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4861, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_32 = __Pyx_PyObject_IsTrue(__pyx_t_26);
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          if (__pyx_t_32 < 0) __PYX_ERR(0, 4861, __pyx_L10_except_error)
          __pyx_t_21 = ((!(__pyx_t_32 != 0)) != 0);
          if (__pyx_t_21) {
            __Pyx_GIVEREF(__pyx_t_13);
            __Pyx_GIVEREF(__pyx_t_16);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_13, __pyx_t_16, __pyx_t_3);
            __pyx_t_13 = 0; __pyx_t_16 = 0; __pyx_t_3 = 0; 
            __PYX_ERR(0, 4861, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4861, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L113;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L113:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4862: 
+4863:             n_workers = len(parent._workers_dv)
          __pyx_t_1 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
          __Pyx_INCREF(__pyx_t_1);
          if (unlikely(__pyx_t_1 == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 4863, __pyx_L8_error)
          }
          __pyx_t_9 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4863, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_cur_scope->__pyx_v_n_workers = __pyx_t_9;
 4864: 
+4865:             logger.info("Send lost future signal to clients")
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4865, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4865, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Send_lost_future_signal_to_clien) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Send_lost_future_signal_to_clien);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4865, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4866:             cs: ClientState
 4867:             ts: TaskState
+4868:             for cs in parent._clients.values():
          __pyx_t_9 = 0;
          if (unlikely(__pyx_cur_scope->__pyx_v_parent->_clients == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
            __PYX_ERR(0, 4868, __pyx_L8_error)
          }
          __pyx_t_3 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_clients, 1, __pyx_n_s_values, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4868, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_XDECREF(__pyx_t_1);
          __pyx_t_1 = __pyx_t_3;
          __pyx_t_3 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_9, NULL, &__pyx_t_3, NULL, __pyx_t_11);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4868, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 4868, __pyx_L8_error)
            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_cs));
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_3));
            __Pyx_GIVEREF(__pyx_t_3);
            __pyx_t_3 = 0;
+4869:                 self.client_releases_keys(
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_client_releases_keys_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4869, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
/* … */
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4869, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4870:                     keys=[ts._key for ts in cs._wants_what], client=cs._client_key
            __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4870, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            { /* enter inner scope */
              __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4870, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_14 = 0;
              __pyx_t_16 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_cs->_wants_what, 1, (&__pyx_t_15), (&__pyx_t_12)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4870, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_XDECREF(__pyx_t_13);
              __pyx_t_13 = __pyx_t_16;
              __pyx_t_16 = 0;
              while (1) {
                __pyx_t_17 = __Pyx_set_iter_next(__pyx_t_13, __pyx_t_15, &__pyx_t_14, &__pyx_t_16, __pyx_t_12);
                if (unlikely(__pyx_t_17 == 0)) break;
                if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 4870, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_16);
                if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 4870, __pyx_L8_error)
                __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr61__pyx_v_ts));
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr61__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_16));
                __Pyx_GIVEREF(__pyx_t_16);
                __pyx_t_16 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_cur_scope->__pyx_9genexpr61__pyx_v_ts->_key))) __PYX_ERR(0, 4870, __pyx_L8_error)
              }
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            } /* exit inner scope */
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keys, __pyx_t_5) < 0) __PYX_ERR(0, 4870, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_cur_scope->__pyx_v_cs->_client_key) < 0) __PYX_ERR(0, 4870, __pyx_L8_error)
 4871:                 )
 4872: 
 4873:             ws: WorkerState
+4874:             nannies = {addr: ws._nanny for addr, ws in parent._workers_dv.items()}
          { /* enter inner scope */
            __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4874, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_10 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 4874, __pyx_L8_error)
            }
            __pyx_t_2 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4874, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_5);
            __pyx_t_5 = __pyx_t_2;
            __pyx_t_2 = 0;
            while (1) {
              __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_10, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_11);
              if (unlikely(__pyx_t_12 == 0)) break;
              if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4874, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_GOTREF(__pyx_t_3);
              if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 4874, __pyx_L8_error)
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr62__pyx_v_addr);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr62__pyx_v_addr, __pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_2);
              __pyx_t_2 = 0;
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr62__pyx_v_ws));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr62__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr62__pyx_v_addr, (PyObject*)__pyx_cur_scope->__pyx_9genexpr62__pyx_v_ws->_nanny))) __PYX_ERR(0, 4874, __pyx_L8_error)
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } /* exit inner scope */
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_nannies = __pyx_t_1;
          __pyx_t_1 = 0;
 4875: 
+4876:             for addr in list(parent._workers_dv):
          __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4876, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          for (;;) {
            if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 4876, __pyx_L8_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4876, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_addr);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_addr, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4877:                 try:
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              goto __pyx_L29_try_end;
              __pyx_L22_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              goto __pyx_L8_error;
              __pyx_L23_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              __pyx_L29_try_end:;
            }
 4878:                     # Ask the worker to close if it doesn't have a nanny,
 4879:                     # otherwise the nanny will kill it anyway
+4880:                     await self.remove_worker(address=addr, close=addr not in nannies)
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4880, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4880, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_addr) < 0) __PYX_ERR(0, 4880, __pyx_L22_error)
                __pyx_t_21 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_addr, __pyx_cur_scope->__pyx_v_nannies, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 4880, __pyx_L22_error)
                __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4880, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_2);
                if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(0, 4880, __pyx_L22_error)
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4880, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_r);
                if (likely(__pyx_r)) {
                  __Pyx_XGIVEREF(__pyx_t_4);
                  __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                  __Pyx_XGIVEREF(__pyx_t_5);
                  __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
                  __Pyx_XGIVEREF(__pyx_t_6);
                  __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
                  __Pyx_XGIVEREF(__pyx_t_7);
                  __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
                  __Pyx_XGIVEREF(__pyx_t_8);
                  __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                  __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
                  __Pyx_XGIVEREF(__pyx_t_18);
                  __pyx_cur_scope->__pyx_t_6 = __pyx_t_18;
                  __Pyx_XGIVEREF(__pyx_t_19);
                  __pyx_cur_scope->__pyx_t_7 = __pyx_t_19;
                  __Pyx_XGIVEREF(__pyx_t_20);
                  __pyx_cur_scope->__pyx_t_8 = __pyx_t_20;
                  __Pyx_XGIVEREF(__pyx_r);
                  __Pyx_RefNannyFinishContext();
                  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                  /* return from generator, awaiting value */
                  __pyx_generator->resume_label = 1;
                  return __pyx_r;
                  __pyx_L30_resume_from_await:;
                  __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                  __pyx_cur_scope->__pyx_t_0 = 0;
                  __Pyx_XGOTREF(__pyx_t_4);
                  __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
                  __pyx_cur_scope->__pyx_t_1 = 0;
                  __Pyx_XGOTREF(__pyx_t_5);
                  __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
                  __pyx_cur_scope->__pyx_t_2 = 0;
                  __Pyx_XGOTREF(__pyx_t_6);
                  __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
                  __pyx_cur_scope->__pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_t_7);
                  __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                  __pyx_cur_scope->__pyx_t_4 = 0;
                  __Pyx_XGOTREF(__pyx_t_8);
                  __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
                  __pyx_t_18 = __pyx_cur_scope->__pyx_t_6;
                  __pyx_cur_scope->__pyx_t_6 = 0;
                  __Pyx_XGOTREF(__pyx_t_18);
                  __pyx_t_19 = __pyx_cur_scope->__pyx_t_7;
                  __pyx_cur_scope->__pyx_t_7 = 0;
                  __Pyx_XGOTREF(__pyx_t_19);
                  __pyx_t_20 = __pyx_cur_scope->__pyx_t_8;
                  __pyx_cur_scope->__pyx_t_8 = 0;
                  __Pyx_XGOTREF(__pyx_t_20);
                  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4880, __pyx_L22_error)
                } else {
                  PyObject* exc_type = __Pyx_PyErr_Occurred();
                  if (exc_type) {
                    if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                    else __PYX_ERR(0, 4880, __pyx_L22_error)
                  }
                }
+4881:                 except Exception as e:
              __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
              if (__pyx_t_11) {
                __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 4881, __pyx_L24_except_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_GIVEREF(__pyx_t_3);
                __pyx_cur_scope->__pyx_v_e = __pyx_t_3;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                    __pyx_cur_scope->__pyx_v_e = NULL;
                    goto __pyx_L37;
                  }
                  __pyx_L36_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_assign
                    __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                    if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
                    if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_24);
                    __Pyx_XGOTREF(__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_29);
                    __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
                    {
                      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                      __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                      __pyx_cur_scope->__pyx_v_e = NULL;
                    }
                    if (PY_MAJOR_VERSION >= 3) {
                      __Pyx_XGIVEREF(__pyx_t_27);
                      __Pyx_XGIVEREF(__pyx_t_28);
                      __Pyx_XGIVEREF(__pyx_t_29);
                      __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29);
                    }
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __Pyx_XGIVEREF(__pyx_t_25);
                    __Pyx_XGIVEREF(__pyx_t_26);
                    __Pyx_ErrRestore(__pyx_t_24, __pyx_t_25, __pyx_t_26);
                    __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                    __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_23;
                    goto __pyx_L24_except_error;
                  }
                  __pyx_L37:;
                }
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                goto __pyx_L23_exception_handled;
              }
              goto __pyx_L24_except_error;
              __pyx_L24_except_error:;
+4882:                     logger.info(
                  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4882, __pyx_L36_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_info); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4882, __pyx_L36_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
                  __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_tuple__69, __pyx_t_13); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4882, __pyx_L36_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                }
/* … */
  __pyx_tuple__69 = PyTuple_Pack(1, __pyx_kp_u_Exception_while_restarting_This); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 4882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__69);
  __Pyx_GIVEREF(__pyx_tuple__69);
+4883:                         "Exception while restarting.  This is normal", exc_info=True
                  __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4883, __pyx_L36_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_exc_info, Py_True) < 0) __PYX_ERR(0, 4883, __pyx_L36_error)
 4884:                     )
 4885: 
+4886:             self.clear_task_state()
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_clear_task_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4886, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4886, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4887: 
+4888:             for plugin in self.plugins[:]:
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4888, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_5, 0, 0, NULL, NULL, &__pyx_slice__57, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4888, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
            __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0;
            __pyx_t_30 = NULL;
          } else {
            __pyx_t_9 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_30 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4888, __pyx_L8_error)
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          for (;;) {
            if (likely(!__pyx_t_30)) {
              if (likely(PyList_CheckExact(__pyx_t_5))) {
                if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_5)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 4888, __pyx_L8_error)
                #else
                __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4888, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              } else {
                if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 4888, __pyx_L8_error)
                #else
                __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4888, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              }
            } else {
              __pyx_t_1 = __pyx_t_30(__pyx_t_5);
              if (unlikely(!__pyx_t_1)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 4888, __pyx_L8_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_plugin);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_plugin, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4889:                 try:
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              goto __pyx_L51_try_end;
              __pyx_L44_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_19, __pyx_t_18);
              goto __pyx_L8_error;
              __pyx_L45_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_19, __pyx_t_18);
              __pyx_L51_try_end:;
            }
+4890:                     plugin.restart(self)
                __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_plugin, __pyx_n_s_restart); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4890, __pyx_L44_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_2 = NULL;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
                  __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
                  if (likely(__pyx_t_2)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                    __Pyx_INCREF(__pyx_t_2);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_3, function);
                  }
                }
                __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_self);
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4890, __pyx_L44_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4891:                 except Exception as e:
              __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
              if (__pyx_t_12) {
                __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 4891, __pyx_L46_except_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_GIVEREF(__pyx_t_3);
                __pyx_cur_scope->__pyx_v_e = __pyx_t_3;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                    __pyx_cur_scope->__pyx_v_e = NULL;
                    goto __pyx_L58;
                  }
                  __pyx_L57_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_assign
                    __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0;
                    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                    if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24);
                    if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27) < 0)) __Pyx_ErrFetch(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_29);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_24);
                    __pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
                    {
                      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e);
                      __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e);
                      __pyx_cur_scope->__pyx_v_e = NULL;
                    }
                    if (PY_MAJOR_VERSION >= 3) {
                      __Pyx_XGIVEREF(__pyx_t_26);
                      __Pyx_XGIVEREF(__pyx_t_25);
                      __Pyx_XGIVEREF(__pyx_t_24);
                      __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_25, __pyx_t_24);
                    }
                    __Pyx_XGIVEREF(__pyx_t_29);
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __Pyx_ErrRestore(__pyx_t_29, __pyx_t_28, __pyx_t_27);
                    __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0;
                    __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_31;
                    goto __pyx_L46_except_error;
                  }
                  __pyx_L58:;
                }
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                goto __pyx_L45_exception_handled;
              }
              goto __pyx_L46_except_error;
              __pyx_L46_except_error:;
+4892:                     logger.exception(e)
                  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4892, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exception); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4892, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __pyx_t_13 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
                    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_16);
                    if (likely(__pyx_t_13)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                      __Pyx_INCREF(__pyx_t_13);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_16, function);
                    }
                  }
                  __pyx_t_22 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_13, __pyx_cur_scope->__pyx_v_e) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_cur_scope->__pyx_v_e);
                  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                  if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4892, __pyx_L57_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                }
 4893: 
+4894:             logger.debug("Send kill signal to nannies: %s", nannies)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4894, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4894, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          __pyx_t_11 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_11 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Send_kill_signal_to_nannies_s, __pyx_cur_scope->__pyx_v_nannies};
            __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4894, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Send_kill_signal_to_nannies_s, __pyx_cur_scope->__pyx_v_nannies};
            __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4894, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_5);
          } else
          #endif
          {
            __pyx_t_1 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Send_kill_signal_to_nannies_s);
            __Pyx_GIVEREF(__pyx_kp_u_Send_kill_signal_to_nannies_s);
            PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_11, __pyx_kp_u_Send_kill_signal_to_nannies_s);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nannies);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nannies);
            PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_11, __pyx_cur_scope->__pyx_v_nannies);
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4895: 
+4896:             nannies = [
          { /* enter inner scope */
            __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4896, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
+4897:                 rpc(nanny_address, connection_args=self.connection_args)
                __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_rpc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address);
                PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address);
                __pyx_t_22 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_22);
                __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_connection_args); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_16);
                if (PyDict_SetItem(__pyx_t_22, __pyx_n_s_connection_args, __pyx_t_16) < 0) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_22); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4897, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_16))) __PYX_ERR(0, 4896, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+4898:                 for nanny_address in nannies.values()
            __pyx_t_9 = 0;
            __pyx_t_1 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_nannies, 0, __pyx_n_s_values, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4898, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_XDECREF(__pyx_t_3);
            __pyx_t_3 = __pyx_t_1;
            __pyx_t_1 = 0;
            while (1) {
              __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_10, &__pyx_t_9, NULL, &__pyx_t_1, NULL, __pyx_t_11);
              if (unlikely(__pyx_t_12 == 0)) break;
              if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 4898, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
+4899:                 if nanny_address is not None
              __pyx_t_21 = (__pyx_cur_scope->__pyx_9genexpr63__pyx_v_nanny_address != Py_None);
              __pyx_t_32 = (__pyx_t_21 != 0);
              if (__pyx_t_32) {
/* … */
              }
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          } /* exit inner scope */
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_nannies);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_nannies, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_t_5 = 0;
 4900:             ]
 4901: 
+4902:             resps = All(
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_All); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4902, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          { /* enter inner scope */
+4903:                 [
            __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_16);
+4904:                     nanny.restart(
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr64__pyx_v_nanny, __pyx_n_s_restart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4904, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
/* … */
              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4904, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_13))) __PYX_ERR(0, 4903, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+4905:                         close=True, timeout=timeout * 0.8, executor_wait=False
              __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4905, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_close, Py_True) < 0) __PYX_ERR(0, 4905, __pyx_L8_error)
              __pyx_t_13 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_timeout, __pyx_float_0_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4905, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_13);
              if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_timeout, __pyx_t_13) < 0) __PYX_ERR(0, 4905, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_executor_wait, Py_False) < 0) __PYX_ERR(0, 4905, __pyx_L8_error)
 4906:                     )
+4907:                     for nanny in nannies
            if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) {
              __pyx_t_22 = __pyx_cur_scope->__pyx_v_nannies; __Pyx_INCREF(__pyx_t_22); __pyx_t_10 = 0;
              __pyx_t_30 = NULL;
            } else {
              __pyx_t_10 = -1; __pyx_t_22 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_nannies); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4907, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_22);
              __pyx_t_30 = Py_TYPE(__pyx_t_22)->tp_iternext; if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4907, __pyx_L8_error)
            }
            for (;;) {
              if (likely(!__pyx_t_30)) {
                if (likely(PyList_CheckExact(__pyx_t_22))) {
                  if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_22)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_2 = PyList_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4907, __pyx_L8_error)
                  #else
                  __pyx_t_2 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4907, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  #endif
                } else {
                  if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_22)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4907, __pyx_L8_error)
                  #else
                  __pyx_t_2 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4907, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  #endif
                }
              } else {
                __pyx_t_2 = __pyx_t_30(__pyx_t_22);
                if (unlikely(!__pyx_t_2)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 4907, __pyx_L8_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr64__pyx_v_nanny);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr64__pyx_v_nanny, __pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_2);
              __pyx_t_2 = 0;
/* … */
            }
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          } /* exit inner scope */
          __pyx_t_22 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_22)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_22);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_5 = (__pyx_t_22) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_22, __pyx_t_16) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_16);
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4902, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_resps = __pyx_t_5;
          __pyx_t_5 = 0;
 4908:                 ]
 4909:             )
+4910:             try:
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
/* … */
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              goto __pyx_L69_error;
              __pyx_L72_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              __pyx_L76_try_end:;
            }
          }
+4911:                 resps = await asyncio.wait_for(resps, timeout)
                __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4911, __pyx_L71_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_wait_for); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4911, __pyx_L71_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_3 = NULL;
                __pyx_t_11 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
                  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_16);
                  if (likely(__pyx_t_3)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                    __Pyx_INCREF(__pyx_t_3);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_16, function);
                    __pyx_t_11 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_16)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_resps, __pyx_cur_scope->__pyx_v_timeout};
                  __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GOTREF(__pyx_t_5);
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_16)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_resps, __pyx_cur_scope->__pyx_v_timeout};
                  __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GOTREF(__pyx_t_5);
                } else
                #endif
                {
                  __pyx_t_22 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  if (__pyx_t_3) {
                    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_3); __pyx_t_3 = NULL;
                  }
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resps);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resps);
                  PyTuple_SET_ITEM(__pyx_t_22, 0+__pyx_t_11, __pyx_cur_scope->__pyx_v_resps);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_timeout);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_timeout);
                  PyTuple_SET_ITEM(__pyx_t_22, 1+__pyx_t_11, __pyx_cur_scope->__pyx_v_timeout);
                  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_22, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                }
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_XGOTREF(__pyx_r);
                if (likely(__pyx_r)) {
                  __Pyx_XGIVEREF(__pyx_t_4);
                  __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                  __Pyx_XGIVEREF(__pyx_t_6);
                  __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                  __Pyx_XGIVEREF(__pyx_t_7);
                  __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                  __Pyx_XGIVEREF(__pyx_t_8);
                  __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                  __Pyx_XGIVEREF(__pyx_t_18);
                  __pyx_cur_scope->__pyx_t_4 = __pyx_t_18;
                  __Pyx_XGIVEREF(__pyx_t_19);
                  __pyx_cur_scope->__pyx_t_6 = __pyx_t_19;
                  __Pyx_XGIVEREF(__pyx_t_20);
                  __pyx_cur_scope->__pyx_t_7 = __pyx_t_20;
                  __Pyx_XGIVEREF(__pyx_r);
                  __Pyx_RefNannyFinishContext();
                  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                  /* return from generator, awaiting value */
                  __pyx_generator->resume_label = 2;
                  return __pyx_r;
                  __pyx_L77_resume_from_await:;
                  __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                  __pyx_cur_scope->__pyx_t_0 = 0;
                  __Pyx_XGOTREF(__pyx_t_4);
                  __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                  __pyx_cur_scope->__pyx_t_1 = 0;
                  __Pyx_XGOTREF(__pyx_t_6);
                  __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                  __pyx_cur_scope->__pyx_t_2 = 0;
                  __Pyx_XGOTREF(__pyx_t_7);
                  __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                  __pyx_cur_scope->__pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_t_8);
                  __pyx_t_18 = __pyx_cur_scope->__pyx_t_4;
                  __pyx_cur_scope->__pyx_t_4 = 0;
                  __Pyx_XGOTREF(__pyx_t_18);
                  __pyx_t_19 = __pyx_cur_scope->__pyx_t_6;
                  __pyx_cur_scope->__pyx_t_6 = 0;
                  __Pyx_XGOTREF(__pyx_t_19);
                  __pyx_t_20 = __pyx_cur_scope->__pyx_t_7;
                  __pyx_cur_scope->__pyx_t_7 = 0;
                  __Pyx_XGOTREF(__pyx_t_20);
                  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __pyx_t_5 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_5);
                } else {
                  __pyx_t_5 = NULL;
                  if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_5) < 0) __PYX_ERR(0, 4911, __pyx_L71_error)
                  __Pyx_GOTREF(__pyx_t_5);
                }
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_resps);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_resps, __pyx_t_5);
                __Pyx_GIVEREF(__pyx_t_5);
                __pyx_t_5 = 0;
+4912:             except TimeoutError:
              __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_22, &__pyx_t_16);
              __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_TimeoutError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4912, __pyx_L73_except_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_5);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_ErrRestore(__pyx_t_3, __pyx_t_22, __pyx_t_16);
              __pyx_t_3 = 0; __pyx_t_22 = 0; __pyx_t_16 = 0;
              if (__pyx_t_11) {
                __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_22, &__pyx_t_3) < 0) __PYX_ERR(0, 4912, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_GOTREF(__pyx_t_22);
                __Pyx_GOTREF(__pyx_t_3);
+4913:                 logger.error(
                __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4913, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4913, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __pyx_t_13 = NULL;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
                  __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
                  if (likely(__pyx_t_13)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                    __Pyx_INCREF(__pyx_t_13);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_1, function);
                  }
                }
                __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_13, __pyx_kp_u_Nannies_didn_t_report_back_resta) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_u_Nannies_didn_t_report_back_resta);
                __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4913, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                goto __pyx_L72_exception_handled;
              }
              goto __pyx_L73_except_error;
              __pyx_L73_except_error:;
 4914:                     "Nannies didn't report back restarted within "
 4915:                     "timeout.  Continuuing with restart process"
 4916:                 )
 4917:             else:
+4918:                 if not all(resp == "OK" for resp in resps):
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_7restart_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_29_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_29_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_29_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_29_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_29_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4918, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_7restart_2generator34, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_restart_locals_genexpr, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4918, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_7restart_2generator34(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4918, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_resps)) { __Pyx_RaiseClosureNameError("resps"); __PYX_ERR(0, 4918, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_resps)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_resps)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_resps; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_resps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4918, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4918, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4918, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4918, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 4918, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4918, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 4918, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_resp);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_resp, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_resp, __pyx_n_u_OK, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 4918, __pyx_L1_error)
    __pyx_t_6 = ((!__pyx_t_5) != 0);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
              /*else:*/ {
                __pyx_t_5 = __pyx_pf_11distributed_9scheduler_9Scheduler_7restart_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4918, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_16 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4918, __pyx_L73_except_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __pyx_t_32 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 4918, __pyx_L73_except_error)
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __pyx_t_21 = ((!__pyx_t_32) != 0);
                if (__pyx_t_21) {
/* … */
                }
              }
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              goto __pyx_L76_try_end;
              __pyx_L71_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_29_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_28_restart *__pyx_outer_scope;
  PyObject *__pyx_v_resp;
};

+4919:                     logger.error(
                  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_logger); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4919, __pyx_L73_except_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4919, __pyx_L73_except_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
                  __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4919, __pyx_L73_except_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __Pyx_INCREF(__pyx_kp_u_Not_all_workers_responded_positi);
                  __Pyx_GIVEREF(__pyx_kp_u_Not_all_workers_responded_positi);
                  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_kp_u_Not_all_workers_responded_positi);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resps);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resps);
                  PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_cur_scope->__pyx_v_resps);
/* … */
                  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_16, __pyx_t_22); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4919, __pyx_L73_except_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4920:                         "Not all workers responded positively: %s", resps, exc_info=True
                  __pyx_t_22 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4920, __pyx_L73_except_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  if (PyDict_SetItem(__pyx_t_22, __pyx_n_s_exc_info, Py_True) < 0) __PYX_ERR(0, 4920, __pyx_L73_except_error)
 4921:                     )
 4922:             finally:
+4923:                 await asyncio.gather(*[nanny.close_rpc() for nanny in nannies])
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gather); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4923, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_22);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              { /* enter inner scope */
                __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_3);
                if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) {
                  __pyx_t_16 = __pyx_cur_scope->__pyx_v_nannies; __Pyx_INCREF(__pyx_t_16); __pyx_t_10 = 0;
                  __pyx_t_30 = NULL;
                } else {
                  __pyx_t_10 = -1; __pyx_t_16 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_nannies); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4923, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_30 = Py_TYPE(__pyx_t_16)->tp_iternext; if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4923, __pyx_L8_error)
                }
                for (;;) {
                  if (likely(!__pyx_t_30)) {
                    if (likely(PyList_CheckExact(__pyx_t_16))) {
                      if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4923, __pyx_L8_error)
                      #else
                      __pyx_t_5 = PySequence_ITEM(__pyx_t_16, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L8_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      #endif
                    } else {
                      if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_16, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4923, __pyx_L8_error)
                      #else
                      __pyx_t_5 = PySequence_ITEM(__pyx_t_16, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L8_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      #endif
                    }
                  } else {
                    __pyx_t_5 = __pyx_t_30(__pyx_t_16);
                    if (unlikely(!__pyx_t_5)) {
                      PyObject* exc_type = PyErr_Occurred();
                      if (exc_type) {
                        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                        else __PYX_ERR(0, 4923, __pyx_L8_error)
                      }
                      break;
                    }
                    __Pyx_GOTREF(__pyx_t_5);
                  }
                  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr66__pyx_v_nanny);
                  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr66__pyx_v_nanny, __pyx_t_5);
                  __Pyx_GIVEREF(__pyx_t_5);
                  __pyx_t_5 = 0;
                  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr66__pyx_v_nanny, __pyx_n_s_close_rpc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4923, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_13 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
                    if (likely(__pyx_t_13)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                      __Pyx_INCREF(__pyx_t_13);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_1, function);
                    }
                  }
                  __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
                  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 4923, __pyx_L8_error)
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                }
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              } /* exit inner scope */
              __pyx_t_16 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4923, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_t_16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_r);
              if (likely(__pyx_r)) {
                __Pyx_XGIVEREF(__pyx_t_4);
                __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                __Pyx_XGIVEREF(__pyx_t_6);
                __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                __Pyx_XGIVEREF(__pyx_t_7);
                __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                __Pyx_XGIVEREF(__pyx_t_8);
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                __Pyx_XGIVEREF(__pyx_r);
                __Pyx_RefNannyFinishContext();
                __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                /* return from generator, awaiting value */
                __pyx_generator->resume_label = 3;
                return __pyx_r;
                __pyx_L83_resume_from_await:;
                __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                __pyx_cur_scope->__pyx_t_0 = 0;
                __Pyx_XGOTREF(__pyx_t_4);
                __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                __pyx_cur_scope->__pyx_t_1 = 0;
                __Pyx_XGOTREF(__pyx_t_6);
                __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                __pyx_cur_scope->__pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_t_7);
                __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                __pyx_cur_scope->__pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_t_8);
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4923, __pyx_L8_error)
              } else {
                PyObject* exc_type = __Pyx_PyErr_Occurred();
                if (exc_type) {
                  if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                  else __PYX_ERR(0, 4923, __pyx_L8_error)
                }
              }
              goto __pyx_L70;
            }
            __pyx_L69_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_assign
              __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
              if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_20);
              __Pyx_XGOTREF(__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_24);
              __Pyx_XGOTREF(__pyx_t_25);
              __Pyx_XGOTREF(__pyx_t_26);
              __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_33 = __pyx_filename;
              {
                __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gather); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4923, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                { /* enter inner scope */
                  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L85_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_nannies)) {
                    __pyx_t_22 = __pyx_cur_scope->__pyx_v_nannies; __Pyx_INCREF(__pyx_t_22); __pyx_t_10 = 0;
                    __pyx_t_30 = NULL;
                  } else {
                    __pyx_t_10 = -1; __pyx_t_22 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_nannies); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4923, __pyx_L85_error)
                    __Pyx_GOTREF(__pyx_t_22);
                    __pyx_t_30 = Py_TYPE(__pyx_t_22)->tp_iternext; if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4923, __pyx_L85_error)
                  }
                  for (;;) {
                    if (likely(!__pyx_t_30)) {
                      if (likely(PyList_CheckExact(__pyx_t_22))) {
                        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_22)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4923, __pyx_L85_error)
                        #else
                        __pyx_t_5 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L85_error)
                        __Pyx_GOTREF(__pyx_t_5);
                        #endif
                      } else {
                        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_22)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4923, __pyx_L85_error)
                        #else
                        __pyx_t_5 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L85_error)
                        __Pyx_GOTREF(__pyx_t_5);
                        #endif
                      }
                    } else {
                      __pyx_t_5 = __pyx_t_30(__pyx_t_22);
                      if (unlikely(!__pyx_t_5)) {
                        PyObject* exc_type = PyErr_Occurred();
                        if (exc_type) {
                          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                          else __PYX_ERR(0, 4923, __pyx_L85_error)
                        }
                        break;
                      }
                      __Pyx_GOTREF(__pyx_t_5);
                    }
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr67__pyx_v_nanny);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr67__pyx_v_nanny, __pyx_t_5);
                    __Pyx_GIVEREF(__pyx_t_5);
                    __pyx_t_5 = 0;
                    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr67__pyx_v_nanny, __pyx_n_s_close_rpc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4923, __pyx_L85_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __pyx_t_13 = NULL;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
                      if (likely(__pyx_t_13)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                        __Pyx_INCREF(__pyx_t_13);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_1, function);
                      }
                    }
                    __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
                    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4923, __pyx_L85_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 4923, __pyx_L85_error)
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                } /* exit inner scope */
                __pyx_t_22 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4923, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_22);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_22, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4923, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_r);
                if (likely(__pyx_r)) {
                  __Pyx_XGIVEREF(__pyx_t_4);
                  __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                  __Pyx_XGIVEREF(__pyx_t_6);
                  __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                  __Pyx_XGIVEREF(__pyx_t_7);
                  __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                  __Pyx_XGIVEREF(__pyx_t_8);
                  __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                  __pyx_cur_scope->__pyx_t_9 = __pyx_t_11;
                  __pyx_cur_scope->__pyx_t_10 = __pyx_t_12;
                  __Pyx_XGIVEREF(__pyx_t_18);
                  __pyx_cur_scope->__pyx_t_4 = __pyx_t_18;
                  __Pyx_XGIVEREF(__pyx_t_19);
                  __pyx_cur_scope->__pyx_t_6 = __pyx_t_19;
                  __Pyx_XGIVEREF(__pyx_t_20);
                  __pyx_cur_scope->__pyx_t_7 = __pyx_t_20;
                  __Pyx_XGIVEREF(__pyx_t_24);
                  __pyx_cur_scope->__pyx_t_8 = __pyx_t_24;
                  __Pyx_XGIVEREF(__pyx_t_25);
                  __pyx_cur_scope->__pyx_t_11 = __pyx_t_25;
                  __Pyx_XGIVEREF(__pyx_t_26);
                  __pyx_cur_scope->__pyx_t_12 = __pyx_t_26;
                  __pyx_cur_scope->__pyx_t_13 = __pyx_t_33;
                  __Pyx_XGIVEREF(__pyx_r);
                  __Pyx_RefNannyFinishContext();
                  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                  /* return from generator, awaiting value */
                  __pyx_generator->resume_label = 4;
                  return __pyx_r;
                  __pyx_L88_resume_from_await:;
                  __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                  __pyx_cur_scope->__pyx_t_0 = 0;
                  __Pyx_XGOTREF(__pyx_t_4);
                  __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                  __pyx_cur_scope->__pyx_t_1 = 0;
                  __Pyx_XGOTREF(__pyx_t_6);
                  __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                  __pyx_cur_scope->__pyx_t_2 = 0;
                  __Pyx_XGOTREF(__pyx_t_7);
                  __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                  __pyx_cur_scope->__pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_t_8);
                  __pyx_t_11 = __pyx_cur_scope->__pyx_t_9;
                  __pyx_t_12 = __pyx_cur_scope->__pyx_t_10;
                  __pyx_t_18 = __pyx_cur_scope->__pyx_t_4;
                  __pyx_cur_scope->__pyx_t_4 = 0;
                  __Pyx_XGOTREF(__pyx_t_18);
                  __pyx_t_19 = __pyx_cur_scope->__pyx_t_6;
                  __pyx_cur_scope->__pyx_t_6 = 0;
                  __Pyx_XGOTREF(__pyx_t_19);
                  __pyx_t_20 = __pyx_cur_scope->__pyx_t_7;
                  __pyx_cur_scope->__pyx_t_7 = 0;
                  __Pyx_XGOTREF(__pyx_t_20);
                  __pyx_t_24 = __pyx_cur_scope->__pyx_t_8;
                  __pyx_cur_scope->__pyx_t_8 = 0;
                  __Pyx_XGOTREF(__pyx_t_24);
                  __pyx_t_25 = __pyx_cur_scope->__pyx_t_11;
                  __pyx_cur_scope->__pyx_t_11 = 0;
                  __Pyx_XGOTREF(__pyx_t_25);
                  __pyx_t_26 = __pyx_cur_scope->__pyx_t_12;
                  __pyx_cur_scope->__pyx_t_12 = 0;
                  __Pyx_XGOTREF(__pyx_t_26);
                  __pyx_t_33 = __pyx_cur_scope->__pyx_t_13;
                  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4923, __pyx_L85_error)
                } else {
                  PyObject* exc_type = __Pyx_PyErr_Occurred();
                  if (exc_type) {
                    if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                    else __PYX_ERR(0, 4923, __pyx_L85_error)
                  }
                }
              }
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_26);
                __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
              }
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ErrRestore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
              __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
              __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_33;
              goto __pyx_L8_error;
              __pyx_L85_error:;
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_26);
                __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
              }
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
              goto __pyx_L8_error;
            }
            __pyx_L70:;
          }
 4924: 
+4925:             self.clear_task_state()
          __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_clear_task_state); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4925, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_22))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_22);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_22, function);
            }
          }
          __pyx_t_3 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_22, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_22);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4925, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4926: 
+4927:             with suppress(AttributeError):
          /*with:*/ {
            __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_n_s_suppress); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4927, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_22);
            __pyx_t_16 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_22))) {
              __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_22);
              if (likely(__pyx_t_16)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
                __Pyx_INCREF(__pyx_t_16);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_22, function);
              }
            }
            __pyx_t_3 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_22, __pyx_t_16, __pyx_builtin_AttributeError) : __Pyx_PyObject_CallOneArg(__pyx_t_22, __pyx_builtin_AttributeError);
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4927, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __pyx_t_26 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4927, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_26);
            __pyx_t_16 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4927, __pyx_L89_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_16);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_16, function);
              }
            }
            __pyx_t_22 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4927, __pyx_L89_error)
            __Pyx_GOTREF(__pyx_t_22);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            /*try:*/ {
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                goto __pyx_L98_try_end;
                __pyx_L93_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("distributed.scheduler.Scheduler.restart", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_22, &__pyx_t_3, &__pyx_t_16) < 0) __PYX_ERR(0, 4927, __pyx_L95_except_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_5 = PyTuple_Pack(3, __pyx_t_22, __pyx_t_3, __pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4927, __pyx_L95_except_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_26, __pyx_t_5, NULL);
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4927, __pyx_L95_except_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_19);
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  if (__pyx_t_21 < 0) __PYX_ERR(0, 4927, __pyx_L95_except_error)
                  __pyx_t_32 = ((!(__pyx_t_21 != 0)) != 0);
                  if (__pyx_t_32) {
                    __Pyx_GIVEREF(__pyx_t_22);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __Pyx_XGIVEREF(__pyx_t_16);
                    __Pyx_ErrRestoreWithState(__pyx_t_22, __pyx_t_3, __pyx_t_16);
                    __pyx_t_22 = 0; __pyx_t_3 = 0; __pyx_t_16 = 0; 
                    __PYX_ERR(0, 4927, __pyx_L95_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                  goto __pyx_L94_exception_handled;
                }
                __pyx_L95_except_error:;
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_18);
                __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_18);
                goto __pyx_L8_error;
                __pyx_L94_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_18);
                __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_18);
                __pyx_L98_try_end:;
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_26) {
                  __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_26, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4927, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                }
                goto __pyx_L92;
              }
              __pyx_L92:;
            }
            goto __pyx_L104;
            __pyx_L89_error:;
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            goto __pyx_L8_error;
            __pyx_L104:;
          }
+4928:                 for c in self._worker_coroutines:
                  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_coroutines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4928, __pyx_L93_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
                    __pyx_t_22 = __pyx_t_3; __Pyx_INCREF(__pyx_t_22); __pyx_t_10 = 0;
                    __pyx_t_30 = NULL;
                  } else {
                    __pyx_t_10 = -1; __pyx_t_22 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4928, __pyx_L93_error)
                    __Pyx_GOTREF(__pyx_t_22);
                    __pyx_t_30 = Py_TYPE(__pyx_t_22)->tp_iternext; if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4928, __pyx_L93_error)
                  }
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  for (;;) {
                    if (likely(!__pyx_t_30)) {
                      if (likely(PyList_CheckExact(__pyx_t_22))) {
                        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_22)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4928, __pyx_L93_error)
                        #else
                        __pyx_t_3 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4928, __pyx_L93_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        #endif
                      } else {
                        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_22)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_22, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 4928, __pyx_L93_error)
                        #else
                        __pyx_t_3 = PySequence_ITEM(__pyx_t_22, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4928, __pyx_L93_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        #endif
                      }
                    } else {
                      __pyx_t_3 = __pyx_t_30(__pyx_t_22);
                      if (unlikely(!__pyx_t_3)) {
                        PyObject* exc_type = PyErr_Occurred();
                        if (exc_type) {
                          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                          else __PYX_ERR(0, 4928, __pyx_L93_error)
                        }
                        break;
                      }
                      __Pyx_GOTREF(__pyx_t_3);
                    }
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_c);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_c, __pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __pyx_t_3 = 0;
/* … */
                  }
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+4929:                     c.cancel()
                    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_c, __pyx_n_s_cancel); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4929, __pyx_L93_error)
                    __Pyx_GOTREF(__pyx_t_16);
                    __pyx_t_5 = NULL;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
                      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_16);
                      if (likely(__pyx_t_5)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                        __Pyx_INCREF(__pyx_t_5);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_16, function);
                      }
                    }
                    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
                    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4929, __pyx_L93_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4930: 
+4931:             self.log_event([client, "all"], {"action": "restart", "client": client})
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4931, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_22 = PyList_New(2); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4931, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_22);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_client);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_client);
          PyList_SET_ITEM(__pyx_t_22, 0, __pyx_cur_scope->__pyx_v_client);
          __Pyx_INCREF(__pyx_n_u_all);
          __Pyx_GIVEREF(__pyx_n_u_all);
          PyList_SET_ITEM(__pyx_t_22, 1, __pyx_n_u_all);
          __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4931, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_action, __pyx_n_u_restart) < 0) __PYX_ERR(0, 4931, __pyx_L8_error)
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_client, __pyx_cur_scope->__pyx_v_client) < 0) __PYX_ERR(0, 4931, __pyx_L8_error)
          __pyx_t_1 = NULL;
          __pyx_t_12 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_12 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_22, __pyx_t_5};
            __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4931, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
            PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_22, __pyx_t_5};
            __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4931, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } else
          #endif
          {
            __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4931, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (__pyx_t_1) {
              __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_22);
            PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_t_22);
            __Pyx_GIVEREF(__pyx_t_5);
            PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_5);
            __pyx_t_22 = 0;
            __pyx_t_5 = 0;
            __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_13, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4931, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+4932:             start = time()
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4932, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_13 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_13)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_16 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4932, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GIVEREF(__pyx_t_16);
          __pyx_cur_scope->__pyx_v_start = __pyx_t_16;
          __pyx_t_16 = 0;
+4933:             while time() < start + 10 and len(parent._workers_dv) < n_workers:
          while (1) {
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_13 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_13)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_13);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_16 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_start, __pyx_int_10, 10, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_13 = PyObject_RichCompare(__pyx_t_16, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (__pyx_t_21) {
            } else {
              __pyx_t_32 = __pyx_t_21;
              goto __pyx_L107_bool_binop_done;
            }
            __pyx_t_13 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
            __Pyx_INCREF(__pyx_t_13);
            if (unlikely(__pyx_t_13 == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
              __PYX_ERR(0, 4933, __pyx_L8_error)
            }
            __pyx_t_10 = PyDict_Size(__pyx_t_13); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4933, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_21 = ((__pyx_t_10 < __pyx_cur_scope->__pyx_v_n_workers) != 0);
            __pyx_t_32 = __pyx_t_21;
            __pyx_L107_bool_binop_done:;
            if (!__pyx_t_32) break;
+4934:                 await asyncio.sleep(0.01)
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4934, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sleep); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4934, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_16);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_16, function);
              }
            }
            __pyx_t_13 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_3, __pyx_float_0_01) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_float_0_01);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4934, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_13);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_6);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 5;
              return __pyx_r;
              __pyx_L109_resume_from_await:;
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_6);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4934, __pyx_L8_error)
            } else {
              PyObject* exc_type = __Pyx_PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                else __PYX_ERR(0, 4934, __pyx_L8_error)
              }
            }
          }
 4935: 
+4936:             self.report({"op": "restart"})
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_report); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4936, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4936, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_n_u_restart) < 0) __PYX_ERR(0, 4936, __pyx_L8_error)
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_16);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_16, function);
            }
          }
          __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_3);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4936, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 4937: 
+4938:     async def broadcast(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_113broadcast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_112broadcast[] = " Broadcast message to workers, return all results ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_113broadcast = {"broadcast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_113broadcast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_112broadcast};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_113broadcast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_hosts = 0;
  PyObject *__pyx_v_nanny = 0;
  PyObject *__pyx_v_serializers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("broadcast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_msg,&__pyx_n_s_workers,&__pyx_n_s_hosts,&__pyx_n_s_nanny,&__pyx_n_s_serializers,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_112broadcast(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_msg, PyObject *__pyx_v_workers, PyObject *__pyx_v_hosts, PyObject *__pyx_v_nanny, PyObject *__pyx_v_serializers) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("broadcast", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_30_broadcast(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_30_broadcast, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4938, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_msg = __pyx_v_msg;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_msg);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_hosts = __pyx_v_hosts;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_hosts);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_hosts);
  __pyx_cur_scope->__pyx_v_nanny = __pyx_v_nanny;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nanny);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nanny);
  __pyx_cur_scope->__pyx_v_serializers = __pyx_v_serializers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_serializers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_serializers);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_114generator11, __pyx_codeobj__70, (PyObject *) __pyx_cur_scope, __pyx_n_s_broadcast, __pyx_n_s_Scheduler_broadcast, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4938, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.broadcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9broadcast_2generator35(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_114generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("broadcast", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4938, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("broadcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_117generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__283 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_msg, __pyx_n_s_workers, __pyx_n_s_hosts, __pyx_n_s_nanny, __pyx_n_s_serializers, __pyx_n_s_parent, __pyx_n_s_host, __pyx_n_s_addresses, __pyx_n_s_send_message, __pyx_n_s_send_message, __pyx_n_s_results, __pyx_n_s_w, __pyx_n_s_address); if (unlikely(!__pyx_tuple__283)) __PYX_ERR(0, 4938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__283);
  __Pyx_GIVEREF(__pyx_tuple__283);
  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(7, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__283, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_broadcast, 4938, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 4938, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_113broadcast, 0, __pyx_n_s_Scheduler_broadcast, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__284);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_broadcast, __pyx_t_12) < 0) __PYX_ERR(0, 4938, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__284 = PyTuple_Pack(6, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__284)) __PYX_ERR(0, 4938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__284);
  __Pyx_GIVEREF(__pyx_tuple__284);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast {
  PyObject_HEAD
  PyObject *__pyx_9genexpr69__pyx_v_address;
  PyObject *__pyx_v_addresses;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_host;
  PyObject *__pyx_v_hosts;
  PyObject *__pyx_v_msg;
  PyObject *__pyx_v_nanny;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_send_message;
  PyObject *__pyx_v_serializers;
  PyObject *__pyx_9genexpr68__pyx_v_w;
  PyObject *__pyx_v_workers;
};

 4939:         self,
+4940:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+4941:         msg=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+4942:         workers=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+4943:         hosts=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+4944:         nanny=False,
    values[5] = ((PyObject *)((PyObject *)Py_False));
+4945:         serializers=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hosts);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nanny);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_serializers);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "broadcast") < 0)) __PYX_ERR(0, 4938, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_msg = values[2];
    __pyx_v_workers = values[3];
    __pyx_v_hosts = values[4];
    __pyx_v_nanny = values[5];
    __pyx_v_serializers = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("broadcast", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4938, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.broadcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_112broadcast(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_msg, __pyx_v_workers, __pyx_v_hosts, __pyx_v_nanny, __pyx_v_serializers);
 4946:     ):
 4947:         """ Broadcast message to workers, return all results """
+4948:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4949:         if workers is None or workers is True:
  __pyx_t_3 = (__pyx_cur_scope->__pyx_v_workers == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_cur_scope->__pyx_v_workers == Py_True);
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+4950:             if hosts is None:
    __pyx_t_2 = (__pyx_cur_scope->__pyx_v_hosts == Py_None);
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L7;
    }
+4951:                 workers = list(parent._workers_dv)
      __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4951, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
 4952:             else:
+4953:                 workers = []
    /*else*/ {
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4953, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L7:;
+4954:         if hosts is not None:
  __pyx_t_3 = (__pyx_cur_scope->__pyx_v_hosts != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+4955:             for host in hosts:
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_hosts)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_hosts)) {
      __pyx_t_1 = __pyx_cur_scope->__pyx_v_hosts; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_hosts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4955, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4955, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4955, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4955, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4955, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4955, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4955, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_host);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_host, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      __pyx_t_7 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4956:                 if host in parent._host_info:
      __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_host, __pyx_cur_scope->__pyx_v_parent->_host_info, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4956, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
/* … */
      }
+4957:                     workers.extend(parent._host_info[host]["addresses"])
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_workers, __pyx_n_s_extend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4957, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_parent->_host_info, __pyx_cur_scope->__pyx_v_host); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4957, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_Dict_GetItem(__pyx_t_9, __pyx_n_u_addresses); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4957, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
          }
        }
        __pyx_t_7 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4957, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4958:         # TODO replace with worker_list
 4959: 
+4960:         if nanny:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_nanny); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4960, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
    goto __pyx_L12;
  }
+4961:             addresses = [parent._workers_dv[w].nanny for w in workers]
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4961, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
        __pyx_t_7 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4961, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4961, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_7))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4961, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4961, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4961, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4961, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          }
        } else {
          __pyx_t_8 = __pyx_t_6(__pyx_t_7);
          if (unlikely(!__pyx_t_8)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 4961, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_8);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr68__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr68__pyx_v_w, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_8);
        __pyx_t_8 = 0;
        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 4961, __pyx_L1_error)
        }
        __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_9genexpr68__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4961, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nanny); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4961, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4961, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_addresses = __pyx_t_1;
    __pyx_t_1 = 0;
 4962:         else:
+4963:             addresses = workers
  /*else*/ {
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
    __pyx_cur_scope->__pyx_v_addresses = __pyx_cur_scope->__pyx_v_workers;
  }
  __pyx_L12:;
 4964: 
+4965:         async def send_message(addr):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9broadcast_1send_message(PyObject *__pyx_self, PyObject *__pyx_v_addr); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_9broadcast_1send_message = {"send_message", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_9broadcast_1send_message, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9broadcast_1send_message(PyObject *__pyx_self, PyObject *__pyx_v_addr) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_message (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_9broadcast_send_message(__pyx_self, ((PyObject *)__pyx_v_addr));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9broadcast_send_message(PyObject *__pyx_self, PyObject *__pyx_v_addr) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_31_send_message *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_message", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_31_send_message *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_31_send_message(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_31_send_message, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_31_send_message *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4965, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_v_addr = __pyx_v_addr;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_addr);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_addr);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9broadcast_2generator35, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_send_message, __pyx_n_s_Scheduler_broadcast_locals_send, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4965, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.broadcast.send_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9broadcast_2generator35(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send_message", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4965, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("send_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__71 = PyTuple_Pack(3, __pyx_n_s_addr, __pyx_n_s_comm, __pyx_n_s_resp); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 4965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__71);
  __Pyx_GIVEREF(__pyx_tuple__71);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_9broadcast_1send_message, 0, __pyx_n_s_Scheduler_broadcast_locals_send, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_send_message = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_send_message, 4965, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 4965, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_31_send_message {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_30_broadcast *__pyx_outer_scope;
  PyObject *__pyx_v_addr;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_resp;
};

+4966:             comm = await self.rpc.connect(addr)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4966, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_connect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_addr) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_addr);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4966, __pyx_L1_error)
    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
  } else {
    __pyx_t_1 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 4966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_comm = __pyx_t_1;
  __pyx_t_1 = 0;
+4967:             comm.name = "Scheduler Broadcast"
  if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_name, __pyx_kp_u_Scheduler_Broadcast) < 0) __PYX_ERR(0, 4967, __pyx_L1_error)
+4968:             try:
  /*try:*/ {
+4969:                 resp = await send_recv(comm, close=True, serializers=serializers, **msg)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_send_recv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4969, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4969, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_comm);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4969, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_close, Py_True) < 0) __PYX_ERR(0, 4969, __pyx_L6_error)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_serializers)) { __Pyx_RaiseClosureNameError("serializers"); __PYX_ERR(0, 4969, __pyx_L6_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_serializers, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_serializers) < 0) __PYX_ERR(0, 4969, __pyx_L6_error)
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_msg)) { __Pyx_RaiseClosureNameError("msg"); __PYX_ERR(0, 4969, __pyx_L6_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_msg == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(0, 4969, __pyx_L6_error)
    }
    if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_msg) < 0) __PYX_ERR(0, 4969, __pyx_L6_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4969, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 2;
      return __pyx_r;
      __pyx_L8_resume_from_await:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4969, __pyx_L6_error)
      __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4);
    } else {
      __pyx_t_4 = NULL;
      if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_4) < 0) __PYX_ERR(0, 4969, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_cur_scope->__pyx_v_resp = __pyx_t_4;
    __pyx_t_4 = 0;
  }
 4970:             finally:
+4971:                 self.rpc.reuse(addr, comm)
  /*finally:*/ {
    /*normal exit:*/{
      if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4971, __pyx_L1_error) }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_addr, __pyx_cur_scope->__pyx_v_comm};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_addr, __pyx_cur_scope->__pyx_v_comm};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4971, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_2) {
          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
        }
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_addr);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_addr);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_5, __pyx_cur_scope->__pyx_v_addr);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_comm);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L7;
    }
    __pyx_L6_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 4971, __pyx_L10_error) }
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4971, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reuse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4971, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        __pyx_t_14 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_14 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_1)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_addr, __pyx_cur_scope->__pyx_v_comm};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L10_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_4);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_addr, __pyx_cur_scope->__pyx_v_comm};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L10_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_4);
        } else
        #endif
        {
          __pyx_t_2 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4971, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (__pyx_t_3) {
            __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
          }
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_addr);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_addr);
          PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_14, __pyx_cur_scope->__pyx_v_addr);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
          PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_14, __pyx_cur_scope->__pyx_v_comm);
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4971, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L7:;
  }
+4972:             return resp
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_resp);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4973: 
+4974:         results = await All(
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_All); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  { /* enter inner scope */
+4975:             [send_message(address) for address in addresses if address is not None]
    __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_addresses)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_addresses)) {
      __pyx_t_8 = __pyx_cur_scope->__pyx_v_addresses; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_addresses); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4975, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4975, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_9); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4975, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4975, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_9); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 4975, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4975, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        }
      } else {
        __pyx_t_9 = __pyx_t_6(__pyx_t_8);
        if (unlikely(!__pyx_t_9)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4975, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr69__pyx_v_address);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr69__pyx_v_address, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_3 = (__pyx_cur_scope->__pyx_9genexpr69__pyx_v_address != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_9 = __pyx_pf_11distributed_9scheduler_9Scheduler_9broadcast_send_message(__pyx_cur_scope->__pyx_v_send_message, __pyx_cur_scope->__pyx_9genexpr69__pyx_v_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4975, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 4975, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } /* exit inner scope */
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L18_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4974, __pyx_L1_error)
    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
  } else {
    __pyx_t_1 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 4974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_results = __pyx_t_1;
  __pyx_t_1 = 0;
 4976:         )
 4977: 
+4978:         return dict(zip(workers, results))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_workers);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_results);
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4979: 
+4980:     async def proxy(self, comm=None, msg=None, worker=None, serializers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_116proxy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_115proxy[] = " Proxy a communication through the scheduler to some other worker ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_116proxy = {"proxy", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_116proxy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_115proxy};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_116proxy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_serializers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("proxy (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_msg,&__pyx_n_s_worker,&__pyx_n_s_serializers,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_serializers);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "proxy") < 0)) __PYX_ERR(0, 4980, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_msg = values[2];
    __pyx_v_worker = values[3];
    __pyx_v_serializers = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("proxy", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4980, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.proxy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_115proxy(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_msg, __pyx_v_worker, __pyx_v_serializers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_115proxy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, PyObject *__pyx_v_msg, PyObject *__pyx_v_worker, PyObject *__pyx_v_serializers) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_32_proxy *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("proxy", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_32_proxy *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_32_proxy(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_32_proxy, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_32_proxy *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4980, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_msg = __pyx_v_msg;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_msg);
  __pyx_cur_scope->__pyx_v_worker = __pyx_v_worker;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
  __pyx_cur_scope->__pyx_v_serializers = __pyx_v_serializers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_serializers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_serializers);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_117generator12, __pyx_codeobj__73, (PyObject *) __pyx_cur_scope, __pyx_n_s_proxy, __pyx_n_s_Scheduler_proxy, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4980, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.proxy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_117generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("proxy", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4980, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("proxy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_120generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__285 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_msg, __pyx_n_s_worker, __pyx_n_s_serializers, __pyx_n_s_d); if (unlikely(!__pyx_tuple__285)) __PYX_ERR(0, 4980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__285);
  __Pyx_GIVEREF(__pyx_tuple__285);
  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__285, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_proxy, 4980, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 4980, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_116proxy, 0, __pyx_n_s_Scheduler_proxy, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__286);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_proxy, __pyx_t_12) < 0) __PYX_ERR(0, 4980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__286 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__286)) __PYX_ERR(0, 4980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__286);
  __Pyx_GIVEREF(__pyx_tuple__286);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_32_proxy {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_d;
  PyObject *__pyx_v_msg;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_serializers;
  PyObject *__pyx_v_worker;
};

 4981:         """ Proxy a communication through the scheduler to some other worker """
+4982:         d = await self.broadcast(
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_broadcast); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4982, __pyx_L1_error)
    __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
  } else {
    __pyx_t_3 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 4982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_d = __pyx_t_3;
  __pyx_t_3 = 0;
+4983:             comm=comm, msg=msg, workers=[worker], serializers=serializers
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_cur_scope->__pyx_v_comm) < 0) __PYX_ERR(0, 4983, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_msg, __pyx_cur_scope->__pyx_v_msg) < 0) __PYX_ERR(0, 4983, __pyx_L1_error)
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_worker);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_workers, __pyx_t_3) < 0) __PYX_ERR(0, 4983, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_serializers, __pyx_cur_scope->__pyx_v_serializers) < 0) __PYX_ERR(0, 4983, __pyx_L1_error)
 4984:         )
+4985:         return d[worker]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_d, __pyx_cur_scope->__pyx_v_worker); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 4986: 
+4987:     async def _delete_worker_data(self, worker_address, keys):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_119_delete_worker_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_118_delete_worker_data[] = "Delete data from a worker and update the corresponding worker/task states\n\n        Parameters\n        ----------\n        worker_address: str\n            Worker address to delete keys from\n        keys: List[str]\n            List of keys to delete on the specified worker\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_119_delete_worker_data = {"_delete_worker_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_119_delete_worker_data, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_118_delete_worker_data};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_119_delete_worker_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker_address = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_delete_worker_data (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker_address,&__pyx_n_s_keys,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker_address)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_delete_worker_data", 1, 3, 3, 1); __PYX_ERR(0, 4987, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_delete_worker_data", 1, 3, 3, 2); __PYX_ERR(0, 4987, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_delete_worker_data") < 0)) __PYX_ERR(0, 4987, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_worker_address = values[1];
    __pyx_v_keys = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_delete_worker_data", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4987, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler._delete_worker_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_118_delete_worker_data(__pyx_self, __pyx_v_self, __pyx_v_worker_address, __pyx_v_keys);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_118_delete_worker_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker_address, PyObject *__pyx_v_keys) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_delete_worker_data", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4987, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_worker_address = __pyx_v_worker_address;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_worker_address);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_worker_address);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_120generator13, __pyx_codeobj__74, (PyObject *) __pyx_cur_scope, __pyx_n_s_delete_worker_data, __pyx_n_s_Scheduler__delete_worker_data, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 4987, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler._delete_worker_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_120generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_delete_worker_data", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4987, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("_delete_worker_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_123generator14(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__287 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_worker_address, __pyx_n_s_keys, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ts, __pyx_n_s_tasks, __pyx_n_s_key); if (unlikely(!__pyx_tuple__287)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__287);
  __Pyx_GIVEREF(__pyx_tuple__287);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_119_delete_worker_data, 0, __pyx_n_s_Scheduler__delete_worker_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_delete_worker_data, __pyx_t_12) < 0) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__287, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_delete_worker_data, 4987, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(0, 4987, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_33__delete_worker_data {
  PyObject_HEAD
  PyObject *__pyx_9genexpr70__pyx_v_key;
  PyObject *__pyx_v_keys;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_tasks;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_v_worker_address;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
};

 4988:         """Delete data from a worker and update the corresponding worker/task states
 4989: 
 4990:         Parameters
 4991:         ----------
 4992:         worker_address: str
 4993:             Worker address to delete keys from
 4994:         keys: List[str]
 4995:             List of keys to delete on the specified worker
 4996:         """
+4997:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+4998:         await retry_operation(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_retry_operation); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 4998, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 4998, __pyx_L1_error)
    }
  }
+4999:             self.rpc(addr=worker_address).delete_data, keys=list(keys), report=False
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_addr, __pyx_cur_scope->__pyx_v_worker_address) < 0) __PYX_ERR(0, 4999, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_delete_data_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PySequence_List(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_keys, __pyx_t_2) < 0) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_report, Py_False) < 0) __PYX_ERR(0, 4999, __pyx_L1_error)
 5000:         )
 5001: 
+5002:         ws: WorkerState = parent._workers_dv[worker_address]
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 5002, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_v_worker_address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5002, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
  __pyx_t_2 = 0;
 5003:         ts: TaskState
+5004:         tasks: set = {parent._tasks[key] for key in keys}
  { /* enter inner scope */
    __pyx_t_2 = PySet_New(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5004, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5004, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5004, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5004, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5004, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5004, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_6(__pyx_t_3);
        if (unlikely(!__pyx_t_4)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5004, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr70__pyx_v_key);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr70__pyx_v_key, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      __pyx_t_4 = 0;
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 5004, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_9genexpr70__pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PySet_Add(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 5004, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_tasks = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+5005:         ws._has_what -= tasks
  __pyx_t_2 = PyNumber_InPlaceSubtract(__pyx_cur_scope->__pyx_v_ws->_has_what, __pyx_cur_scope->__pyx_v_tasks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(PySet_CheckExact(__pyx_t_2))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 5005, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ws->_has_what);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_ws->_has_what);
  __pyx_cur_scope->__pyx_v_ws->_has_what = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+5006:         for ts in tasks:
  __pyx_t_5 = 0;
  __pyx_t_3 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_5, &__pyx_t_3, __pyx_t_8);
    if (unlikely(__pyx_t_9 == 0)) break;
    if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 5006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5006, __pyx_L1_error)
    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
+5007:             ts._who_has.remove(ws)
    if (unlikely(__pyx_cur_scope->__pyx_v_ts->_who_has == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 5007, __pyx_L1_error)
    }
    __pyx_t_10 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_ts->_who_has, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 5007, __pyx_L1_error)
+5008:             ws._nbytes -= ts.get_nbytes()
    __pyx_t_11 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_cur_scope->__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5008, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_ws->_nbytes = (__pyx_cur_scope->__pyx_v_ws->_nbytes - __pyx_t_11);
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5009:         self.log_event(ws._address, {"action": "remove-worker-data", "keys": keys})
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_action, __pyx_kp_u_remove_worker_data) < 0) __PYX_ERR(0, 5009, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_keys, __pyx_cur_scope->__pyx_v_keys) < 0) __PYX_ERR(0, 5009, __pyx_L1_error)
  __pyx_t_1 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_ws->_address, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5009, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_ws->_address, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5009, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ws->_address);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ws->_address);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_8, __pyx_cur_scope->__pyx_v_ws->_address);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_8, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 5010: 
+5011:     async def rebalance(self, comm=None, keys=None, workers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_122rebalance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_121rebalance[] = "Rebalance keys so that each worker stores roughly equal bytes\n\n        **Policy**\n\n        This orders the workers by what fraction of bytes of the existing keys\n        they have.  It walks down this list from most-to-least.  At each worker\n        it sends the largest results it can find and sends them to the least\n        occupied worker until either the sender or the recipient are at the\n        average expected load.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_122rebalance = {"rebalance", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_122rebalance, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_121rebalance};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_122rebalance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rebalance (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_workers,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rebalance") < 0)) __PYX_ERR(0, 5011, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_workers = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rebalance", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5011, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_121rebalance(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_workers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9genexpr77_2generator36(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_121rebalance(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rebalance", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_34_rebalance(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_34_rebalance, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5011, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_123generator14, __pyx_codeobj__75, (PyObject *) __pyx_cur_scope, __pyx_n_s_rebalance, __pyx_n_s_Scheduler_rebalance, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_123generator14(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rebalance", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5011, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_XDECREF(__pyx_t_29);
  __Pyx_AddTraceback("rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_126generator15(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__288 = PyTuple_Pack(42, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_workers, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_tasks, __pyx_n_s_missing_data_2, __pyx_n_s_workers_by_task, __pyx_n_s_ws, __pyx_n_s_tasks_by_worker, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_vv, __pyx_n_s_worker_bytes, __pyx_n_s_avg, __pyx_n_s_sorted_workers, __pyx_n_s_recipients, __pyx_n_s_recipient, __pyx_n_s_msgs, __pyx_n_s_sender, __pyx_n_s_sender_keys, __pyx_n_s_nb, __pyx_n_s_to_recipients, __pyx_n_s_to_senders, __pyx_n_s_result, __pyx_n_s_r, __pyx_n_s_k, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ts, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_ws, __pyx_n_s_v, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_ts, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__288)) __PYX_ERR(0, 5011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__288);
  __Pyx_GIVEREF(__pyx_tuple__288);
  __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(4, 0, 42, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__288, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_rebalance, 5011, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(0, 5011, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_122rebalance, 0, __pyx_n_s_Scheduler_rebalance, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__75)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__289);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_rebalance, __pyx_t_12) < 0) __PYX_ERR(0, 5011, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__289 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__289)) __PYX_ERR(0, 5011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__289);
  __Pyx_GIVEREF(__pyx_tuple__289);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance {
  PyObject_HEAD
  PyObject *__pyx_v_avg;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_9genexpr71__pyx_v_k;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_missing_data;
  PyObject *__pyx_v_msgs;
  PyObject *__pyx_v_nb;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_recipient;
  PyObject *__pyx_v_recipients;
  PyObject *__pyx_v_result;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_sender;
  PyObject *__pyx_v_sender_keys;
  PyObject *__pyx_v_sorted_workers;
  PyObject *__pyx_v_tasks;
  PyObject *__pyx_v_tasks_by_worker;
  PyObject *__pyx_v_to_recipients;
  PyObject *__pyx_v_to_senders;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr72__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr74__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr75__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr79__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_9genexpr77__pyx_v_v;
  PyObject *__pyx_v_v;
  PyObject *__pyx_v_vv;
  PyObject *__pyx_9genexpr73__pyx_v_w;
  PyObject *__pyx_v_worker_bytes;
  PyObject *__pyx_v_workers;
  PyObject *__pyx_v_workers_by_task;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr76__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr77__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  PyObject *__pyx_t_9;
  PyObject *__pyx_t_10;
  PyObject *__pyx_t_11;
  PyObject *__pyx_t_12;
};

 5012:         """Rebalance keys so that each worker stores roughly equal bytes
 5013: 
 5014:         **Policy**
 5015: 
 5016:         This orders the workers by what fraction of bytes of the existing keys
 5017:         they have.  It walks down this list from most-to-least.  At each worker
 5018:         it sends the largest results it can find and sends them to the least
 5019:         occupied worker until either the sender or the recipient are at the
 5020:         average expected load.
 5021:         """
+5022:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5023:         ts: TaskState
+5024:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5024, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5024, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
        __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
        __Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_28, &__pyx_t_27, &__pyx_t_3) < 0) __PYX_ERR(0, 5024, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_28);
          __Pyx_GOTREF(__pyx_t_27);
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_28, __pyx_t_27, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5024, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5024, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (__pyx_t_13 < 0) __PYX_ERR(0, 5024, __pyx_L10_except_error)
          __pyx_t_19 = ((!(__pyx_t_13 != 0)) != 0);
          if (__pyx_t_19) {
            __Pyx_GIVEREF(__pyx_t_28);
            __Pyx_GIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_28, __pyx_t_27, __pyx_t_3);
            __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_3 = 0; 
            __PYX_ERR(0, 5024, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
          __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5024, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_22, &__pyx_t_23);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_22);
        __Pyx_XGOTREF(__pyx_t_23);
        __pyx_t_24 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5024, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __pyx_r = __pyx_t_24;
        __pyx_t_24 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_22, __pyx_t_23);
        }
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L94;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L94:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+5025:             async with self._lock:
          /*with:*/ {
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_lock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5025, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aexit); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5025, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aenter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5025, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5025, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_1);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_6);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 1;
              return __pyx_r;
              __pyx_L15_resume_from_await:;
              __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_1);
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_6);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
              __pyx_cur_scope->__pyx_t_4 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
              __pyx_cur_scope->__pyx_t_5 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5025, __pyx_L14_error)
              __pyx_t_2 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_2);
            } else {
              __pyx_t_2 = NULL;
              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_2) < 0) __PYX_ERR(0, 5025, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            /*try:*/ {
              {
                /*try:*/ {
/* … */
                }
                __pyx_L19_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                __Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_27, &__pyx_t_28) < 0) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_GOTREF(__pyx_t_27);
                  __Pyx_GOTREF(__pyx_t_28);
                  __pyx_t_1 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_27, __pyx_t_28); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_1, NULL);
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_24);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_24);
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_3);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_24;
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __pyx_cur_scope->__pyx_t_10 = __pyx_t_27;
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __pyx_cur_scope->__pyx_t_11 = __pyx_t_28;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_SwapException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 4;
                    return __pyx_r;
                    __pyx_L87_resume_from_await:;
                    __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_3);
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_cur_scope->__pyx_t_8 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_24 = __pyx_cur_scope->__pyx_t_9;
                    __pyx_cur_scope->__pyx_t_9 = 0;
                    __Pyx_XGOTREF(__pyx_t_24);
                    __pyx_t_27 = __pyx_cur_scope->__pyx_t_10;
                    __pyx_cur_scope->__pyx_t_10 = 0;
                    __Pyx_XGOTREF(__pyx_t_27);
                    __pyx_t_28 = __pyx_cur_scope->__pyx_t_11;
                    __pyx_cur_scope->__pyx_t_11 = 0;
                    __Pyx_XGOTREF(__pyx_t_28);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
                  } else {
                    __pyx_t_1 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __pyx_t_24 = __pyx_t_1;
                  __pyx_t_1 = 0;
                  __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_24);
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  if (__pyx_t_19 < 0) __PYX_ERR(0, 5025, __pyx_L21_except_error)
                  __pyx_t_13 = ((!(__pyx_t_19 != 0)) != 0);
                  if (__pyx_t_13) {
                    __Pyx_GIVEREF(__pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_27);
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_27, __pyx_t_28);
                    __pyx_t_3 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; 
                    __PYX_ERR(0, 5025, __pyx_L21_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                  __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                  goto __pyx_L20_exception_handled;
                }
                __pyx_L21_except_error:;
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
                goto __pyx_L8_error;
                __pyx_L23_try_return:;
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
                goto __pyx_L16_return;
                __pyx_L20_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_9) {
                  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                  if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5025, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_12);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_12);
                  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 5;
                    return __pyx_r;
                    __pyx_L88_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5025, __pyx_L8_error)
                    __pyx_t_28 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_28);
                  } else {
                    __pyx_t_28 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_28) < 0) __PYX_ERR(0, 5025, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_28);
                  }
                  __pyx_t_12 = __pyx_t_28;
                  __pyx_t_28 = 0;
                  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                }
                goto __pyx_L18;
              }
              __pyx_L16_return: {
                __Pyx_PyThreadState_assign
                __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
                if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
                if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
                __Pyx_XGOTREF(__pyx_t_12);
                __Pyx_XGOTREF(__pyx_t_11);
                __Pyx_XGOTREF(__pyx_t_10);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_22);
                __pyx_t_30 = __pyx_r;
                __pyx_r = 0;
                if (__pyx_t_9) {
                  __pyx_t_31 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                  if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 5025, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_31);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_31);
                  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_22);
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_22;
                    __Pyx_XGIVEREF(__pyx_t_23);
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_23;
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __pyx_cur_scope->__pyx_t_10 = __pyx_t_24;
                    __Pyx_XGIVEREF(__pyx_t_30);
                    __pyx_cur_scope->__pyx_t_11 = __pyx_t_30;
                    __Pyx_XGIVEREF(__pyx_t_31);
                    __pyx_cur_scope->__pyx_t_12 = __pyx_t_31;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 6;
                    return __pyx_r;
                    __pyx_L89_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_22 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_cur_scope->__pyx_t_8 = 0;
                    __Pyx_XGOTREF(__pyx_t_22);
                    __pyx_t_23 = __pyx_cur_scope->__pyx_t_9;
                    __pyx_cur_scope->__pyx_t_9 = 0;
                    __Pyx_XGOTREF(__pyx_t_23);
                    __pyx_t_24 = __pyx_cur_scope->__pyx_t_10;
                    __pyx_cur_scope->__pyx_t_10 = 0;
                    __Pyx_XGOTREF(__pyx_t_24);
                    __pyx_t_30 = __pyx_cur_scope->__pyx_t_11;
                    __pyx_cur_scope->__pyx_t_11 = 0;
                    __Pyx_XGOTREF(__pyx_t_30);
                    __pyx_t_31 = __pyx_cur_scope->__pyx_t_12;
                    __pyx_cur_scope->__pyx_t_12 = 0;
                    __Pyx_XGOTREF(__pyx_t_31);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5025, __pyx_L8_error)
                    __pyx_t_28 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_28);
                  } else {
                    __pyx_t_28 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_28) < 0) __PYX_ERR(0, 5025, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_28);
                  }
                  __pyx_t_31 = __pyx_t_28;
                  __pyx_t_28 = 0;
                  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
                }
                __pyx_r = __pyx_t_30;
                __pyx_t_30 = 0;
                if (PY_MAJOR_VERSION >= 3) {
                  __Pyx_XGIVEREF(__pyx_t_24);
                  __Pyx_XGIVEREF(__pyx_t_23);
                  __Pyx_XGIVEREF(__pyx_t_22);
                  __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
                }
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
                __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
                goto __pyx_L12_try_return;
              }
              __pyx_L18:;
            }
            goto __pyx_L90;
            __pyx_L14_error:;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            goto __pyx_L8_error;
            __pyx_L90:;
          }
+5026:                 if keys:
                  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 5026, __pyx_L19_error)
                  if (__pyx_t_13) {
/* … */
                    goto __pyx_L25;
                  }
+5027:                     tasks = {parent._tasks[k] for k in keys}
                    { /* enter inner scope */
                      __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5027, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
                        __pyx_t_2 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_14 = 0;
                        __pyx_t_15 = NULL;
                      } else {
                        __pyx_t_14 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5027, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_2);
                        __pyx_t_15 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5027, __pyx_L19_error)
                      }
                      for (;;) {
                        if (likely(!__pyx_t_15)) {
                          if (likely(PyList_CheckExact(__pyx_t_2))) {
                            if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_2)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 5027, __pyx_L19_error)
                            #else
                            __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5027, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_3);
                            #endif
                          } else {
                            if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 5027, __pyx_L19_error)
                            #else
                            __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5027, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_3);
                            #endif
                          }
                        } else {
                          __pyx_t_3 = __pyx_t_15(__pyx_t_2);
                          if (unlikely(!__pyx_t_3)) {
                            PyObject* exc_type = PyErr_Occurred();
                            if (exc_type) {
                              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                              else __PYX_ERR(0, 5027, __pyx_L19_error)
                            }
                            break;
                          }
                          __Pyx_GOTREF(__pyx_t_3);
                        }
                        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr71__pyx_v_k);
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr71__pyx_v_k, __pyx_t_3);
                        __Pyx_GIVEREF(__pyx_t_3);
                        __pyx_t_3 = 0;
                        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
                          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                          __PYX_ERR(0, 5027, __pyx_L19_error)
                        }
                        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_9genexpr71__pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5027, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5027, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    } /* exit inner scope */
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_cur_scope->__pyx_v_tasks = ((PyObject*)__pyx_t_1);
                    __pyx_t_1 = 0;
+5028:                     missing_data = [ts._key for ts in tasks if not ts._who_has]
                    { /* enter inner scope */
                      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5028, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __pyx_t_14 = 0;
                      __pyx_t_3 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_16), (&__pyx_t_17)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5028, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_XDECREF(__pyx_t_2);
                      __pyx_t_2 = __pyx_t_3;
                      __pyx_t_3 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_16, &__pyx_t_14, &__pyx_t_3, __pyx_t_17);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5028, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5028, __pyx_L19_error)
                        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr72__pyx_v_ts));
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr72__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
                        __Pyx_GIVEREF(__pyx_t_3);
                        __pyx_t_3 = 0;
                        __pyx_t_13 = (__pyx_cur_scope->__pyx_9genexpr72__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_cur_scope->__pyx_9genexpr72__pyx_v_ts->_who_has) != 0);
                        __pyx_t_19 = ((!__pyx_t_13) != 0);
                        if (__pyx_t_19) {
                          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr72__pyx_v_ts->_key))) __PYX_ERR(0, 5028, __pyx_L19_error)
                        }
                      }
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    } /* exit inner scope */
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_cur_scope->__pyx_v_missing_data = ((PyObject*)__pyx_t_1);
                    __pyx_t_1 = 0;
+5029:                     if missing_data:
                    __pyx_t_19 = (PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_missing_data) != 0);
                    if (__pyx_t_19) {
/* … */
                    }
+5030:                         return {"status": "missing-data", "keys": missing_data}
                      __Pyx_XDECREF(__pyx_r);
                      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5030, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_status, __pyx_kp_u_missing_data) < 0) __PYX_ERR(0, 5030, __pyx_L19_error)
                      if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_keys, __pyx_cur_scope->__pyx_v_missing_data) < 0) __PYX_ERR(0, 5030, __pyx_L19_error)
                      __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      goto __pyx_L23_try_return;
 5031:                 else:
+5032:                     tasks = set(parent._tasks.values())
                  /*else*/ {
                    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
                      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
                      __PYX_ERR(0, 5032, __pyx_L19_error)
                    }
                    __pyx_t_1 = __Pyx_PyDict_Values(__pyx_cur_scope->__pyx_v_parent->_tasks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5032, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __pyx_t_2 = PySet_New(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5032, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_GIVEREF(__pyx_t_2);
                    __pyx_cur_scope->__pyx_v_tasks = ((PyObject*)__pyx_t_2);
                    __pyx_t_2 = 0;
                  }
                  __pyx_L25:;
 5033: 
+5034:                 if workers:
                  __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5034, __pyx_L19_error)
                  if (__pyx_t_19) {
/* … */
                    goto __pyx_L32;
                  }
+5035:                     workers = {parent._workers_dv[w] for w in workers}
                    { /* enter inner scope */
                      __pyx_t_2 = PySet_New(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5035, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                        __pyx_t_1 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_16 = 0;
                        __pyx_t_15 = NULL;
                      } else {
                        __pyx_t_16 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5035, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        __pyx_t_15 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5035, __pyx_L19_error)
                      }
                      for (;;) {
                        if (likely(!__pyx_t_15)) {
                          if (likely(PyList_CheckExact(__pyx_t_1))) {
                            if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_1)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5035, __pyx_L19_error)
                            #else
                            __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5035, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_3);
                            #endif
                          } else {
                            if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5035, __pyx_L19_error)
                            #else
                            __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5035, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_3);
                            #endif
                          }
                        } else {
                          __pyx_t_3 = __pyx_t_15(__pyx_t_1);
                          if (unlikely(!__pyx_t_3)) {
                            PyObject* exc_type = PyErr_Occurred();
                            if (exc_type) {
                              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                              else __PYX_ERR(0, 5035, __pyx_L19_error)
                            }
                            break;
                          }
                          __Pyx_GOTREF(__pyx_t_3);
                        }
                        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr73__pyx_v_w);
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr73__pyx_v_w, __pyx_t_3);
                        __Pyx_GIVEREF(__pyx_t_3);
                        __pyx_t_3 = 0;
                        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                          __PYX_ERR(0, 5035, __pyx_L19_error)
                        }
                        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_9genexpr73__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5035, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (unlikely(PySet_Add(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5035, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    } /* exit inner scope */
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_2);
                    __Pyx_GIVEREF(__pyx_t_2);
                    __pyx_t_2 = 0;
+5036:                     workers_by_task = {ts: ts._who_has & workers for ts in tasks}
                    { /* enter inner scope */
                      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5036, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_16 = 0;
                      __pyx_t_3 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_14), (&__pyx_t_17)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5036, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_XDECREF(__pyx_t_1);
                      __pyx_t_1 = __pyx_t_3;
                      __pyx_t_3 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_16, &__pyx_t_3, __pyx_t_17);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5036, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5036, __pyx_L19_error)
                        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr74__pyx_v_ts));
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr74__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
                        __Pyx_GIVEREF(__pyx_t_3);
                        __pyx_t_3 = 0;
                        __pyx_t_3 = PyNumber_And(__pyx_cur_scope->__pyx_9genexpr74__pyx_v_ts->_who_has, __pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5036, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_cur_scope->__pyx_9genexpr74__pyx_v_ts, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5036, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    } /* exit inner scope */
                    __Pyx_GIVEREF(__pyx_t_2);
                    __pyx_cur_scope->__pyx_v_workers_by_task = ((PyObject*)__pyx_t_2);
                    __pyx_t_2 = 0;
 5037:                 else:
+5038:                     workers = set(parent._workers_dv.values())
                  /*else*/ {
                    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
                      __PYX_ERR(0, 5038, __pyx_L19_error)
                    }
                    __pyx_t_2 = __Pyx_PyDict_Values(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5038, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __pyx_t_1 = PySet_New(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5038, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_t_1 = 0;
+5039:                     workers_by_task = {ts: ts._who_has for ts in tasks}
                    { /* enter inner scope */
                      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5039, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __pyx_t_14 = 0;
                      __pyx_t_3 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_16), (&__pyx_t_17)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5039, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_XDECREF(__pyx_t_2);
                      __pyx_t_2 = __pyx_t_3;
                      __pyx_t_3 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_16, &__pyx_t_14, &__pyx_t_3, __pyx_t_17);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5039, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5039, __pyx_L19_error)
                        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr75__pyx_v_ts));
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr75__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
                        __Pyx_GIVEREF(__pyx_t_3);
                        __pyx_t_3 = 0;
                        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr75__pyx_v_ts, (PyObject*)__pyx_cur_scope->__pyx_9genexpr75__pyx_v_ts->_who_has))) __PYX_ERR(0, 5039, __pyx_L19_error)
                      }
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    } /* exit inner scope */
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_cur_scope->__pyx_v_workers_by_task = ((PyObject*)__pyx_t_1);
                    __pyx_t_1 = 0;
                  }
                  __pyx_L32:;
 5040: 
 5041:                 ws: WorkerState
+5042:                 tasks_by_worker = {ws: set() for ws in workers}
                  { /* enter inner scope */
                    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5042, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                      __pyx_t_2 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_2); __pyx_t_16 = 0;
                      __pyx_t_15 = NULL;
                    } else {
                      __pyx_t_16 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5042, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_15 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5042, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_15)) {
                        if (likely(PyList_CheckExact(__pyx_t_2))) {
                          if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5042, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5042, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        } else {
                          if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5042, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5042, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        }
                      } else {
                        __pyx_t_3 = __pyx_t_15(__pyx_t_2);
                        if (unlikely(!__pyx_t_3)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5042, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_3);
                      }
                      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5042, __pyx_L19_error)
                      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr76__pyx_v_ws));
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr76__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
                      __Pyx_GIVEREF(__pyx_t_3);
                      __pyx_t_3 = 0;
                      __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5042, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr76__pyx_v_ws, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5042, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  } /* exit inner scope */
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_tasks_by_worker = ((PyObject*)__pyx_t_1);
                  __pyx_t_1 = 0;
 5043: 
+5044:                 for k, v in workers_by_task.items():
                  __pyx_t_16 = 0;
                  __pyx_t_2 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_workers_by_task, 1, __pyx_n_s_items, (&__pyx_t_14), (&__pyx_t_17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5044, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_XDECREF(__pyx_t_1);
                  __pyx_t_1 = __pyx_t_2;
                  __pyx_t_2 = 0;
                  while (1) {
                    __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_16, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_17);
                    if (unlikely(__pyx_t_18 == 0)) break;
                    if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5044, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_2);
                    __Pyx_GIVEREF(__pyx_t_2);
                    __pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __pyx_t_3 = 0;
+5045:                     for vv in v:
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_v)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_v)) {
                      __pyx_t_3 = __pyx_cur_scope->__pyx_v_v; __Pyx_INCREF(__pyx_t_3); __pyx_t_20 = 0;
                      __pyx_t_15 = NULL;
                    } else {
                      __pyx_t_20 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_v); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5045, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5045, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_15)) {
                        if (likely(PyList_CheckExact(__pyx_t_3))) {
                          if (__pyx_t_20 >= PyList_GET_SIZE(__pyx_t_3)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_20); __Pyx_INCREF(__pyx_t_2); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 5045, __pyx_L19_error)
                          #else
                          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5045, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_2);
                          #endif
                        } else {
                          if (__pyx_t_20 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_20); __Pyx_INCREF(__pyx_t_2); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 5045, __pyx_L19_error)
                          #else
                          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5045, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_2);
                          #endif
                        }
                      } else {
                        __pyx_t_2 = __pyx_t_15(__pyx_t_3);
                        if (unlikely(!__pyx_t_2)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5045, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_2);
                      }
                      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_vv);
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_vv, __pyx_t_2);
                      __Pyx_GIVEREF(__pyx_t_2);
                      __pyx_t_2 = 0;
/* … */
                    }
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5046:                         tasks_by_worker[vv].add(k)
                      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_tasks_by_worker, __pyx_cur_scope->__pyx_v_vv); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5046, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_add); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5046, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_21);
                      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                      __pyx_t_5 = NULL;
                      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
                        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_21);
                        if (likely(__pyx_t_5)) {
                          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                          __Pyx_INCREF(__pyx_t_5);
                          __Pyx_INCREF(function);
                          __Pyx_DECREF_SET(__pyx_t_21, function);
                        }
                      }
                      __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_5, __pyx_cur_scope->__pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_cur_scope->__pyx_v_k);
                      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5046, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5047: 
+5048:                 worker_bytes = {
                  { /* enter inner scope */
                    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5048, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
+5049:                     ws: sum(ts.get_nbytes() for ts in v)
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_9genexpr77_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_35_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_35_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_35_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_35_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_35_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5049, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9genexpr77_2generator36, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_rebalance_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5049, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9genexpr77_2generator36(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5049, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr77__pyx_v_v)) { __Pyx_RaiseClosureNameError("v"); __PYX_ERR(0, 5049, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr77__pyx_v_v)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr77__pyx_v_v)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr77__pyx_v_v; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr77__pyx_v_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5049, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5049, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5049, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5049, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5049, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5049, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ts);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_ts, __pyx_n_s_get_nbytes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5049, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
                      __pyx_t_21 = __pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_9genexpr77_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5049, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_21);
                      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5049, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr77__pyx_v_ws, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 5049, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  } /* exit inner scope */
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_worker_bytes = ((PyObject*)__pyx_t_1);
                  __pyx_t_1 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_35_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_outer_scope;
  PyObject *__pyx_v_ts;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+5050:                     for ws, v in tasks_by_worker.items()
                    __pyx_t_14 = 0;
                    __pyx_t_2 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_tasks_by_worker, 1, __pyx_n_s_items, (&__pyx_t_16), (&__pyx_t_17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5050, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_XDECREF(__pyx_t_3);
                    __pyx_t_3 = __pyx_t_2;
                    __pyx_t_2 = 0;
                    while (1) {
                      __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_16, &__pyx_t_14, &__pyx_t_2, &__pyx_t_21, NULL, __pyx_t_17);
                      if (unlikely(__pyx_t_18 == 0)) break;
                      if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5050, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __Pyx_GOTREF(__pyx_t_21);
                      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5050, __pyx_L19_error)
                      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr77__pyx_v_ws));
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr77__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2));
                      __Pyx_GIVEREF(__pyx_t_2);
                      __pyx_t_2 = 0;
                      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr77__pyx_v_v);
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr77__pyx_v_v, __pyx_t_21);
                      __Pyx_GIVEREF(__pyx_t_21);
                      __pyx_t_21 = 0;
 5051:                 }
 5052: 
+5053:                 avg = sum(worker_bytes.values()) / len(worker_bytes)
                  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_cur_scope->__pyx_v_worker_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5053, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5053, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_16 = PyDict_Size(__pyx_cur_scope->__pyx_v_worker_bytes); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5053, __pyx_L19_error)
                  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5053, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5053, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_GIVEREF(__pyx_t_2);
                  __pyx_cur_scope->__pyx_v_avg = __pyx_t_2;
                  __pyx_t_2 = 0;
 5054: 
+5055:                 sorted_workers = list(
                  __pyx_t_1 = PySequence_List(__pyx_t_21); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5055, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_sorted_workers = ((PyObject*)__pyx_t_1);
                  __pyx_t_1 = 0;
+5056:                     map(first, sorted(worker_bytes.items(), key=second, reverse=True))
                  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_first); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_1 = __Pyx_PyDict_Items(__pyx_cur_scope->__pyx_v_worker_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_GIVEREF(__pyx_t_1);
                  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
                  __pyx_t_1 = 0;
                  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_second); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_key, __pyx_t_21) < 0) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reverse, Py_True) < 0) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __pyx_t_21 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GIVEREF(__pyx_t_2);
                  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
                  __Pyx_GIVEREF(__pyx_t_21);
                  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_21);
                  __pyx_t_2 = 0;
                  __pyx_t_21 = 0;
                  __pyx_t_21 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5056, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5057:                 )
 5058: 
+5059:                 recipients = iter(reversed(sorted_workers))
                  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_cur_scope->__pyx_v_sorted_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5059, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_21 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5059, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_GIVEREF(__pyx_t_21);
                  __pyx_cur_scope->__pyx_v_recipients = __pyx_t_21;
                  __pyx_t_21 = 0;
+5060:                 recipient = next(recipients)
                  __pyx_t_21 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_recipients); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5060, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_GIVEREF(__pyx_t_21);
                  __pyx_cur_scope->__pyx_v_recipient = __pyx_t_21;
                  __pyx_t_21 = 0;
+5061:                 msgs = []  # (sender, recipient, key)
                  __pyx_t_21 = PyList_New(0); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5061, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_GIVEREF(__pyx_t_21);
                  __pyx_cur_scope->__pyx_v_msgs = ((PyObject*)__pyx_t_21);
                  __pyx_t_21 = 0;
+5062:                 for sender in sorted_workers[: len(workers) // 2]:
                  __pyx_t_16 = PyObject_Length(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5062, __pyx_L19_error)
                  __pyx_t_21 = __Pyx_PyList_GetSlice(__pyx_cur_scope->__pyx_v_sorted_workers, 0, __Pyx_div_Py_ssize_t(__pyx_t_16, 2)); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5062, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __pyx_t_1 = __pyx_t_21; __Pyx_INCREF(__pyx_t_1); __pyx_t_16 = 0;
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  for (;;) {
                    if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_1)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_21 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_16); __Pyx_INCREF(__pyx_t_21); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5062, __pyx_L19_error)
                    #else
                    __pyx_t_21 = PySequence_ITEM(__pyx_t_1, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5062, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    #endif
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sender);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sender, __pyx_t_21);
                    __Pyx_GIVEREF(__pyx_t_21);
                    __pyx_t_21 = 0;
/* … */
                  }
                  __pyx_L48_break:;
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5063:                     sender_keys = {
                    { /* enter inner scope */
                      __pyx_t_21 = PyDict_New(); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5063, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_21);
+5064:                         ts: ts.get_nbytes() for ts in tasks_by_worker[sender]
                      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_tasks_by_worker, __pyx_cur_scope->__pyx_v_sender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5064, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
                        __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0;
                        __pyx_t_15 = NULL;
                      } else {
                        __pyx_t_14 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5064, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5064, __pyx_L19_error)
                      }
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      for (;;) {
                        if (likely(!__pyx_t_15)) {
                          if (likely(PyList_CheckExact(__pyx_t_3))) {
                            if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_2); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 5064, __pyx_L19_error)
                            #else
                            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5064, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_2);
                            #endif
                          } else {
                            if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_2); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 5064, __pyx_L19_error)
                            #else
                            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5064, __pyx_L19_error)
                            __Pyx_GOTREF(__pyx_t_2);
                            #endif
                          }
                        } else {
                          __pyx_t_2 = __pyx_t_15(__pyx_t_3);
                          if (unlikely(!__pyx_t_2)) {
                            PyObject* exc_type = PyErr_Occurred();
                            if (exc_type) {
                              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                              else __PYX_ERR(0, 5064, __pyx_L19_error)
                            }
                            break;
                          }
                          __Pyx_GOTREF(__pyx_t_2);
                        }
                        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5064, __pyx_L19_error)
                        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr79__pyx_v_ts));
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr79__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_2));
                        __Pyx_GIVEREF(__pyx_t_2);
                        __pyx_t_2 = 0;
                        __pyx_t_20 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_cur_scope->__pyx_9genexpr79__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5064, __pyx_L19_error)
                        __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5064, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_2);
                        if (unlikely(PyDict_SetItem(__pyx_t_21, (PyObject*)__pyx_cur_scope->__pyx_9genexpr79__pyx_v_ts, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 5064, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    } /* exit inner scope */
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sender_keys);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sender_keys, __pyx_t_21);
                    __Pyx_GIVEREF(__pyx_t_21);
                    __pyx_t_21 = 0;
 5065:                     }
+5066:                     sender_keys = iter(
                    __pyx_t_21 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5066, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_sender_keys);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_sender_keys, __pyx_t_21);
                    __Pyx_GIVEREF(__pyx_t_21);
                    __pyx_t_21 = 0;
+5067:                         sorted(sender_keys.items(), key=second, reverse=True)
                    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sender_keys, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __pyx_t_2 = NULL;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
                      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
                      if (likely(__pyx_t_2)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                        __Pyx_INCREF(__pyx_t_2);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_3, function);
                      }
                    }
                    __pyx_t_21 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_21);
                    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_21);
                    __pyx_t_21 = 0;
                    __pyx_t_21 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_second); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    if (PyDict_SetItem(__pyx_t_21, __pyx_n_s_key, __pyx_t_2) < 0) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    if (PyDict_SetItem(__pyx_t_21, __pyx_n_s_reverse, Py_True) < 0) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_3, __pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5067, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
 5068:                     )
 5069: 
+5070:                     try:
                    {
                      /*try:*/ {
/* … */
                      }
                      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                      __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                      goto __pyx_L58_try_end;
                      __pyx_L51_error:;
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
                      __Pyx_XGIVEREF(__pyx_t_22);
                      __Pyx_XGIVEREF(__pyx_t_23);
                      __Pyx_XGIVEREF(__pyx_t_24);
                      __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
                      goto __pyx_L19_error;
                      __pyx_L56_try_break:;
                      __Pyx_XGIVEREF(__pyx_t_22);
                      __Pyx_XGIVEREF(__pyx_t_23);
                      __Pyx_XGIVEREF(__pyx_t_24);
                      __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
                      goto __pyx_L48_break;
                      __pyx_L58_try_end:;
                    }
+5071:                         while worker_bytes[sender] > avg:
                        while (1) {
                          __pyx_t_21 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_cur_scope->__pyx_v_sender); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5071, __pyx_L51_error)
                          __Pyx_GOTREF(__pyx_t_21);
                          __pyx_t_2 = PyObject_RichCompare(__pyx_t_21, __pyx_cur_scope->__pyx_v_avg, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5071, __pyx_L51_error)
                          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5071, __pyx_L51_error)
                          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                          if (!__pyx_t_19) break;
+5072:                             while (
                          while (1) {
+5073:                                 worker_bytes[recipient] < avg
                            __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_cur_scope->__pyx_v_recipient); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5073, __pyx_L51_error)
                            __Pyx_GOTREF(__pyx_t_2);
                            __pyx_t_21 = PyObject_RichCompare(__pyx_t_2, __pyx_cur_scope->__pyx_v_avg, Py_LT); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5073, __pyx_L51_error)
                            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                            __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 5073, __pyx_L51_error)
                            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                            if (__pyx_t_13) {
                            } else {
                              __pyx_t_19 = __pyx_t_13;
                              goto __pyx_L63_bool_binop_done;
                            }
+5074:                                 and worker_bytes[sender] > avg
                            __pyx_t_21 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_cur_scope->__pyx_v_sender); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5074, __pyx_L51_error)
                            __Pyx_GOTREF(__pyx_t_21);
                            __pyx_t_2 = PyObject_RichCompare(__pyx_t_21, __pyx_cur_scope->__pyx_v_avg, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5074, __pyx_L51_error)
                            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                            __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 5074, __pyx_L51_error)
                            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                            __pyx_t_19 = __pyx_t_13;
                            __pyx_L63_bool_binop_done:;
                            if (!__pyx_t_19) break;
 5075:                             ):
+5076:                                 ts, nb = next(sender_keys)
                            __pyx_t_2 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_sender_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5076, __pyx_L51_error)
                            __Pyx_GOTREF(__pyx_t_2);
                            if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
                              PyObject* sequence = __pyx_t_2;
                              Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
                              if (unlikely(size != 2)) {
                                if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                                __PYX_ERR(0, 5076, __pyx_L51_error)
                              }
                              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                              if (likely(PyTuple_CheckExact(sequence))) {
                                __pyx_t_21 = PyTuple_GET_ITEM(sequence, 0); 
                                __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
                              } else {
                                __pyx_t_21 = PyList_GET_ITEM(sequence, 0); 
                                __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
                              }
                              __Pyx_INCREF(__pyx_t_21);
                              __Pyx_INCREF(__pyx_t_3);
                              #else
                              __pyx_t_21 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5076, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_21);
                              __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5076, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_3);
                              #endif
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                            } else {
                              Py_ssize_t index = -1;
                              __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5076, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_5);
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                              __pyx_t_25 = Py_TYPE(__pyx_t_5)->tp_iternext;
                              index = 0; __pyx_t_21 = __pyx_t_25(__pyx_t_5); if (unlikely(!__pyx_t_21)) goto __pyx_L65_unpacking_failed;
                              __Pyx_GOTREF(__pyx_t_21);
                              index = 1; __pyx_t_3 = __pyx_t_25(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L65_unpacking_failed;
                              __Pyx_GOTREF(__pyx_t_3);
                              if (__Pyx_IternextUnpackEndCheck(__pyx_t_25(__pyx_t_5), 2) < 0) __PYX_ERR(0, 5076, __pyx_L51_error)
                              __pyx_t_25 = NULL;
                              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                              goto __pyx_L66_unpacking_done;
                              __pyx_L65_unpacking_failed:;
                              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                              __pyx_t_25 = NULL;
                              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                              __PYX_ERR(0, 5076, __pyx_L51_error)
                              __pyx_L66_unpacking_done:;
                            }
                            if (!(likely(((__pyx_t_21) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_21, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5076, __pyx_L51_error)
                            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_21));
                            __Pyx_GIVEREF(__pyx_t_21);
                            __pyx_t_21 = 0;
                            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_nb);
                            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_nb, __pyx_t_3);
                            __Pyx_GIVEREF(__pyx_t_3);
                            __pyx_t_3 = 0;
+5077:                                 if ts not in tasks_by_worker[recipient]:
                            __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_tasks_by_worker, __pyx_cur_scope->__pyx_v_recipient); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5077, __pyx_L51_error)
                            __Pyx_GOTREF(__pyx_t_2);
                            __pyx_t_19 = (__Pyx_PySequence_ContainsTF(((PyObject *)__pyx_cur_scope->__pyx_v_ts), __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5077, __pyx_L51_error)
                            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                            __pyx_t_13 = (__pyx_t_19 != 0);
                            if (__pyx_t_13) {
/* … */
                            }
                          }
+5078:                                     tasks_by_worker[recipient].add(ts)
                              __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_tasks_by_worker, __pyx_cur_scope->__pyx_v_recipient); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5078, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_3);
                              __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5078, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_21);
                              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                              __pyx_t_3 = NULL;
                              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
                                __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_21);
                                if (likely(__pyx_t_3)) {
                                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                                  __Pyx_INCREF(__pyx_t_3);
                                  __Pyx_INCREF(function);
                                  __Pyx_DECREF_SET(__pyx_t_21, function);
                                }
                              }
                              __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_3, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_21, ((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5078, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_2);
                              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5079:                                     # tasks_by_worker[sender].remove(ts)
+5080:                                     msgs.append((sender, recipient, ts))
                              __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5080, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_2);
                              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sender);
                              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sender);
                              PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_sender);
                              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_recipient);
                              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_recipient);
                              PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_cur_scope->__pyx_v_recipient);
                              __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                              __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                              PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                              __pyx_t_26 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_msgs, __pyx_t_2); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 5080, __pyx_L51_error)
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5081:                                     worker_bytes[sender] -= nb
                              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sender);
                              __pyx_t_2 = __pyx_cur_scope->__pyx_v_sender;
                              __pyx_t_21 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_t_2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5081, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_21);
                              __pyx_t_3 = PyNumber_InPlaceSubtract(__pyx_t_21, __pyx_cur_scope->__pyx_v_nb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5081, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_3);
                              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                              if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 5081, __pyx_L51_error)
                              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5082:                                     worker_bytes[recipient] += nb
                              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_recipient);
                              __pyx_t_2 = __pyx_cur_scope->__pyx_v_recipient;
                              __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5082, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_3);
                              __pyx_t_21 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_cur_scope->__pyx_v_nb); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5082, __pyx_L51_error)
                              __Pyx_GOTREF(__pyx_t_21);
                              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                              if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_t_2, __pyx_t_21) < 0)) __PYX_ERR(0, 5082, __pyx_L51_error)
                              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5083:                             if worker_bytes[sender] > avg:
                          __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_worker_bytes, __pyx_cur_scope->__pyx_v_sender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5083, __pyx_L51_error)
                          __Pyx_GOTREF(__pyx_t_2);
                          __pyx_t_21 = PyObject_RichCompare(__pyx_t_2, __pyx_cur_scope->__pyx_v_avg, Py_GT); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5083, __pyx_L51_error)
                          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                          __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 5083, __pyx_L51_error)
                          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                          if (__pyx_t_13) {
/* … */
                          }
                        }
+5084:                                 recipient = next(recipients)
                            __pyx_t_21 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_recipients); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5084, __pyx_L51_error)
                            __Pyx_GOTREF(__pyx_t_21);
                            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_recipient);
                            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_recipient, __pyx_t_21);
                            __Pyx_GIVEREF(__pyx_t_21);
                            __pyx_t_21 = 0;
+5085:                     except StopIteration:
                      __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
                      if (__pyx_t_17) {
                        __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
                        if (__Pyx_GetException(&__pyx_t_21, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 5085, __pyx_L53_except_error)
                        __Pyx_GOTREF(__pyx_t_21);
                        __Pyx_GOTREF(__pyx_t_2);
                        __Pyx_GOTREF(__pyx_t_3);
+5086:                         break
                        goto __pyx_L69_except_break;
                        __pyx_L69_except_break:;
                        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                        goto __pyx_L56_try_break;
                      }
                      goto __pyx_L53_except_error;
                      __pyx_L53_except_error:;
 5087: 
+5088:                 to_recipients = defaultdict(lambda: defaultdict(list))
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9rebalance_lambda14(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_9rebalance_lambda14 = {"lambda14", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_9rebalance_lambda14, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_9rebalance_lambda14(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda14 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda14(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda14(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda14", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)(&PyList_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyList_Type)));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.lambda14", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_3generator37(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
                  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5088, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_9rebalance_lambda14, 0, __pyx_n_s_Scheduler_rebalance_locals_lambd, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5088, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_21 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                    __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_3);
                    if (likely(__pyx_t_21)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                      __Pyx_INCREF(__pyx_t_21);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_3, function);
                    }
                  }
                  __pyx_t_1 = (__pyx_t_21) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_21, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
                  __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5088, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_to_recipients = __pyx_t_1;
                  __pyx_t_1 = 0;
+5089:                 to_senders = defaultdict(list)
                  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5089, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_2 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_3, function);
                    }
                  }
                  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, ((PyObject *)(&PyList_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)(&PyList_Type)));
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5089, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_to_senders = __pyx_t_1;
                  __pyx_t_1 = 0;
+5090:                 for sender, recipient, ts in msgs:
                  __pyx_t_1 = __pyx_cur_scope->__pyx_v_msgs; __Pyx_INCREF(__pyx_t_1); __pyx_t_16 = 0;
                  for (;;) {
                    if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_1)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5090, __pyx_L19_error)
                    #else
                    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5090, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    #endif
                    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
                      PyObject* sequence = __pyx_t_3;
                      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
                      if (unlikely(size != 3)) {
                        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
                        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                        __PYX_ERR(0, 5090, __pyx_L19_error)
                      }
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      if (likely(PyTuple_CheckExact(sequence))) {
                        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
                        __pyx_t_21 = PyTuple_GET_ITEM(sequence, 1); 
                        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
                      } else {
                        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
                        __pyx_t_21 = PyList_GET_ITEM(sequence, 1); 
                        __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
                      }
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(__pyx_t_21);
                      __Pyx_INCREF(__pyx_t_5);
                      #else
                      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5090, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_21 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5090, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_21);
                      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5090, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      #endif
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    } else {
                      Py_ssize_t index = -1;
                      __pyx_t_27 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5090, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_27);
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      __pyx_t_25 = Py_TYPE(__pyx_t_27)->tp_iternext;
                      index = 0; __pyx_t_2 = __pyx_t_25(__pyx_t_27); if (unlikely(!__pyx_t_2)) goto __pyx_L73_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_2);
                      index = 1; __pyx_t_21 = __pyx_t_25(__pyx_t_27); if (unlikely(!__pyx_t_21)) goto __pyx_L73_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_21);
                      index = 2; __pyx_t_5 = __pyx_t_25(__pyx_t_27); if (unlikely(!__pyx_t_5)) goto __pyx_L73_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_5);
                      if (__Pyx_IternextUnpackEndCheck(__pyx_t_25(__pyx_t_27), 3) < 0) __PYX_ERR(0, 5090, __pyx_L19_error)
                      __pyx_t_25 = NULL;
                      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                      goto __pyx_L74_unpacking_done;
                      __pyx_L73_unpacking_failed:;
                      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                      __pyx_t_25 = NULL;
                      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                      __PYX_ERR(0, 5090, __pyx_L19_error)
                      __pyx_L74_unpacking_done:;
                    }
                    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5090, __pyx_L19_error)
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sender);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sender, __pyx_t_2);
                    __Pyx_GIVEREF(__pyx_t_2);
                    __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_recipient);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_recipient, __pyx_t_21);
                    __Pyx_GIVEREF(__pyx_t_21);
                    __pyx_t_21 = 0;
                    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
                    __Pyx_GIVEREF(__pyx_t_5);
                    __pyx_t_5 = 0;
/* … */
                  }
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5091:                     to_recipients[recipient.address][ts._key].append(sender.address)
                    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_recipient, __pyx_n_s_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5091, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_to_recipients, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5091, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_cur_scope->__pyx_v_ts->_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5091, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sender, __pyx_n_s_address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5091, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_26 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_t_5); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 5091, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5092:                     to_senders[sender.address].append(ts._key)
                    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sender, __pyx_n_s_address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5092, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_to_senders, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5092, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __pyx_t_26 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_cur_scope->__pyx_v_ts->_key); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 5092, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5093: 
+5094:                 result = await asyncio.gather(
                  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5094, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gather); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5094, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
                  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5094, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5094, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 2;
                    return __pyx_r;
                    __pyx_L75_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5094, __pyx_L19_error)
                    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
                  } else {
                    __pyx_t_1 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 5094, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_result = __pyx_t_1;
                  __pyx_t_1 = 0;
 5095:                     *(
+5096:                         retry_operation(self.rpc(addr=r).gather, who_has=v)
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_1genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_36_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_36_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_36_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_36_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_36_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5096, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_3generator37, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_rebalance_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_3generator37(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5096, __pyx_L1_error)
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_retry_operation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 5096, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_addr, __pyx_cur_scope->__pyx_v_r) < 0) __PYX_ERR(0, 5096, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_gather); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_who_has, __pyx_cur_scope->__pyx_v_v) < 0) __PYX_ERR(0, 5096, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5096, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_6generator38(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
                  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_1genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5096, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_36_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_outer_scope;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

+5097:                         for r, v in to_recipients.items()
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_recipients)) { __Pyx_RaiseClosureNameError("to_recipients"); __PYX_ERR(0, 5097, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_recipients == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 5097, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_recipients, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 5097, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
 5098:                     )
 5099:                 )
+5100:                 for r, v in to_recipients.items():
                  __pyx_t_16 = 0;
                  if (unlikely(__pyx_cur_scope->__pyx_v_to_recipients == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
                    __PYX_ERR(0, 5100, __pyx_L19_error)
                  }
                  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_to_recipients, 0, __pyx_n_s_items, (&__pyx_t_14), (&__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5100, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_XDECREF(__pyx_t_1);
                  __pyx_t_1 = __pyx_t_5;
                  __pyx_t_5 = 0;
                  while (1) {
                    __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_16, &__pyx_t_5, &__pyx_t_3, NULL, __pyx_t_17);
                    if (unlikely(__pyx_t_18 == 0)) break;
                    if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5100, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_5);
                    __Pyx_GIVEREF(__pyx_t_5);
                    __pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __pyx_t_3 = 0;
+5101:                     self.log_event(r, {"action": "rebalance", "who_has": v})
                    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5101, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_21 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5101, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    if (PyDict_SetItem(__pyx_t_21, __pyx_n_u_action, __pyx_n_u_rebalance) < 0) __PYX_ERR(0, 5101, __pyx_L19_error)
                    if (PyDict_SetItem(__pyx_t_21, __pyx_n_u_who_has, __pyx_cur_scope->__pyx_v_v) < 0) __PYX_ERR(0, 5101, __pyx_L19_error)
                    __pyx_t_2 = NULL;
                    __pyx_t_18 = 0;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
                      if (likely(__pyx_t_2)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                        __Pyx_INCREF(__pyx_t_2);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_5, function);
                        __pyx_t_18 = 1;
                      }
                    }
                    #if CYTHON_FAST_PYCALL
                    if (PyFunction_Check(__pyx_t_5)) {
                      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_r, __pyx_t_21};
                      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5101, __pyx_L19_error)
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    } else
                    #endif
                    #if CYTHON_FAST_PYCCALL
                    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_r, __pyx_t_21};
                      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5101, __pyx_L19_error)
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    } else
                    #endif
                    {
                      __pyx_t_27 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5101, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_27);
                      if (__pyx_t_2) {
                        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_2); __pyx_t_2 = NULL;
                      }
                      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_r);
                      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_r);
                      PyTuple_SET_ITEM(__pyx_t_27, 0+__pyx_t_18, __pyx_cur_scope->__pyx_v_r);
                      __Pyx_GIVEREF(__pyx_t_21);
                      PyTuple_SET_ITEM(__pyx_t_27, 1+__pyx_t_18, __pyx_t_21);
                      __pyx_t_21 = 0;
                      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_27, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5101, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5102: 
+5103:                 self.log_event(
                  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5103, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
 5104:                     "all",
 5105:                     {
+5106:                         "action": "rebalance",
                  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5106, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_action, __pyx_n_u_rebalance) < 0) __PYX_ERR(0, 5106, __pyx_L19_error)
+5107:                         "total-keys": len(tasks),
                  __pyx_t_14 = PySet_GET_SIZE(__pyx_cur_scope->__pyx_v_tasks); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5107, __pyx_L19_error)
                  __pyx_t_27 = PyInt_FromSsize_t(__pyx_t_14); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5107, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_27);
                  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_u_total_keys, __pyx_t_27) < 0) __PYX_ERR(0, 5106, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+5108:                         "senders": valmap(len, to_senders),
                  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_valmap); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5108, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __pyx_t_2 = __Pyx_GetBuiltinName(__pyx_n_s_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5108, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_28 = NULL;
                  __pyx_t_17 = 0;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
                    __pyx_t_28 = PyMethod_GET_SELF(__pyx_t_21);
                    if (likely(__pyx_t_28)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                      __Pyx_INCREF(__pyx_t_28);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_21, function);
                      __pyx_t_17 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_21)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_28, __pyx_t_2, __pyx_cur_scope->__pyx_v_to_senders};
                    __pyx_t_27 = __Pyx_PyFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5108, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_21)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_28, __pyx_t_2, __pyx_cur_scope->__pyx_v_to_senders};
                    __pyx_t_27 = __Pyx_PyCFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5108, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  } else
                  #endif
                  {
                    __pyx_t_29 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5108, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_29);
                    if (__pyx_t_28) {
                      __Pyx_GIVEREF(__pyx_t_28); PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_28); __pyx_t_28 = NULL;
                    }
                    __Pyx_GIVEREF(__pyx_t_2);
                    PyTuple_SET_ITEM(__pyx_t_29, 0+__pyx_t_17, __pyx_t_2);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_to_senders);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_to_senders);
                    PyTuple_SET_ITEM(__pyx_t_29, 1+__pyx_t_17, __pyx_cur_scope->__pyx_v_to_senders);
                    __pyx_t_2 = 0;
                    __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_29, NULL); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5108, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_senders, __pyx_t_27) < 0) __PYX_ERR(0, 5106, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+5109:                         "recipients": valmap(len, to_recipients),
                  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_valmap); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5109, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __pyx_t_29 = __Pyx_GetBuiltinName(__pyx_n_s_len); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5109, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_29);
                  __pyx_t_2 = NULL;
                  __pyx_t_17 = 0;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_21);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_21, function);
                      __pyx_t_17 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_21)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_29, __pyx_cur_scope->__pyx_v_to_recipients};
                    __pyx_t_27 = __Pyx_PyFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5109, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_21)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_29, __pyx_cur_scope->__pyx_v_to_recipients};
                    __pyx_t_27 = __Pyx_PyCFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5109, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                  } else
                  #endif
                  {
                    __pyx_t_28 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5109, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_28);
                    if (__pyx_t_2) {
                      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_2); __pyx_t_2 = NULL;
                    }
                    __Pyx_GIVEREF(__pyx_t_29);
                    PyTuple_SET_ITEM(__pyx_t_28, 0+__pyx_t_17, __pyx_t_29);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_to_recipients);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_to_recipients);
                    PyTuple_SET_ITEM(__pyx_t_28, 1+__pyx_t_17, __pyx_cur_scope->__pyx_v_to_recipients);
                    __pyx_t_29 = 0;
                    __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_28, NULL); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5109, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_recipients, __pyx_t_27) < 0) __PYX_ERR(0, 5106, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+5110:                         "moved_keys": len(msgs),
                  __pyx_t_14 = PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_msgs); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5110, __pyx_L19_error)
                  __pyx_t_27 = PyInt_FromSsize_t(__pyx_t_14); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5110, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_27);
                  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_moved_keys, __pyx_t_27) < 0) __PYX_ERR(0, 5106, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                  __pyx_t_27 = NULL;
                  __pyx_t_17 = 0;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
                    __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_3);
                    if (likely(__pyx_t_27)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                      __Pyx_INCREF(__pyx_t_27);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_3, function);
                      __pyx_t_17 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_3)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_27, __pyx_n_u_all, __pyx_t_5};
                    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5103, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_27, __pyx_n_u_all, __pyx_t_5};
                    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5103, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  } else
                  #endif
                  {
                    __pyx_t_21 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5103, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    if (__pyx_t_27) {
                      __Pyx_GIVEREF(__pyx_t_27); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_27); __pyx_t_27 = NULL;
                    }
                    __Pyx_INCREF(__pyx_n_u_all);
                    __Pyx_GIVEREF(__pyx_n_u_all);
                    PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_17, __pyx_n_u_all);
                    __Pyx_GIVEREF(__pyx_t_5);
                    PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_17, __pyx_t_5);
                    __pyx_t_5 = 0;
                    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5103, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5111:                     },
 5112:                 )
 5113: 
+5114:                 if not all(r["status"] == "OK" for r in result):
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_4genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_37_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_37_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_37_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_37_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_37_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5114, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_6generator38, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_rebalance_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5114, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_6generator38(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5114, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) { __Pyx_RaiseClosureNameError("result"); __PYX_ERR(0, 5114, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_result; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5114, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5114, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5114, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5114, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_r, __pyx_n_u_status); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_OK, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5114, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = ((!__pyx_t_5) != 0);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9generator39(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
                  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_4genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5114, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5114, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 5114, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_19 = ((!__pyx_t_13) != 0);
                  if (__pyx_t_19) {
/* … */
                  }
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_37_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_outer_scope;
  PyObject *__pyx_v_r;
};

+5115:                     return {
                    __Pyx_XDECREF(__pyx_r);
+5116:                         "status": "missing-data",
                    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5116, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_status, __pyx_kp_u_missing_data) < 0) __PYX_ERR(0, 5116, __pyx_L19_error)
+5117:                         "keys": tuple(
                    __pyx_t_21 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5117, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_keys, __pyx_t_21) < 0) __PYX_ERR(0, 5116, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    goto __pyx_L23_try_return;
+5118:                             concat(
                    __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_concat); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5118, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
+5119:                                 r["keys"].keys()
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_7genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_38_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_38_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_38_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_38_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_38_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5119, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9generator39, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_rebalance_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5119, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_9generator39(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5119, __pyx_L1_error)
/* … */
      __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_r, __pyx_n_u_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_keys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5119, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_12generator40(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
                    __pyx_t_5 = __pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_7genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5119, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_27 = NULL;
                    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
                      __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_21);
                      if (likely(__pyx_t_27)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                        __Pyx_INCREF(__pyx_t_27);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_21, function);
                      }
                    }
                    __pyx_t_1 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_27, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_5);
                    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5118, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_38_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_outer_scope;
  PyObject *__pyx_v_r;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+5120:                                 for r in result
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) { __Pyx_RaiseClosureNameError("result"); __PYX_ERR(0, 5120, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_result; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5120, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5120, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5120, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 5120, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5120, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5120, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+5121:                                 if r["status"] == "missing-data"
    __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_r, __pyx_n_u_status); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_kp_u_missing_data, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5121, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {
/* … */
    }
 5122:                             )
 5123:                         ),
 5124:                     }
 5125: 
+5126:                 for sender, recipient, ts in msgs:
                  __pyx_t_3 = __pyx_cur_scope->__pyx_v_msgs; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0;
                  for (;;) {
                    if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_21 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_21); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 5126, __pyx_L19_error)
                    #else
                    __pyx_t_21 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5126, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    #endif
                    if ((likely(PyTuple_CheckExact(__pyx_t_21))) || (PyList_CheckExact(__pyx_t_21))) {
                      PyObject* sequence = __pyx_t_21;
                      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
                      if (unlikely(size != 3)) {
                        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
                        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                        __PYX_ERR(0, 5126, __pyx_L19_error)
                      }
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      if (likely(PyTuple_CheckExact(sequence))) {
                        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
                        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
                        __pyx_t_27 = PyTuple_GET_ITEM(sequence, 2); 
                      } else {
                        __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
                        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
                        __pyx_t_27 = PyList_GET_ITEM(sequence, 2); 
                      }
                      __Pyx_INCREF(__pyx_t_1);
                      __Pyx_INCREF(__pyx_t_5);
                      __Pyx_INCREF(__pyx_t_27);
                      #else
                      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5126, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5126, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __pyx_t_27 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5126, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_27);
                      #endif
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    } else {
                      Py_ssize_t index = -1;
                      __pyx_t_28 = PyObject_GetIter(__pyx_t_21); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5126, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_28);
                      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                      __pyx_t_25 = Py_TYPE(__pyx_t_28)->tp_iternext;
                      index = 0; __pyx_t_1 = __pyx_t_25(__pyx_t_28); if (unlikely(!__pyx_t_1)) goto __pyx_L81_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_1);
                      index = 1; __pyx_t_5 = __pyx_t_25(__pyx_t_28); if (unlikely(!__pyx_t_5)) goto __pyx_L81_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_5);
                      index = 2; __pyx_t_27 = __pyx_t_25(__pyx_t_28); if (unlikely(!__pyx_t_27)) goto __pyx_L81_unpacking_failed;
                      __Pyx_GOTREF(__pyx_t_27);
                      if (__Pyx_IternextUnpackEndCheck(__pyx_t_25(__pyx_t_28), 3) < 0) __PYX_ERR(0, 5126, __pyx_L19_error)
                      __pyx_t_25 = NULL;
                      __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                      goto __pyx_L82_unpacking_done;
                      __pyx_L81_unpacking_failed:;
                      __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                      __pyx_t_25 = NULL;
                      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                      __PYX_ERR(0, 5126, __pyx_L19_error)
                      __pyx_L82_unpacking_done:;
                    }
                    if (!(likely(((__pyx_t_27) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_27, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5126, __pyx_L19_error)
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sender);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sender, __pyx_t_1);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_t_1 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_recipient);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_recipient, __pyx_t_5);
                    __Pyx_GIVEREF(__pyx_t_5);
                    __pyx_t_5 = 0;
                    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_27));
                    __Pyx_GIVEREF(__pyx_t_27);
                    __pyx_t_27 = 0;
/* … */
                  }
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5127:                     assert ts._state == "memory"
                    #ifndef CYTHON_WITHOUT_ASSERTIONS
                    if (unlikely(!Py_OptimizeFlag)) {
                      __pyx_t_19 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5127, __pyx_L19_error)
                      if (unlikely(!(__pyx_t_19 != 0))) {
                        PyErr_SetNone(PyExc_AssertionError);
                        __PYX_ERR(0, 5127, __pyx_L19_error)
                      }
                    }
                    #endif
+5128:                     ts._who_has.add(recipient)
                    if (unlikely(__pyx_cur_scope->__pyx_v_ts->_who_has == Py_None)) {
                      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
                      __PYX_ERR(0, 5128, __pyx_L19_error)
                    }
                    __pyx_t_26 = PySet_Add(__pyx_cur_scope->__pyx_v_ts->_who_has, __pyx_cur_scope->__pyx_v_recipient); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 5128, __pyx_L19_error)
+5129:                     recipient.has_what.add(ts)
                    __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_recipient, __pyx_n_s_has_what); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5129, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_add); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5129, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __pyx_t_27 = NULL;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                      __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_5);
                      if (likely(__pyx_t_27)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                        __Pyx_INCREF(__pyx_t_27);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_5, function);
                      }
                    }
                    __pyx_t_21 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_27, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                    if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5129, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+5130:                     recipient.nbytes += ts.get_nbytes()
                    __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_recipient, __pyx_n_s_nbytes); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5130, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __pyx_t_16 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_cur_scope->__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5130, __pyx_L19_error)
                    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5130, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_27 = PyNumber_InPlaceAdd(__pyx_t_21, __pyx_t_5); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5130, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_recipient, __pyx_n_s_nbytes, __pyx_t_27) < 0) __PYX_ERR(0, 5130, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+5131:                     self.log.append(
                    __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5131, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_27);
/* … */
                    __pyx_t_26 = __Pyx_PyObject_Append(__pyx_t_27, __pyx_t_28); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 5131, __pyx_L19_error)
                    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
 5132:                         (
+5133:                             "rebalance",
                    __pyx_t_28 = PyTuple_New(5); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5133, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_28);
                    __Pyx_INCREF(__pyx_n_u_rebalance);
                    __Pyx_GIVEREF(__pyx_n_u_rebalance);
                    PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_n_u_rebalance);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ts->_key);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ts->_key);
                    PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_cur_scope->__pyx_v_ts->_key);
                    __Pyx_GIVEREF(__pyx_t_5);
                    PyTuple_SET_ITEM(__pyx_t_28, 2, __pyx_t_5);
                    __Pyx_GIVEREF(__pyx_t_21);
                    PyTuple_SET_ITEM(__pyx_t_28, 3, __pyx_t_21);
                    __Pyx_GIVEREF(__pyx_t_1);
                    PyTuple_SET_ITEM(__pyx_t_28, 4, __pyx_t_1);
                    __pyx_t_5 = 0;
                    __pyx_t_21 = 0;
                    __pyx_t_1 = 0;
 5134:                             ts._key,
+5135:                             time(),
                    __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_time); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5135, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
                    __pyx_t_1 = NULL;
                    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
                      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_21);
                      if (likely(__pyx_t_1)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
                        __Pyx_INCREF(__pyx_t_1);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_21, function);
                      }
                    }
                    __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_21);
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5135, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+5136:                             sender.address,
                    __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sender, __pyx_n_s_address); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5136, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_21);
+5137:                             recipient.address,
                    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_recipient, __pyx_n_s_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5137, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
 5138:                         )
 5139:                     )
 5140: 
+5141:                 await asyncio.gather(
                  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5141, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_28 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gather); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5141, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_28);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
                  __pyx_t_27 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5141, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_27);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_28, __pyx_t_27, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5141, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 3;
                    return __pyx_r;
                    __pyx_L83_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5141, __pyx_L19_error)
                  } else {
                    PyObject* exc_type = __Pyx_PyErr_Occurred();
                    if (exc_type) {
                      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                      else __PYX_ERR(0, 5141, __pyx_L19_error)
                    }
                  }
+5142:                     *(self._delete_worker_data(r, v) for r, v in to_senders.items())
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_10genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_39_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_39_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_39_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_39_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_39_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5142, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_12generator40, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_rebalance_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5142, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.rebalance.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9rebalance_12generator40(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5142, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_senders)) { __Pyx_RaiseClosureNameError("to_senders"); __PYX_ERR(0, 5142, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_senders == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 5142, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_to_senders, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 5142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_r);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_r, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 5142, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_delete_worker_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_cur_scope->__pyx_v_r, __pyx_cur_scope->__pyx_v_v};
      __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5142, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_6);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_cur_scope->__pyx_v_r, __pyx_cur_scope->__pyx_v_v};
      __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5142, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_6);
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_r);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_r);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_7, __pyx_cur_scope->__pyx_v_r);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_v);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_v);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_7, __pyx_cur_scope->__pyx_v_v);
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5142, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
                  __pyx_t_3 = __pyx_pf_11distributed_9scheduler_9Scheduler_9rebalance_10genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5142, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_39_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_34_rebalance *__pyx_outer_scope;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

 5143:                 )
 5144: 
+5145:                 return {"status": "OK"}
                  __Pyx_XDECREF(__pyx_r);
                  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5145, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_status, __pyx_n_u_OK) < 0) __PYX_ERR(0, 5145, __pyx_L19_error)
                  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  goto __pyx_L23_try_return;
 5146: 
+5147:     async def replicate(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_125replicate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_124replicate[] = "Replicate data throughout cluster\n\n        This performs a tree copy of the data throughout the network\n        individually on each piece of data.\n\n        Parameters\n        ----------\n        keys: Iterable\n            list of keys to replicate\n        n: int\n            Number of replications we expect to see within the cluster\n        branching_factor: int, optional\n            The number of workers that can copy data in each generation.\n            The larger the branching factor, the more data we copy in\n            a single step, but the more a given worker risks being\n            swamped by data requests.\n\n        See also\n        --------\n        Scheduler.rebalance\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_125replicate = {"replicate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_125replicate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_124replicate};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_125replicate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_branching_factor = 0;
  PyObject *__pyx_v_delete = 0;
  PyObject *__pyx_v_lock = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("replicate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_n,&__pyx_n_s_workers,&__pyx_n_s_branching_factor,&__pyx_n_s_delete,&__pyx_n_s_lock_2,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9replicate_2generator41(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_124replicate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_n, PyObject *__pyx_v_workers, PyObject *__pyx_v_branching_factor, PyObject *__pyx_v_delete, PyObject *__pyx_v_lock) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("replicate", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_40_replicate(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_40_replicate, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5147, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  __pyx_cur_scope->__pyx_v_n = __pyx_v_n;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_n);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_branching_factor = __pyx_v_branching_factor;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_branching_factor);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_branching_factor);
  __pyx_cur_scope->__pyx_v_delete = __pyx_v_delete;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_delete);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_delete);
  __pyx_cur_scope->__pyx_v_lock = __pyx_v_lock;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_lock);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_lock);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_126generator15, __pyx_codeobj__76, (PyObject *) __pyx_cur_scope, __pyx_n_s_replicate, __pyx_n_s_Scheduler_replicate, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5147, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.replicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_126generator15(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("replicate", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5147, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("replicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__290 = PyTuple_Pack(31, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_n, __pyx_n_s_workers, __pyx_n_s_branching_factor, __pyx_n_s_delete, __pyx_n_s_lock_2, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_wws, __pyx_n_s_ts, __pyx_n_s_tasks, __pyx_n_s_missing_data_2, __pyx_n_s_del_worker_tasks, __pyx_n_s_del_candidates, __pyx_n_s_gathers, __pyx_n_s_n_missing, __pyx_n_s_count, __pyx_n_s_results, __pyx_n_s_w, __pyx_n_s_v, __pyx_n_s_w, __pyx_n_s_k, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_tasks, __pyx_n_s_t, __pyx_n_s_wws, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__290)) __PYX_ERR(0, 5147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__290);
  __Pyx_GIVEREF(__pyx_tuple__290);
  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(8, 0, 31, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__290, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_replicate, 5147, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 5147, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_125replicate, 0, __pyx_n_s_Scheduler_replicate, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__291);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_replicate, __pyx_t_12) < 0) __PYX_ERR(0, 5147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__291 = PyTuple_Pack(7, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_2), ((PyObject *)Py_True), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__291)) __PYX_ERR(0, 5147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__291);
  __Pyx_GIVEREF(__pyx_tuple__291);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate {
  PyObject_HEAD
  PyObject *__pyx_v_branching_factor;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_count;
  PyObject *__pyx_v_del_candidates;
  PyObject *__pyx_v_del_worker_tasks;
  PyObject *__pyx_v_delete;
  PyObject *__pyx_v_gathers;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_9genexpr85__pyx_v_k;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_lock;
  PyObject *__pyx_v_missing_data;
  PyObject *__pyx_v_n;
  PyObject *__pyx_v_n_missing;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_self;
  PyObject *__pyx_9genexpr88__pyx_v_t;
  PyObject *__pyx_9genexpr87__pyx_v_tasks;
  PyObject *__pyx_v_tasks;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_9genexpr86__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_v_v;
  PyObject *__pyx_9genexpr84__pyx_v_w;
  PyObject *__pyx_v_w;
  PyObject *__pyx_v_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr87__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr89__pyx_v_wws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_wws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
};

 5148:         self,
+5149:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+5150:         keys=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+5151:         n=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+5152:         workers=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
    values[5] = ((PyObject *)((PyObject *)__pyx_int_2));
 5153:         branching_factor=2,
+5154:         delete=True,
    values[6] = ((PyObject *)((PyObject *)Py_True));
+5155:         lock=True,
    values[7] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_branching_factor);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lock_2);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "replicate") < 0)) __PYX_ERR(0, 5147, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_n = values[3];
    __pyx_v_workers = values[4];
    __pyx_v_branching_factor = values[5];
    __pyx_v_delete = values[6];
    __pyx_v_lock = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replicate", 0, 1, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5147, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.replicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_124replicate(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_n, __pyx_v_workers, __pyx_v_branching_factor, __pyx_v_delete, __pyx_v_lock);
 5156:     ):
 5157:         """Replicate data throughout cluster
 5158: 
 5159:         This performs a tree copy of the data throughout the network
 5160:         individually on each piece of data.
 5161: 
 5162:         Parameters
 5163:         ----------
 5164:         keys: Iterable
 5165:             list of keys to replicate
 5166:         n: int
 5167:             Number of replications we expect to see within the cluster
 5168:         branching_factor: int, optional
 5169:             The number of workers that can copy data in each generation.
 5170:             The larger the branching factor, the more data we copy in
 5171:             a single step, but the more a given worker risks being
 5172:             swamped by data requests.
 5173: 
 5174:         See also
 5175:         --------
 5176:         Scheduler.rebalance
 5177:         """
+5178:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5179:         ws: WorkerState
 5180:         wws: WorkerState
 5181:         ts: TaskState
 5182: 
+5183:         assert branching_factor > 0
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_branching_factor, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5183, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5183, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 5183, __pyx_L1_error)
    }
  }
  #endif
+5184:         async with self._lock if lock else empty_context:
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_lock); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5184, __pyx_L1_error)
    if (__pyx_t_2) {
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_lock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_empty_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aexit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aenter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5184, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5184, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XGOTREF(__pyx_r);
    if (likely(__pyx_r)) {
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __Pyx_XGIVEREF(__pyx_t_4);
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, awaiting value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L5_resume_from_await:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = 0;
      __Pyx_XGOTREF(__pyx_t_4);
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5184, __pyx_L4_error)
      __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
    } else {
      __pyx_t_3 = NULL;
      if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 5184, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.replicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_18, &__pyx_t_3) < 0) __PYX_ERR(0, 5184, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_18, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5184, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5184, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_24);
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_24);
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_3);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_6);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
            __Pyx_XGIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
            __Pyx_XGIVEREF(__pyx_t_8);
            __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
            __Pyx_XGIVEREF(__pyx_t_9);
            __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
            __Pyx_XGIVEREF(__pyx_t_18);
            __pyx_cur_scope->__pyx_t_6 = __pyx_t_18;
            __Pyx_XGIVEREF(__pyx_t_24);
            __pyx_cur_scope->__pyx_t_7 = __pyx_t_24;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_SwapException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 4;
            return __pyx_r;
            __pyx_L55_resume_from_await:;
            __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_3);
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_6);
            __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_7);
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
            __pyx_cur_scope->__pyx_t_4 = 0;
            __Pyx_XGOTREF(__pyx_t_8);
            __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
            __pyx_cur_scope->__pyx_t_5 = 0;
            __Pyx_XGOTREF(__pyx_t_9);
            __pyx_t_18 = __pyx_cur_scope->__pyx_t_6;
            __pyx_cur_scope->__pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_t_18);
            __pyx_t_24 = __pyx_cur_scope->__pyx_t_7;
            __pyx_cur_scope->__pyx_t_7 = 0;
            __Pyx_XGOTREF(__pyx_t_24);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5184, __pyx_L11_except_error)
            __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
          } else {
            __pyx_t_1 = NULL;
            if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 5184, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_t_24 = __pyx_t_1;
          __pyx_t_1 = 0;
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_24);
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          if (__pyx_t_12 < 0) __PYX_ERR(0, 5184, __pyx_L11_except_error)
          __pyx_t_2 = ((!(__pyx_t_12 != 0)) != 0);
          if (__pyx_t_2) {
            __Pyx_GIVEREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_18, __pyx_t_3);
            __pyx_t_6 = 0; __pyx_t_18 = 0; __pyx_t_3 = 0; 
            __PYX_ERR(0, 5184, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L13_try_return:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L6_return;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5184, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_9);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_9;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 5;
            return __pyx_r;
            __pyx_L56_resume_from_await:;
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_9 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_9);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5184, __pyx_L1_error)
            __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
          } else {
            __pyx_t_3 = NULL;
            if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 5184, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __pyx_t_9 = __pyx_t_3;
          __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L6_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_24);
        __Pyx_XGOTREF(__pyx_t_25);
        __Pyx_XGOTREF(__pyx_t_26);
        __pyx_t_27 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_28 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5184, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_28);
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_28);
          __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
            __Pyx_XGIVEREF(__pyx_t_8);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
            __Pyx_XGIVEREF(__pyx_t_9);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
            __Pyx_XGIVEREF(__pyx_t_24);
            __pyx_cur_scope->__pyx_t_4 = __pyx_t_24;
            __Pyx_XGIVEREF(__pyx_t_25);
            __pyx_cur_scope->__pyx_t_5 = __pyx_t_25;
            __Pyx_XGIVEREF(__pyx_t_26);
            __pyx_cur_scope->__pyx_t_6 = __pyx_t_26;
            __Pyx_XGIVEREF(__pyx_t_27);
            __pyx_cur_scope->__pyx_t_7 = __pyx_t_27;
            __Pyx_XGIVEREF(__pyx_t_28);
            __pyx_cur_scope->__pyx_t_8 = __pyx_t_28;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 6;
            return __pyx_r;
            __pyx_L57_resume_from_await:;
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_7);
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_8);
            __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_9);
            __pyx_t_24 = __pyx_cur_scope->__pyx_t_4;
            __pyx_cur_scope->__pyx_t_4 = 0;
            __Pyx_XGOTREF(__pyx_t_24);
            __pyx_t_25 = __pyx_cur_scope->__pyx_t_5;
            __pyx_cur_scope->__pyx_t_5 = 0;
            __Pyx_XGOTREF(__pyx_t_25);
            __pyx_t_26 = __pyx_cur_scope->__pyx_t_6;
            __pyx_cur_scope->__pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_t_26);
            __pyx_t_27 = __pyx_cur_scope->__pyx_t_7;
            __pyx_cur_scope->__pyx_t_7 = 0;
            __Pyx_XGOTREF(__pyx_t_27);
            __pyx_t_28 = __pyx_cur_scope->__pyx_t_8;
            __pyx_cur_scope->__pyx_t_8 = 0;
            __Pyx_XGOTREF(__pyx_t_28);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5184, __pyx_L1_error)
            __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
          } else {
            __pyx_t_3 = NULL;
            if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 5184, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __pyx_t_28 = __pyx_t_3;
          __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
        }
        __pyx_r = __pyx_t_27;
        __pyx_t_27 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_26);
          __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
        }
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
        __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
        goto __pyx_L0;
      }
      __pyx_L8:;
    }
    goto __pyx_L58;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L58:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+5185:             workers = {parent._workers_dv[w] for w in self.workers_list(workers)}
          { /* enter inner scope */
            __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5185, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_workers_list); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5185, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_6 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_cur_scope->__pyx_v_workers) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_workers);
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5185, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
              __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0;
              __pyx_t_11 = NULL;
            } else {
              __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5185, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_11 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5185, __pyx_L9_error)
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            for (;;) {
              if (likely(!__pyx_t_11)) {
                if (likely(PyList_CheckExact(__pyx_t_5))) {
                  if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5185, __pyx_L9_error)
                  #else
                  __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5185, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  #endif
                } else {
                  if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5185, __pyx_L9_error)
                  #else
                  __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5185, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  #endif
                }
              } else {
                __pyx_t_3 = __pyx_t_11(__pyx_t_5);
                if (unlikely(!__pyx_t_3)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5185, __pyx_L9_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_3);
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr84__pyx_v_w);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr84__pyx_v_w, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 5185, __pyx_L9_error)
              }
              __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_9genexpr84__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5185, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5185, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } /* exit inner scope */
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_t_1 = 0;
+5186:             if n is None:
          __pyx_t_2 = (__pyx_cur_scope->__pyx_v_n == Py_None);
          __pyx_t_12 = (__pyx_t_2 != 0);
          if (__pyx_t_12) {
/* … */
            goto __pyx_L17;
          }
+5187:                 n = len(workers)
            __pyx_t_10 = PyObject_Length(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5187, __pyx_L9_error)
            __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5187, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_n);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_n, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
 5188:             else:
+5189:                 n = min(n, len(workers))
          /*else*/ {
            __pyx_t_10 = PyObject_Length(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5189, __pyx_L9_error)
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n);
            __pyx_t_1 = __pyx_cur_scope->__pyx_v_n;
            __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5189, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5189, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5189, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (__pyx_t_12) {
              __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5189, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_5 = __pyx_t_6;
              __pyx_t_6 = 0;
            } else {
              __Pyx_INCREF(__pyx_t_1);
              __pyx_t_5 = __pyx_t_1;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __pyx_t_5;
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_n);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_n, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
          }
          __pyx_L17:;
+5190:             if n == 0:
          __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_cur_scope->__pyx_v_n, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5190, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5190, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(__pyx_t_12)) {
/* … */
          }
+5191:                 raise ValueError("Can not use replicate to delete data")
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5191, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_Raise(__pyx_t_1, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __PYX_ERR(0, 5191, __pyx_L9_error)
/* … */
  __pyx_tuple__77 = PyTuple_Pack(1, __pyx_kp_u_Can_not_use_replicate_to_delete); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 5191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
 5192: 
+5193:             tasks = {parent._tasks[k] for k in keys}
          { /* enter inner scope */
            __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5193, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
              __pyx_t_5 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0;
              __pyx_t_11 = NULL;
            } else {
              __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5193, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_11 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5193, __pyx_L9_error)
            }
            for (;;) {
              if (likely(!__pyx_t_11)) {
                if (likely(PyList_CheckExact(__pyx_t_5))) {
                  if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5193, __pyx_L9_error)
                  #else
                  __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5193, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  #endif
                } else {
                  if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5193, __pyx_L9_error)
                  #else
                  __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5193, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  #endif
                }
              } else {
                __pyx_t_6 = __pyx_t_11(__pyx_t_5);
                if (unlikely(!__pyx_t_6)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5193, __pyx_L9_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_6);
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr85__pyx_v_k);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr85__pyx_v_k, __pyx_t_6);
              __Pyx_GIVEREF(__pyx_t_6);
              __pyx_t_6 = 0;
              if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 5193, __pyx_L9_error)
              }
              __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_9genexpr85__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5193, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_6);
              if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 5193, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } /* exit inner scope */
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_tasks = ((PyObject*)__pyx_t_1);
          __pyx_t_1 = 0;
+5194:             missing_data = [ts._key for ts in tasks if not ts._who_has]
          { /* enter inner scope */
            __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5194, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_10 = 0;
            __pyx_t_6 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5194, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_XDECREF(__pyx_t_5);
            __pyx_t_5 = __pyx_t_6;
            __pyx_t_6 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_13, &__pyx_t_10, &__pyx_t_6, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5194, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_6);
              if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5194, __pyx_L9_error)
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr86__pyx_v_ts));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr86__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
              __Pyx_GIVEREF(__pyx_t_6);
              __pyx_t_6 = 0;
              __pyx_t_12 = (__pyx_cur_scope->__pyx_9genexpr86__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_cur_scope->__pyx_9genexpr86__pyx_v_ts->_who_has) != 0);
              __pyx_t_2 = ((!__pyx_t_12) != 0);
              if (__pyx_t_2) {
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr86__pyx_v_ts->_key))) __PYX_ERR(0, 5194, __pyx_L9_error)
              }
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          } /* exit inner scope */
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_missing_data = ((PyObject*)__pyx_t_1);
          __pyx_t_1 = 0;
+5195:             if missing_data:
          __pyx_t_2 = (PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_missing_data) != 0);
          if (__pyx_t_2) {
/* … */
          }
+5196:                 return {"status": "missing-data", "keys": missing_data}
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5196, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_status, __pyx_kp_u_missing_data) < 0) __PYX_ERR(0, 5196, __pyx_L9_error)
            if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_keys, __pyx_cur_scope->__pyx_v_missing_data) < 0) __PYX_ERR(0, 5196, __pyx_L9_error)
            __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L13_try_return;
 5197: 
 5198:             # Delete extraneous data
+5199:             if delete:
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_delete); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5199, __pyx_L9_error)
          if (__pyx_t_2) {
/* … */
          }
+5200:                 del_worker_tasks = defaultdict(set)
            __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5200, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_6 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, ((PyObject *)(&PySet_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PySet_Type)));
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5200, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_cur_scope->__pyx_v_del_worker_tasks = __pyx_t_1;
            __pyx_t_1 = 0;
+5201:                 for ts in tasks:
            __pyx_t_13 = 0;
            __pyx_t_5 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_tasks, 1, (&__pyx_t_10), (&__pyx_t_14)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5201, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_XDECREF(__pyx_t_1);
            __pyx_t_1 = __pyx_t_5;
            __pyx_t_5 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_13, &__pyx_t_5, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5201, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5201, __pyx_L9_error)
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;
+5202:                     del_candidates = ts._who_has & workers
              __pyx_t_5 = PyNumber_And(__pyx_cur_scope->__pyx_v_ts->_who_has, __pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5202, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_del_candidates);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_del_candidates, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;
+5203:                     if len(del_candidates) > n:
              __pyx_t_16 = PyObject_Length(__pyx_cur_scope->__pyx_v_del_candidates); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5203, __pyx_L9_error)
              __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5203, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_cur_scope->__pyx_v_n, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5203, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5203, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (__pyx_t_2) {
/* … */
              }
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5204:                         for ws in random.sample(
                __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_random); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5204, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sample); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5204, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
                if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
                  __pyx_t_3 = __pyx_t_6; __Pyx_INCREF(__pyx_t_3); __pyx_t_16 = 0;
                  __pyx_t_11 = NULL;
                } else {
                  __pyx_t_16 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5204, __pyx_L9_error)
                }
                __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                for (;;) {
                  if (likely(!__pyx_t_11)) {
                    if (likely(PyList_CheckExact(__pyx_t_3))) {
                      if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_3)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_16); __Pyx_INCREF(__pyx_t_6); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5204, __pyx_L9_error)
                      #else
                      __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5204, __pyx_L9_error)
                      __Pyx_GOTREF(__pyx_t_6);
                      #endif
                    } else {
                      if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_16); __Pyx_INCREF(__pyx_t_6); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5204, __pyx_L9_error)
                      #else
                      __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5204, __pyx_L9_error)
                      __Pyx_GOTREF(__pyx_t_6);
                      #endif
                    }
                  } else {
                    __pyx_t_6 = __pyx_t_11(__pyx_t_3);
                    if (unlikely(!__pyx_t_6)) {
                      PyObject* exc_type = PyErr_Occurred();
                      if (exc_type) {
                        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                        else __PYX_ERR(0, 5204, __pyx_L9_error)
                      }
                      break;
                    }
                    __Pyx_GOTREF(__pyx_t_6);
                  }
                  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
                  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_6));
                  __Pyx_GIVEREF(__pyx_t_6);
                  __pyx_t_6 = 0;
/* … */
                }
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5205:                             del_candidates, len(del_candidates) - n
                __pyx_t_16 = PyObject_Length(__pyx_cur_scope->__pyx_v_del_candidates); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5205, __pyx_L9_error)
                __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5205, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_17 = PyNumber_Subtract(__pyx_t_5, __pyx_cur_scope->__pyx_v_n); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5205, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __pyx_t_5 = NULL;
                __pyx_t_15 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                  __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
                  if (likely(__pyx_t_5)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                    __Pyx_INCREF(__pyx_t_5);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_3, function);
                    __pyx_t_15 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_3)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_del_candidates, __pyx_t_17};
                  __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_del_candidates, __pyx_t_17};
                  __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                } else
                #endif
                {
                  __pyx_t_18 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  if (__pyx_t_5) {
                    __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_5); __pyx_t_5 = NULL;
                  }
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_del_candidates);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_del_candidates);
                  PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_15, __pyx_cur_scope->__pyx_v_del_candidates);
                  __Pyx_GIVEREF(__pyx_t_17);
                  PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_15, __pyx_t_17);
                  __pyx_t_17 = 0;
                  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5204, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                }
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5206:                         ):
+5207:                             del_worker_tasks[ws].add(ts)
                  __pyx_t_18 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_del_worker_tasks, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5207, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_add); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5207, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __pyx_t_18 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
                    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_17);
                    if (likely(__pyx_t_18)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
                      __Pyx_INCREF(__pyx_t_18);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_17, function);
                    }
                  }
                  __pyx_t_6 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_18, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_17, ((PyObject *)__pyx_cur_scope->__pyx_v_ts));
                  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5207, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 5208: 
+5209:                 await asyncio.gather(
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5209, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gather); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5209, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            { /* enter inner scope */
/* … */
            __pyx_t_6 = PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5209, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5209, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 2;
              return __pyx_r;
              __pyx_L35_resume_from_await:;
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5209, __pyx_L9_error)
            } else {
              PyObject* exc_type = __Pyx_PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                else __PYX_ERR(0, 5209, __pyx_L9_error)
              }
            }
+5210:                     *[
              __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5210, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
+5211:                         self._delete_worker_data(ws._address, [t.key for t in tasks])
                __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_delete_worker_data); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5211, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                { /* enter inner scope */
                  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks)) {
                    __pyx_t_19 = __pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks; __Pyx_INCREF(__pyx_t_19); __pyx_t_16 = 0;
                    __pyx_t_11 = NULL;
                  } else {
                    __pyx_t_16 = -1; __pyx_t_19 = PyObject_GetIter(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5211, __pyx_L9_error)
                    __Pyx_GOTREF(__pyx_t_19);
                    __pyx_t_11 = Py_TYPE(__pyx_t_19)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  }
                  for (;;) {
                    if (likely(!__pyx_t_11)) {
                      if (likely(PyList_CheckExact(__pyx_t_19))) {
                        if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_19)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_20 = PyList_GET_ITEM(__pyx_t_19, __pyx_t_16); __Pyx_INCREF(__pyx_t_20); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5211, __pyx_L9_error)
                        #else
                        __pyx_t_20 = PySequence_ITEM(__pyx_t_19, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5211, __pyx_L9_error)
                        __Pyx_GOTREF(__pyx_t_20);
                        #endif
                      } else {
                        if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_19)) break;
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_20 = PyTuple_GET_ITEM(__pyx_t_19, __pyx_t_16); __Pyx_INCREF(__pyx_t_20); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 5211, __pyx_L9_error)
                        #else
                        __pyx_t_20 = PySequence_ITEM(__pyx_t_19, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5211, __pyx_L9_error)
                        __Pyx_GOTREF(__pyx_t_20);
                        #endif
                      }
                    } else {
                      __pyx_t_20 = __pyx_t_11(__pyx_t_19);
                      if (unlikely(!__pyx_t_20)) {
                        PyObject* exc_type = PyErr_Occurred();
                        if (exc_type) {
                          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                          else __PYX_ERR(0, 5211, __pyx_L9_error)
                        }
                        break;
                      }
                      __Pyx_GOTREF(__pyx_t_20);
                    }
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr88__pyx_v_t);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr88__pyx_v_t, __pyx_t_20);
                    __Pyx_GIVEREF(__pyx_t_20);
                    __pyx_t_20 = 0;
                    __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr88__pyx_v_t, __pyx_n_s_key); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5211, __pyx_L9_error)
                    __Pyx_GOTREF(__pyx_t_20);
                    if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_20))) __PYX_ERR(0, 5211, __pyx_L9_error)
                    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                } /* exit inner scope */
                __pyx_t_19 = NULL;
                __pyx_t_15 = 0;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
                  __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_17);
                  if (likely(__pyx_t_19)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
                    __Pyx_INCREF(__pyx_t_19);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_17, function);
                    __pyx_t_15 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_17)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws->_address, __pyx_t_5};
                  __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws->_address, __pyx_t_5};
                  __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                } else
                #endif
                {
                  __pyx_t_20 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_20);
                  if (__pyx_t_19) {
                    __Pyx_GIVEREF(__pyx_t_19); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19); __pyx_t_19 = NULL;
                  }
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws->_address);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws->_address);
                  PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_15, __pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws->_address);
                  __Pyx_GIVEREF(__pyx_t_5);
                  PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_15, __pyx_t_5);
                  __pyx_t_5 = 0;
                  __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_20, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5211, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                }
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_18))) __PYX_ERR(0, 5210, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              }
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            } /* exit inner scope */
+5212:                         for ws, tasks in del_worker_tasks.items()
              __pyx_t_10 = 0;
              if (unlikely(__pyx_cur_scope->__pyx_v_del_worker_tasks == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
                __PYX_ERR(0, 5212, __pyx_L9_error)
              }
              __pyx_t_17 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_del_worker_tasks, 0, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5212, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_XDECREF(__pyx_t_6);
              __pyx_t_6 = __pyx_t_17;
              __pyx_t_17 = 0;
              while (1) {
                __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_13, &__pyx_t_10, &__pyx_t_17, &__pyx_t_18, NULL, __pyx_t_14);
                if (unlikely(__pyx_t_15 == 0)) break;
                if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5212, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_GOTREF(__pyx_t_18);
                if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5212, __pyx_L9_error)
                __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws));
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_17));
                __Pyx_GIVEREF(__pyx_t_17);
                __pyx_t_17 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr87__pyx_v_tasks, __pyx_t_18);
                __Pyx_GIVEREF(__pyx_t_18);
                __pyx_t_18 = 0;
 5213:                     ]
 5214:                 )
 5215: 
 5216:             # Copy not-yet-filled data
+5217:             while tasks:
          while (1) {
            __pyx_t_2 = (PySet_GET_SIZE(__pyx_cur_scope->__pyx_v_tasks) != 0);
            if (!__pyx_t_2) break;
+5218:                 gathers = defaultdict(dict)
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5218, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_6, function);
              }
            }
            __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_3, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)(&PyDict_Type)));
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5218, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_gathers);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_gathers, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
+5219:                 for ts in list(tasks):
            __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_tasks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5219, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_13 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            for (;;) {
              if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_6)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5219, __pyx_L9_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5219, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
              if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5219, __pyx_L9_error)
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
/* … */
              __pyx_L38_continue:;
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5220:                     if ts._state == "forgotten":
              __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5220, __pyx_L9_error)
              __pyx_t_12 = (__pyx_t_2 != 0);
              if (__pyx_t_12) {
/* … */
              }
 5221:                         # task is no longer needed by any client or dependant task
+5222:                         tasks.remove(ts)
                __pyx_t_21 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_tasks, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 5222, __pyx_L9_error)
+5223:                         continue
                goto __pyx_L38_continue;
+5224:                     n_missing = n - len(ts._who_has & workers)
              __pyx_t_1 = PyNumber_And(__pyx_cur_scope->__pyx_v_ts->_who_has, __pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5224, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_10 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5224, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5224, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_n, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5224, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_n_missing);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_n_missing, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
+5225:                     if n_missing <= 0:
              __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_n_missing, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5225, __pyx_L9_error)
              __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5225, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (__pyx_t_12) {
/* … */
              }
 5226:                         # Already replicated enough
+5227:                         tasks.remove(ts)
                __pyx_t_21 = __Pyx_PySet_Remove(__pyx_cur_scope->__pyx_v_tasks, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 5227, __pyx_L9_error)
+5228:                         continue
                goto __pyx_L38_continue;
 5229: 
+5230:                     count = min(n_missing, branching_factor * len(ts._who_has))
              __pyx_t_3 = __pyx_cur_scope->__pyx_v_ts->_who_has;
              __Pyx_INCREF(__pyx_t_3);
              if (unlikely(__pyx_t_3 == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
                __PYX_ERR(0, 5230, __pyx_L9_error)
              }
              __pyx_t_10 = PySet_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5230, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_branching_factor, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n_missing);
              __pyx_t_3 = __pyx_cur_scope->__pyx_v_n_missing;
              __pyx_t_17 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_17); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5230, __pyx_L9_error)
              __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5230, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              if (__pyx_t_12) {
                __Pyx_INCREF(__pyx_t_1);
                __pyx_t_18 = __pyx_t_1;
              } else {
                __Pyx_INCREF(__pyx_t_3);
                __pyx_t_18 = __pyx_t_3;
              }
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = __pyx_t_18;
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_count);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_count, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
+5231:                     assert count > 0
              #ifndef CYTHON_WITHOUT_ASSERTIONS
              if (unlikely(!Py_OptimizeFlag)) {
                __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_count, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5231, __pyx_L9_error)
                __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5231, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (unlikely(!__pyx_t_12)) {
                  PyErr_SetNone(PyExc_AssertionError);
                  __PYX_ERR(0, 5231, __pyx_L9_error)
                }
              }
              #endif
 5232: 
+5233:                     for ws in random.sample(workers - ts._who_has, count):
              __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_random); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5233, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_18);
              __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_sample); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5233, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_18 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_workers, __pyx_cur_scope->__pyx_v_ts->_who_has); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5233, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_18);
              __pyx_t_17 = NULL;
              __pyx_t_14 = 0;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_3);
                if (likely(__pyx_t_17)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                  __Pyx_INCREF(__pyx_t_17);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_3, function);
                  __pyx_t_14 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_3)) {
                PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_t_18, __pyx_cur_scope->__pyx_v_count};
                __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_t_18, __pyx_cur_scope->__pyx_v_count};
                __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              } else
              #endif
              {
                __pyx_t_20 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_20);
                if (__pyx_t_17) {
                  __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_17); __pyx_t_17 = NULL;
                }
                __Pyx_GIVEREF(__pyx_t_18);
                PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_14, __pyx_t_18);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_count);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_count);
                PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_14, __pyx_cur_scope->__pyx_v_count);
                __pyx_t_18 = 0;
                __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
              }
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
                __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0;
                __pyx_t_11 = NULL;
              } else {
                __pyx_t_10 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5233, __pyx_L9_error)
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              for (;;) {
                if (likely(!__pyx_t_11)) {
                  if (likely(PyList_CheckExact(__pyx_t_3))) {
                    if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5233, __pyx_L9_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5233, __pyx_L9_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  } else {
                    if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5233, __pyx_L9_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5233, __pyx_L9_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  }
                } else {
                  __pyx_t_1 = __pyx_t_11(__pyx_t_3);
                  if (unlikely(!__pyx_t_1)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 5233, __pyx_L9_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_1);
                }
                if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5233, __pyx_L9_error)
                __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;
/* … */
              }
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5234:                         gathers[ws._address][ts._key] = [
                { /* enter inner scope */
                  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5234, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_20 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gathers, __pyx_cur_scope->__pyx_v_ws->_address); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5234, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_20);
                if (unlikely(PyObject_SetItem(__pyx_t_20, __pyx_cur_scope->__pyx_v_ts->_key, __pyx_t_1) < 0)) __PYX_ERR(0, 5234, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5235:                             wws._address for wws in ts._who_has
                  __pyx_t_16 = 0;
                  __pyx_t_18 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_ts->_who_has, 1, (&__pyx_t_22), (&__pyx_t_14)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5235, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_XDECREF(__pyx_t_20);
                  __pyx_t_20 = __pyx_t_18;
                  __pyx_t_18 = 0;
                  while (1) {
                    __pyx_t_15 = __Pyx_set_iter_next(__pyx_t_20, __pyx_t_22, &__pyx_t_16, &__pyx_t_18, __pyx_t_14);
                    if (unlikely(__pyx_t_15 == 0)) break;
                    if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5235, __pyx_L9_error)
                    __Pyx_GOTREF(__pyx_t_18);
                    if (!(likely(((__pyx_t_18) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_18, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5235, __pyx_L9_error)
                    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr89__pyx_v_wws));
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr89__pyx_v_wws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_18));
                    __Pyx_GIVEREF(__pyx_t_18);
                    __pyx_t_18 = 0;
/* … */
                    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr89__pyx_v_wws->_address))) __PYX_ERR(0, 5234, __pyx_L9_error)
                  }
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                } /* exit inner scope */
 5236:                         ]
 5237: 
+5238:                 results = await asyncio.gather(
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5238, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gather); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5238, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
            __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5238, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5238, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 3;
              return __pyx_r;
              __pyx_L46_resume_from_await:;
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5238, __pyx_L9_error)
              __pyx_t_6 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_6);
            } else {
              __pyx_t_6 = NULL;
              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_6) < 0) __PYX_ERR(0, 5238, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_6);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_results);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_results, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_6);
            __pyx_t_6 = 0;
 5239:                     *(
+5240:                         retry_operation(self.rpc(addr=w).gather, who_has=who_has)
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_9replicate_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_41_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_41_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_41_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_41_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_41_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5240, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_9replicate_2generator41, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_replicate_locals_genex, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.replicate.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_9replicate_2generator41(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5240, __pyx_L1_error)
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_retry_operation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 5240, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_addr, __pyx_cur_scope->__pyx_v_w) < 0) __PYX_ERR(0, 5240, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_gather); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_who_has, __pyx_cur_scope->__pyx_v_who_has) < 0) __PYX_ERR(0, 5240, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5240, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
            __pyx_t_6 = __pyx_pf_11distributed_9scheduler_9Scheduler_9replicate_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5240, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_41_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_40_replicate *__pyx_outer_scope;
  PyObject *__pyx_v_w;
  PyObject *__pyx_v_who_has;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

+5241:                         for w, who_has in gathers.items()
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_gathers)) { __Pyx_RaiseClosureNameError("gathers"); __PYX_ERR(0, 5241, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_gathers == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 5241, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_gathers, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 5241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_who_has);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_who_has, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
 5242:                     )
 5243:                 )
+5244:                 for w, v in zip(gathers, results):
            __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5244, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_gathers);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_gathers);
            PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_gathers);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
            PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_cur_scope->__pyx_v_results);
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5244, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
              __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_13 = 0;
              __pyx_t_11 = NULL;
            } else {
              __pyx_t_13 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5244, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5244, __pyx_L9_error)
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            for (;;) {
              if (likely(!__pyx_t_11)) {
                if (likely(PyList_CheckExact(__pyx_t_6))) {
                  if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_6)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5244, __pyx_L9_error)
                  #else
                  __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5244, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  #endif
                } else {
                  if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5244, __pyx_L9_error)
                  #else
                  __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5244, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  #endif
                }
              } else {
                __pyx_t_1 = __pyx_t_11(__pyx_t_6);
                if (unlikely(!__pyx_t_1)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5244, __pyx_L9_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_1);
              }
              if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
                PyObject* sequence = __pyx_t_1;
                Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
                if (unlikely(size != 2)) {
                  if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                  __PYX_ERR(0, 5244, __pyx_L9_error)
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                if (likely(PyTuple_CheckExact(sequence))) {
                  __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
                  __pyx_t_20 = PyTuple_GET_ITEM(sequence, 1); 
                } else {
                  __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
                  __pyx_t_20 = PyList_GET_ITEM(sequence, 1); 
                }
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_20);
                #else
                __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5244, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_20 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5244, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_20);
                #endif
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              } else {
                Py_ssize_t index = -1;
                __pyx_t_18 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5244, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __pyx_t_23 = Py_TYPE(__pyx_t_18)->tp_iternext;
                index = 0; __pyx_t_3 = __pyx_t_23(__pyx_t_18); if (unlikely(!__pyx_t_3)) goto __pyx_L49_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_3);
                index = 1; __pyx_t_20 = __pyx_t_23(__pyx_t_18); if (unlikely(!__pyx_t_20)) goto __pyx_L49_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_20);
                if (__Pyx_IternextUnpackEndCheck(__pyx_t_23(__pyx_t_18), 2) < 0) __PYX_ERR(0, 5244, __pyx_L9_error)
                __pyx_t_23 = NULL;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                goto __pyx_L50_unpacking_done;
                __pyx_L49_unpacking_failed:;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                __pyx_t_23 = NULL;
                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                __PYX_ERR(0, 5244, __pyx_L9_error)
                __pyx_L50_unpacking_done:;
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_20);
              __Pyx_GIVEREF(__pyx_t_20);
              __pyx_t_20 = 0;
/* … */
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          }
+5245:                     if v["status"] == "OK":
              __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_v, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5245, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_OK, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5245, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (__pyx_t_12) {
/* … */
                goto __pyx_L51;
              }
+5246:                         self.add_keys(worker=w, keys=list(gathers[w]))
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_add_keys_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_20 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_20);
                if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_worker, __pyx_cur_scope->__pyx_v_w) < 0) __PYX_ERR(0, 5246, __pyx_L9_error)
                __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_gathers, __pyx_cur_scope->__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_18 = PySequence_List(__pyx_t_3); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_keys, __pyx_t_18) < 0) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5246, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 5247:                     else:
+5248:                         logger.warning("Communication failed during replication: %s", v)
              /*else*/ {
                __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_logger); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5248, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_20);
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_n_s_warning); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5248, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                __pyx_t_20 = NULL;
                __pyx_t_14 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
                  __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_1);
                  if (likely(__pyx_t_20)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                    __Pyx_INCREF(__pyx_t_20);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_1, function);
                    __pyx_t_14 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_1)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_kp_u_Communication_failed_during_repl, __pyx_cur_scope->__pyx_v_v};
                  __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5248, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_GOTREF(__pyx_t_18);
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_kp_u_Communication_failed_during_repl, __pyx_cur_scope->__pyx_v_v};
                  __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5248, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_GOTREF(__pyx_t_18);
                } else
                #endif
                {
                  __pyx_t_3 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5248, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (__pyx_t_20) {
                    __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_20); __pyx_t_20 = NULL;
                  }
                  __Pyx_INCREF(__pyx_kp_u_Communication_failed_during_repl);
                  __Pyx_GIVEREF(__pyx_kp_u_Communication_failed_during_repl);
                  PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_14, __pyx_kp_u_Communication_failed_during_repl);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_v);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_v);
                  PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_14, __pyx_cur_scope->__pyx_v_v);
                  __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5248, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                }
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              }
              __pyx_L51:;
 5249: 
+5250:                     self.log_event(w, {"action": "replicate-add", "keys": gathers[w]})
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5250, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5250, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_replicate_add) < 0) __PYX_ERR(0, 5250, __pyx_L9_error)
              __pyx_t_20 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_gathers, __pyx_cur_scope->__pyx_v_w); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5250, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_20);
              if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_keys, __pyx_t_20) < 0) __PYX_ERR(0, 5250, __pyx_L9_error)
              __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
              __pyx_t_20 = NULL;
              __pyx_t_14 = 0;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_1);
                if (likely(__pyx_t_20)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                  __Pyx_INCREF(__pyx_t_20);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_1, function);
                  __pyx_t_14 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_1)) {
                PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_cur_scope->__pyx_v_w, __pyx_t_3};
                __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5250, __pyx_L9_error)
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
                PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_cur_scope->__pyx_v_w, __pyx_t_3};
                __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5250, __pyx_L9_error)
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              } else
              #endif
              {
                __pyx_t_17 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5250, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                if (__pyx_t_20) {
                  __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_20); __pyx_t_20 = NULL;
                }
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_w);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_w);
                PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_14, __pyx_cur_scope->__pyx_v_w);
                __Pyx_GIVEREF(__pyx_t_3);
                PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_14, __pyx_t_3);
                __pyx_t_3 = 0;
                __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_17, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5250, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 5251: 
+5252:             self.log_event(
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5252, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_18);
 5253:                 "all",
 5254:                 {
+5255:                     "action": "replicate",
          __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5255, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_action, __pyx_n_u_replicate) < 0) __PYX_ERR(0, 5255, __pyx_L9_error)
+5256:                     "workers": list(workers),
          __pyx_t_17 = PySequence_List(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5256, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_17);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_workers, __pyx_t_17) < 0) __PYX_ERR(0, 5255, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+5257:                     "key-count": len(keys),
          __pyx_t_13 = PyObject_Length(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5257, __pyx_L9_error)
          __pyx_t_17 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5257, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_17);
          if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_key_count, __pyx_t_17) < 0) __PYX_ERR(0, 5255, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+5258:                     "branching-factor": branching_factor,
          if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_branching_factor_2, __pyx_cur_scope->__pyx_v_branching_factor) < 0) __PYX_ERR(0, 5255, __pyx_L9_error)
          __pyx_t_17 = NULL;
          __pyx_t_14 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_18))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_18);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_18, function);
              __pyx_t_14 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_18)) {
            PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_n_u_all, __pyx_t_1};
            __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_18, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5252, __pyx_L9_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_18)) {
            PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_n_u_all, __pyx_t_1};
            __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_18, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5252, __pyx_L9_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          {
            __pyx_t_3 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5252, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (__pyx_t_17) {
              __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_17); __pyx_t_17 = NULL;
            }
            __Pyx_INCREF(__pyx_n_u_all);
            __Pyx_GIVEREF(__pyx_n_u_all);
            PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_14, __pyx_n_u_all);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_14, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5252, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 5259:                 },
 5260:             )
 5261: 
+5262:     def workers_to_close(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_128workers_to_close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_127workers_to_close[] = "\n        Find workers that we can close with low cost\n\n        This returns a list of workers that are good candidates to retire.\n        These workers are not running anything and are storing\n        relatively little data relative to their peers.  If all workers are\n        idle then we still maintain enough workers to have enough RAM to store\n        our data, with a comfortable buffer.\n\n        This is for use with systems like ``distributed.deploy.adaptive``.\n\n        Parameters\n        ----------\n        memory_factor : Number\n            Amount of extra space we want to have for our stored data.\n            Defaults two 2, or that we want to have twice as much memory as we\n            currently have data.\n        n : int\n            Number of workers to close\n        minimum : int\n            Minimum number of workers to keep around\n        key : Callable(WorkerState)\n            An optional callable mapping a WorkerState object to a group\n            affiliation.  Groups will be closed together.  This is useful when\n            closing workers must be done collectively, such as by hostname.\n        target : int\n            Target number of workers to have after we close\n        attribute : str\n            The attribute of the WorkerState object to return, like \"address\"\n            or \"name\".  Defaults to \"address\".\n\n        Examples\n        --------\n        >>> scheduler.workers_to_close()\n        ['tcp://192.168.0.1:1234', 'tcp://192.168.0.2:1234']\n\n        Group workers by hostname prior to closing\n\n        >>> scheduler.workers_to_close(key=lambda ws: ws.host)\n        ['tcp://192.168.0.1:1234', 'tcp://192.168.0.1:4567']\n\n        Remove two workers\n\n        >>> scheduler.workers_to_close(n=2)\n\n        Keep enough workers to have twice as much memory as we we need.\n\n        >>> scheduler.workers_to_close(memory_ratio=2)\n\n        Returns\n        -------\n        to_close: list of worker addresses that ""are OK to close\n\n        See Also\n        --------\n        Scheduler.retire_workers\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_128workers_to_close = {"workers_to_close", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_128workers_to_close, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_127workers_to_close};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_128workers_to_close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_memory_ratio = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_minimum = 0;
  PyObject *__pyx_v_target = 0;
  PyObject *__pyx_v_attribute = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("workers_to_close (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_memory_ratio,&__pyx_n_s_n,&__pyx_n_s_key,&__pyx_n_s_minimum,&__pyx_n_s_target,&__pyx_n_s_attribute,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_127workers_to_close(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_memory_ratio, PyObject *__pyx_v_n, PyObject *__pyx_v_key, PyObject *__pyx_v_minimum, PyObject *__pyx_v_target, PyObject *__pyx_v_attribute) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_limit_bytes = NULL;
  PyObject *__pyx_v_limit = NULL;
  PyObject *__pyx_v_total = NULL;
  PyObject *__pyx_v__key = 0;
  PyObject *__pyx_v_idle = NULL;
  PyObject *__pyx_v_to_close = NULL;
  PyObject *__pyx_v_n_remain = NULL;
  PyObject *__pyx_v_group = NULL;
  PyObject *__pyx_v_result = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr91__pyx_v_ws = NULL;
  PyObject *__pyx_9genexpr92__pyx_v_k = NULL;
  PyObject *__pyx_9genexpr92__pyx_v_v = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr93__pyx_v_ws = NULL;
  PyObject *__pyx_9genexpr94__pyx_v_k = NULL;
  PyObject *__pyx_9genexpr94__pyx_v_v = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr95__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr97__pyx_v_ws = NULL;
  PyObject *__pyx_9genexpr98__pyx_v_g = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr98__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("workers_to_close", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5262, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __Pyx_INCREF(__pyx_v_memory_ratio);
  __Pyx_INCREF(__pyx_v_n);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_INCREF(__pyx_v_target);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_to_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_limit_bytes);
  __Pyx_XDECREF(__pyx_v_limit);
  __Pyx_XDECREF(__pyx_v_total);
  __Pyx_XDECREF(__pyx_v__key);
  __Pyx_XDECREF(__pyx_v_idle);
  __Pyx_XDECREF(__pyx_v_to_close);
  __Pyx_XDECREF(__pyx_v_n_remain);
  __Pyx_XDECREF(__pyx_v_group);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr91__pyx_v_ws);
  __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_k);
  __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_v);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr93__pyx_v_ws);
  __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_k);
  __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_v);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr95__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr97__pyx_v_ws);
  __Pyx_XDECREF(__pyx_9genexpr98__pyx_v_g);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr98__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_memory_ratio);
  __Pyx_XDECREF(__pyx_v_n);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_target);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_131generator16(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__292 = PyTuple_Pack(32, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_memory_ratio, __pyx_n_s_n, __pyx_n_s_key, __pyx_n_s_minimum, __pyx_n_s_target, __pyx_n_s_attribute, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_groups, __pyx_n_s_limit_bytes, __pyx_n_s_group_bytes, __pyx_n_s_limit, __pyx_n_s_total, __pyx_n_s_key_2, __pyx_n_s_key_2, __pyx_n_s_idle, __pyx_n_s_to_close, __pyx_n_s_n_remain, __pyx_n_s_group, __pyx_n_s_result, __pyx_n_s_ws, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_ws, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_ws, __pyx_n_s_ws, __pyx_n_s_g, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__292)) __PYX_ERR(0, 5262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__292);
  __Pyx_GIVEREF(__pyx_tuple__292);
  __pyx_codeobj__293 = (PyObject*)__Pyx_PyCode_New(8, 0, 32, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__292, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_workers_to_close, 5262, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__293)) __PYX_ERR(0, 5262, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_128workers_to_close, 0, __pyx_n_s_Scheduler_workers_to_close, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__293)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__294);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_workers_to_close, __pyx_t_12) < 0) __PYX_ERR(0, 5262, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__294 = PyTuple_Pack(7, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_n_u_address)); if (unlikely(!__pyx_tuple__294)) __PYX_ERR(0, 5262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__294);
  __Pyx_GIVEREF(__pyx_tuple__294);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close {
  PyObject_HEAD
  PyObject *__pyx_v_group_bytes;
  PyObject *__pyx_v_groups;
};

 5263:         self,
+5264:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+5265:         memory_ratio=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+5266:         n=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+5267:         key=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+5268:         minimum=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+5269:         target=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
    values[7] = ((PyObject *)((PyObject*)__pyx_n_u_address));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory_ratio);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minimum);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_attribute);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "workers_to_close") < 0)) __PYX_ERR(0, 5262, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_memory_ratio = values[2];
    __pyx_v_n = values[3];
    __pyx_v_key = values[4];
    __pyx_v_minimum = values[5];
    __pyx_v_target = values[6];
    __pyx_v_attribute = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("workers_to_close", 0, 1, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5262, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_to_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_127workers_to_close(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_memory_ratio, __pyx_v_n, __pyx_v_key, __pyx_v_minimum, __pyx_v_target, __pyx_v_attribute);
 5270:         attribute="address",
 5271:     ):
 5272:         """
 5273:         Find workers that we can close with low cost
 5274: 
 5275:         This returns a list of workers that are good candidates to retire.
 5276:         These workers are not running anything and are storing
 5277:         relatively little data relative to their peers.  If all workers are
 5278:         idle then we still maintain enough workers to have enough RAM to store
 5279:         our data, with a comfortable buffer.
 5280: 
 5281:         This is for use with systems like ``distributed.deploy.adaptive``.
 5282: 
 5283:         Parameters
 5284:         ----------
 5285:         memory_factor : Number
 5286:             Amount of extra space we want to have for our stored data.
 5287:             Defaults two 2, or that we want to have twice as much memory as we
 5288:             currently have data.
 5289:         n : int
 5290:             Number of workers to close
 5291:         minimum : int
 5292:             Minimum number of workers to keep around
 5293:         key : Callable(WorkerState)
 5294:             An optional callable mapping a WorkerState object to a group
 5295:             affiliation.  Groups will be closed together.  This is useful when
 5296:             closing workers must be done collectively, such as by hostname.
 5297:         target : int
 5298:             Target number of workers to have after we close
 5299:         attribute : str
 5300:             The attribute of the WorkerState object to return, like "address"
 5301:             or "name".  Defaults to "address".
 5302: 
 5303:         Examples
 5304:         --------
 5305:         >>> scheduler.workers_to_close()
 5306:         ['tcp://192.168.0.1:1234', 'tcp://192.168.0.2:1234']
 5307: 
 5308:         Group workers by hostname prior to closing
 5309: 
 5310:         >>> scheduler.workers_to_close(key=lambda ws: ws.host)
 5311:         ['tcp://192.168.0.1:1234', 'tcp://192.168.0.1:4567']
 5312: 
 5313:         Remove two workers
 5314: 
 5315:         >>> scheduler.workers_to_close(n=2)
 5316: 
 5317:         Keep enough workers to have twice as much memory as we we need.
 5318: 
 5319:         >>> scheduler.workers_to_close(memory_ratio=2)
 5320: 
 5321:         Returns
 5322:         -------
 5323:         to_close: list of worker addresses that are OK to close
 5324: 
 5325:         See Also
 5326:         --------
 5327:         Scheduler.retire_workers
 5328:         """
+5329:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5330:         if target is not None and n is None:
  __pyx_t_3 = (__pyx_v_target != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_n == Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+5331:             n = len(parent._workers_dv) - target
    __pyx_t_1 = __pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 5331, __pyx_L1_error)
    }
    __pyx_t_5 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5331, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_1, __pyx_v_target); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_6);
    __pyx_t_6 = 0;
+5332:         if n is not None:
  __pyx_t_2 = (__pyx_v_n != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5333:             if n < 0:
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_n, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5333, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5333, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_3) {
/* … */
    }
+5334:                 n = 0
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_DECREF_SET(__pyx_v_n, __pyx_int_0);
+5335:             target = len(parent._workers_dv) - n
    __pyx_t_6 = __pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_6);
    if (unlikely(__pyx_t_6 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 5335, __pyx_L1_error)
    }
    __pyx_t_5 = PyDict_Size(__pyx_t_6); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5335, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_6, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_target, __pyx_t_1);
    __pyx_t_1 = 0;
 5336: 
+5337:         if n is None and memory_ratio is None:
  __pyx_t_2 = (__pyx_v_n == Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_memory_ratio == Py_None);
  __pyx_t_2 = (__pyx_t_4 != 0);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+5338:             memory_ratio = 2
    __Pyx_INCREF(__pyx_int_2);
    __Pyx_DECREF_SET(__pyx_v_memory_ratio, __pyx_int_2);
 5339: 
 5340:         ws: WorkerState
+5341:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5341, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5341, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L15_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_to_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_7, &__pyx_t_1) < 0) __PYX_ERR(0, 5341, __pyx_L17_except_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_16, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5341, __pyx_L17_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5341, __pyx_L17_except_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (__pyx_t_4 < 0) __PYX_ERR(0, 5341, __pyx_L17_except_error)
          __pyx_t_3 = ((!(__pyx_t_4 != 0)) != 0);
          if (__pyx_t_3) {
            __Pyx_GIVEREF(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_7);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_16, __pyx_t_7, __pyx_t_1);
            __pyx_t_16 = 0; __pyx_t_7 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 5341, __pyx_L17_except_error)
          }
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L16_exception_handled;
        }
        __pyx_L17_except_error:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        goto __pyx_L1_error;
        __pyx_L19_try_return:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        goto __pyx_L12_return;
        __pyx_L16_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_8) {
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5341, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        goto __pyx_L14;
      }
      __pyx_L12_return: {
        __pyx_t_12 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_8) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5341, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __pyx_r = __pyx_t_12;
        __pyx_t_12 = 0;
        goto __pyx_L0;
      }
      __pyx_L14:;
    }
    goto __pyx_L89;
    __pyx_L11_error:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L1_error;
    __pyx_L89:;
  }
+5342:             if not n and all([ws._processing for ws in parent._workers_dv.values()]):
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_n); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5342, __pyx_L15_error)
          __pyx_t_4 = ((!__pyx_t_2) != 0);
          if (__pyx_t_4) {
          } else {
            __pyx_t_3 = __pyx_t_4;
            goto __pyx_L22_bool_binop_done;
          }
          { /* enter inner scope */
            __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5342, __pyx_L26_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = 0;
            if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
              __PYX_ERR(0, 5342, __pyx_L26_error)
            }
            __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5342, __pyx_L26_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_6);
            __pyx_t_6 = __pyx_t_7;
            __pyx_t_7 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_13, &__pyx_t_5, NULL, &__pyx_t_7, NULL, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5342, __pyx_L26_error)
              __Pyx_GOTREF(__pyx_t_7);
              if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5342, __pyx_L26_error)
              __Pyx_XDECREF_SET(__pyx_9genexpr91__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_7));
              __pyx_t_7 = 0;
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr91__pyx_v_ws->_processing))) __PYX_ERR(0, 5342, __pyx_L26_error)
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr91__pyx_v_ws); __pyx_9genexpr91__pyx_v_ws = 0;
            goto __pyx_L29_exit_scope;
            __pyx_L26_error:;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr91__pyx_v_ws); __pyx_9genexpr91__pyx_v_ws = 0;
            goto __pyx_L15_error;
            __pyx_L29_exit_scope:;
          } /* exit inner scope */
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5342, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5342, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_3 = __pyx_t_4;
          __pyx_L22_bool_binop_done:;
          if (__pyx_t_3) {
/* … */
          }
+5343:                 return []
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5343, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_r = __pyx_t_6;
            __pyx_t_6 = 0;
            goto __pyx_L19_try_return;
 5344: 
+5345:             if key is None:
          __pyx_t_3 = (__pyx_v_key == Py_None);
          __pyx_t_4 = (__pyx_t_3 != 0);
          if (__pyx_t_4) {
/* … */
          }
+5346:                 key = operator.attrgetter("address")
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_operator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5346, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5346, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_7, function);
              }
            }
            __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_1, __pyx_n_u_address) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_n_u_address);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5346, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_6);
            __pyx_t_6 = 0;
+5347:             if isinstance(key, bytes) and dask.config.get(
          __pyx_t_3 = PyBytes_Check(__pyx_v_key); 
          __pyx_t_2 = (__pyx_t_3 != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_4 = __pyx_t_2;
            goto __pyx_L32_bool_binop_done;
          }
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_dask); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5347, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5347, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5347, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
            }
          }
          __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_1, __pyx_kp_u_distributed_scheduler_pickle) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_kp_u_distributed_scheduler_pickle);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5347, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5347, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_4 = __pyx_t_2;
          __pyx_L32_bool_binop_done:;
          if (__pyx_t_4) {
/* … */
          }
 5348:                 "distributed.scheduler.pickle"
 5349:             ):
+5350:                 key = pickle.loads(key)
            __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pickle); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5350, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_loads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5350, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_7 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_7)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_7);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
              }
            }
            __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_key);
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5350, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_6);
            __pyx_t_6 = 0;
 5351: 
+5352:             groups = groupby(key, parent._workers.values())
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_groupby); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5352, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_parent->_workers, __pyx_n_s_values); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5352, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_16 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_9);
            if (likely(__pyx_t_16)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_9, function);
            }
          }
          __pyx_t_7 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5352, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = NULL;
          __pyx_t_14 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_14 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_key, __pyx_t_7};
            __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5352, __pyx_L15_error)
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_key, __pyx_t_7};
            __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5352, __pyx_L15_error)
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          } else
          #endif
          {
            __pyx_t_16 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5352, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            if (__pyx_t_9) {
              __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_9); __pyx_t_9 = NULL;
            }
            __Pyx_INCREF(__pyx_v_key);
            __Pyx_GIVEREF(__pyx_v_key);
            PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_14, __pyx_v_key);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_14, __pyx_t_7);
            __pyx_t_7 = 0;
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_16, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5352, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_cur_scope->__pyx_v_groups = __pyx_t_6;
          __pyx_t_6 = 0;
 5353: 
+5354:             limit_bytes = {
          { /* enter inner scope */
            __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5354, __pyx_L36_error)
            __Pyx_GOTREF(__pyx_t_6);
+5355:                 k: sum([ws._memory_limit for ws in v]) for k, v in groups.items()
            __pyx_t_13 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_groups == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 5355, __pyx_L36_error)
            }
            __pyx_t_16 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_groups, 0, __pyx_n_s_items, (&__pyx_t_5), (&__pyx_t_14)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5355, __pyx_L36_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_XDECREF(__pyx_t_1);
            __pyx_t_1 = __pyx_t_16;
            __pyx_t_16 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_13, &__pyx_t_16, &__pyx_t_7, NULL, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5355, __pyx_L36_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_XDECREF_SET(__pyx_9genexpr92__pyx_v_k, __pyx_t_16);
              __pyx_t_16 = 0;
              __Pyx_XDECREF_SET(__pyx_9genexpr92__pyx_v_v, __pyx_t_7);
              __pyx_t_7 = 0;
              { /* enter inner scope */
                __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5355, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_7);
                if (likely(PyList_CheckExact(__pyx_9genexpr92__pyx_v_v)) || PyTuple_CheckExact(__pyx_9genexpr92__pyx_v_v)) {
                  __pyx_t_16 = __pyx_9genexpr92__pyx_v_v; __Pyx_INCREF(__pyx_t_16); __pyx_t_17 = 0;
                  __pyx_t_18 = NULL;
                } else {
                  __pyx_t_17 = -1; __pyx_t_16 = PyObject_GetIter(__pyx_9genexpr92__pyx_v_v); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5355, __pyx_L41_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_18 = Py_TYPE(__pyx_t_16)->tp_iternext; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5355, __pyx_L41_error)
                }
                for (;;) {
                  if (likely(!__pyx_t_18)) {
                    if (likely(PyList_CheckExact(__pyx_t_16))) {
                      if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_9 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_17); __Pyx_INCREF(__pyx_t_9); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5355, __pyx_L41_error)
                      #else
                      __pyx_t_9 = PySequence_ITEM(__pyx_t_16, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5355, __pyx_L41_error)
                      __Pyx_GOTREF(__pyx_t_9);
                      #endif
                    } else {
                      if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_16, __pyx_t_17); __Pyx_INCREF(__pyx_t_9); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5355, __pyx_L41_error)
                      #else
                      __pyx_t_9 = PySequence_ITEM(__pyx_t_16, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5355, __pyx_L41_error)
                      __Pyx_GOTREF(__pyx_t_9);
                      #endif
                    }
                  } else {
                    __pyx_t_9 = __pyx_t_18(__pyx_t_16);
                    if (unlikely(!__pyx_t_9)) {
                      PyObject* exc_type = PyErr_Occurred();
                      if (exc_type) {
                        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                        else __PYX_ERR(0, 5355, __pyx_L41_error)
                      }
                      break;
                    }
                    __Pyx_GOTREF(__pyx_t_9);
                  }
                  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5355, __pyx_L41_error)
                  __Pyx_XDECREF_SET(__pyx_9genexpr93__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_9));
                  __pyx_t_9 = 0;
                  __pyx_t_9 = PyInt_FromSsize_t(__pyx_9genexpr93__pyx_v_ws->_memory_limit); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5355, __pyx_L41_error)
                  __Pyx_GOTREF(__pyx_t_9);
                  if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 5355, __pyx_L41_error)
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                }
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_XDECREF((PyObject *)__pyx_9genexpr93__pyx_v_ws); __pyx_9genexpr93__pyx_v_ws = 0;
                goto __pyx_L44_exit_scope;
                __pyx_L41_error:;
                __Pyx_XDECREF((PyObject *)__pyx_9genexpr93__pyx_v_ws); __pyx_9genexpr93__pyx_v_ws = 0;
                goto __pyx_L36_error;
                __pyx_L44_exit_scope:;
              } /* exit inner scope */
              __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5355, __pyx_L36_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              if (unlikely(PyDict_SetItem(__pyx_t_6, (PyObject*)__pyx_9genexpr92__pyx_v_k, (PyObject*)__pyx_t_16))) __PYX_ERR(0, 5355, __pyx_L36_error)
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_k); __pyx_9genexpr92__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_v); __pyx_9genexpr92__pyx_v_v = 0;
            goto __pyx_L45_exit_scope;
            __pyx_L36_error:;
            __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_k); __pyx_9genexpr92__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_9genexpr92__pyx_v_v); __pyx_9genexpr92__pyx_v_v = 0;
            goto __pyx_L15_error;
            __pyx_L45_exit_scope:;
          } /* exit inner scope */
          __pyx_v_limit_bytes = ((PyObject*)__pyx_t_6);
          __pyx_t_6 = 0;
 5356:             }
+5357:             group_bytes = {k: sum([ws._nbytes for ws in v]) for k, v in groups.items()}
          { /* enter inner scope */
            __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5357, __pyx_L48_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = 0;
            if (unlikely(__pyx_cur_scope->__pyx_v_groups == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 5357, __pyx_L48_error)
            }
            __pyx_t_16 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_groups, 0, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5357, __pyx_L48_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_XDECREF(__pyx_t_1);
            __pyx_t_1 = __pyx_t_16;
            __pyx_t_16 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_13, &__pyx_t_5, &__pyx_t_16, &__pyx_t_7, NULL, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5357, __pyx_L48_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_XDECREF_SET(__pyx_9genexpr94__pyx_v_k, __pyx_t_16);
              __pyx_t_16 = 0;
              __Pyx_XDECREF_SET(__pyx_9genexpr94__pyx_v_v, __pyx_t_7);
              __pyx_t_7 = 0;
              { /* enter inner scope */
                __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5357, __pyx_L53_error)
                __Pyx_GOTREF(__pyx_t_7);
                if (likely(PyList_CheckExact(__pyx_9genexpr94__pyx_v_v)) || PyTuple_CheckExact(__pyx_9genexpr94__pyx_v_v)) {
                  __pyx_t_16 = __pyx_9genexpr94__pyx_v_v; __Pyx_INCREF(__pyx_t_16); __pyx_t_17 = 0;
                  __pyx_t_18 = NULL;
                } else {
                  __pyx_t_17 = -1; __pyx_t_16 = PyObject_GetIter(__pyx_9genexpr94__pyx_v_v); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5357, __pyx_L53_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_18 = Py_TYPE(__pyx_t_16)->tp_iternext; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5357, __pyx_L53_error)
                }
                for (;;) {
                  if (likely(!__pyx_t_18)) {
                    if (likely(PyList_CheckExact(__pyx_t_16))) {
                      if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_9 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_17); __Pyx_INCREF(__pyx_t_9); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5357, __pyx_L53_error)
                      #else
                      __pyx_t_9 = PySequence_ITEM(__pyx_t_16, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5357, __pyx_L53_error)
                      __Pyx_GOTREF(__pyx_t_9);
                      #endif
                    } else {
                      if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_16)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_16, __pyx_t_17); __Pyx_INCREF(__pyx_t_9); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5357, __pyx_L53_error)
                      #else
                      __pyx_t_9 = PySequence_ITEM(__pyx_t_16, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5357, __pyx_L53_error)
                      __Pyx_GOTREF(__pyx_t_9);
                      #endif
                    }
                  } else {
                    __pyx_t_9 = __pyx_t_18(__pyx_t_16);
                    if (unlikely(!__pyx_t_9)) {
                      PyObject* exc_type = PyErr_Occurred();
                      if (exc_type) {
                        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                        else __PYX_ERR(0, 5357, __pyx_L53_error)
                      }
                      break;
                    }
                    __Pyx_GOTREF(__pyx_t_9);
                  }
                  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5357, __pyx_L53_error)
                  __Pyx_XDECREF_SET(__pyx_9genexpr95__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_9));
                  __pyx_t_9 = 0;
                  __pyx_t_9 = PyInt_FromSsize_t(__pyx_9genexpr95__pyx_v_ws->_nbytes); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5357, __pyx_L53_error)
                  __Pyx_GOTREF(__pyx_t_9);
                  if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 5357, __pyx_L53_error)
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                }
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_XDECREF((PyObject *)__pyx_9genexpr95__pyx_v_ws); __pyx_9genexpr95__pyx_v_ws = 0;
                goto __pyx_L56_exit_scope;
                __pyx_L53_error:;
                __Pyx_XDECREF((PyObject *)__pyx_9genexpr95__pyx_v_ws); __pyx_9genexpr95__pyx_v_ws = 0;
                goto __pyx_L48_error;
                __pyx_L56_exit_scope:;
              } /* exit inner scope */
              __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5357, __pyx_L48_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              if (unlikely(PyDict_SetItem(__pyx_t_6, (PyObject*)__pyx_9genexpr94__pyx_v_k, (PyObject*)__pyx_t_16))) __PYX_ERR(0, 5357, __pyx_L48_error)
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_k); __pyx_9genexpr94__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_v); __pyx_9genexpr94__pyx_v_v = 0;
            goto __pyx_L57_exit_scope;
            __pyx_L48_error:;
            __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_k); __pyx_9genexpr94__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_9genexpr94__pyx_v_v); __pyx_9genexpr94__pyx_v_v = 0;
            goto __pyx_L15_error;
            __pyx_L57_exit_scope:;
          } /* exit inner scope */
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_cur_scope->__pyx_v_group_bytes = ((PyObject*)__pyx_t_6);
          __pyx_t_6 = 0;
 5358: 
+5359:             limit = sum(limit_bytes.values())
          __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_limit_bytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5359, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5359, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_limit = __pyx_t_1;
          __pyx_t_1 = 0;
+5360:             total = sum(group_bytes.values())
          __pyx_t_1 = __Pyx_PyDict_Values(__pyx_cur_scope->__pyx_v_group_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5360, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5360, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_v_total = __pyx_t_6;
          __pyx_t_6 = 0;
 5361: 
+5362:             def _key(group):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_16workers_to_close_1_key(PyObject *__pyx_self, PyObject *__pyx_v_group); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_16workers_to_close_1_key = {"_key", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_16workers_to_close_1_key, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_16workers_to_close_1_key(PyObject *__pyx_self, PyObject *__pyx_v_group) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_key (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_16workers_to_close__key(__pyx_self, ((PyObject *)__pyx_v_group));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_16workers_to_close__key(PyObject *__pyx_self, PyObject *__pyx_v_group) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *__pyx_outer_scope;
  int __pyx_v_is_idle;
  PyObject *__pyx_v_bytes = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr96__pyx_v_wws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_key", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_42_workers_to_close *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_to_close._key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bytes);
  __Pyx_XDECREF((PyObject *)__pyx_9genexpr96__pyx_v_wws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__78 = PyTuple_Pack(5, __pyx_n_s_group, __pyx_n_s_wws, __pyx_n_s_is_idle, __pyx_n_s_bytes, __pyx_n_s_wws); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 5362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_tuple__78);
/* … */
          __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_16workers_to_close_1_key, 0, __pyx_n_s_Scheduler_workers_to_close_local, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__79)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5362, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v__key = __pyx_t_6;
          __pyx_t_6 = 0;
  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_key_2, 5362, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(0, 5362, __pyx_L1_error)
 5363:                 wws: WorkerState
+5364:                 is_idle = not any([wws._processing for wws in groups[group]])
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5364, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(!__pyx_cur_scope->__pyx_v_groups)) { __Pyx_RaiseClosureNameError("groups"); __PYX_ERR(0, 5364, __pyx_L5_error) }
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_v_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5364, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5364, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5364, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5364, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5364, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5364, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5364, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5364, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5364, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_9genexpr96__pyx_v_wws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2));
      __pyx_t_2 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr96__pyx_v_wws->_processing))) __PYX_ERR(0, 5364, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr96__pyx_v_wws); __pyx_9genexpr96__pyx_v_wws = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF((PyObject *)__pyx_9genexpr96__pyx_v_wws); __pyx_9genexpr96__pyx_v_wws = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5364, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_is_idle = (!__pyx_t_6);
+5365:                 bytes = -group_bytes[group]
  if (unlikely(!__pyx_cur_scope->__pyx_v_group_bytes)) { __Pyx_RaiseClosureNameError("group_bytes"); __PYX_ERR(0, 5365, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_group_bytes == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 5365, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_group_bytes, __pyx_v_group); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bytes = __pyx_t_1;
  __pyx_t_1 = 0;
+5366:                 return (is_idle, bytes)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_is_idle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_bytes);
  __Pyx_GIVEREF(__pyx_v_bytes);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_bytes);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 5367: 
+5368:             idle = sorted(groups, key=_key)
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5368, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_groups);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_groups);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_groups);
          __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5368, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_key, __pyx_v__key) < 0) __PYX_ERR(0, 5368, __pyx_L15_error)
          __pyx_t_16 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5368, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_v_idle = __pyx_t_16;
          __pyx_t_16 = 0;
 5369: 
+5370:             to_close = []
          __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5370, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_v_to_close = ((PyObject*)__pyx_t_16);
          __pyx_t_16 = 0;
+5371:             n_remain = len(parent._workers_dv)
          __pyx_t_16 = __pyx_v_parent->_workers_dv;
          __Pyx_INCREF(__pyx_t_16);
          if (unlikely(__pyx_t_16 == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 5371, __pyx_L15_error)
          }
          __pyx_t_13 = PyDict_Size(__pyx_t_16); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5371, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_16 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5371, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_v_n_remain = __pyx_t_16;
          __pyx_t_16 = 0;
 5372: 
+5373:             while idle:
          while (1) {
            __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_idle); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5373, __pyx_L15_error)
            if (!__pyx_t_4) break;
+5374:                 group = idle.pop()
            __pyx_t_16 = __Pyx_PyObject_Pop(__pyx_v_idle); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5374, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_XDECREF_SET(__pyx_v_group, __pyx_t_16);
            __pyx_t_16 = 0;
+5375:                 if n is None and any([ws._processing for ws in groups[group]]):
            __pyx_t_2 = (__pyx_v_n == Py_None);
            __pyx_t_3 = (__pyx_t_2 != 0);
            if (__pyx_t_3) {
            } else {
              __pyx_t_4 = __pyx_t_3;
              goto __pyx_L61_bool_binop_done;
            }
            { /* enter inner scope */
              __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5375, __pyx_L65_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_v_group); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5375, __pyx_L65_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
                __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_13 = 0;
                __pyx_t_18 = NULL;
              } else {
                __pyx_t_13 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5375, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_6);
                __pyx_t_18 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5375, __pyx_L65_error)
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              for (;;) {
                if (likely(!__pyx_t_18)) {
                  if (likely(PyList_CheckExact(__pyx_t_6))) {
                    if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_6)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5375, __pyx_L65_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5375, __pyx_L65_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  } else {
                    if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5375, __pyx_L65_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5375, __pyx_L65_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  }
                } else {
                  __pyx_t_1 = __pyx_t_18(__pyx_t_6);
                  if (unlikely(!__pyx_t_1)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 5375, __pyx_L65_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_1);
                }
                if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5375, __pyx_L65_error)
                __Pyx_XDECREF_SET(__pyx_9genexpr97__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
                __pyx_t_1 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_9genexpr97__pyx_v_ws->_processing))) __PYX_ERR(0, 5375, __pyx_L65_error)
              }
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF((PyObject *)__pyx_9genexpr97__pyx_v_ws); __pyx_9genexpr97__pyx_v_ws = 0;
              goto __pyx_L68_exit_scope;
              __pyx_L65_error:;
              __Pyx_XDECREF((PyObject *)__pyx_9genexpr97__pyx_v_ws); __pyx_9genexpr97__pyx_v_ws = 0;
              goto __pyx_L15_error;
              __pyx_L68_exit_scope:;
            } /* exit inner scope */
            __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_16); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5375, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5375, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_4 = __pyx_t_3;
            __pyx_L61_bool_binop_done:;
            if (__pyx_t_4) {
/* … */
            }
+5376:                     break
              goto __pyx_L59_break;
 5377: 
+5378:                 if minimum and n_remain - len(groups[group]) < minimum:
            __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_minimum); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5378, __pyx_L15_error)
            if (__pyx_t_3) {
            } else {
              __pyx_t_4 = __pyx_t_3;
              goto __pyx_L70_bool_binop_done;
            }
            __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_v_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_13 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_16 = PyNumber_Subtract(__pyx_v_n_remain, __pyx_t_6); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = PyObject_RichCompare(__pyx_t_16, __pyx_v_minimum, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5378, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_4 = __pyx_t_3;
            __pyx_L70_bool_binop_done:;
            if (__pyx_t_4) {
/* … */
            }
+5379:                     break
              goto __pyx_L59_break;
 5380: 
+5381:                 limit -= limit_bytes[group]
            __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_limit_bytes, __pyx_v_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5381, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_16 = PyNumber_InPlaceSubtract(__pyx_v_limit, __pyx_t_6); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5381, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF_SET(__pyx_v_limit, __pyx_t_16);
            __pyx_t_16 = 0;
 5382: 
+5383:                 if (n is not None and n_remain - len(groups[group]) >= target) or (
            __pyx_t_3 = (__pyx_v_n != Py_None);
            __pyx_t_2 = (__pyx_t_3 != 0);
            if (!__pyx_t_2) {
              goto __pyx_L74_next_or;
            } else {
            }
            __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_v_group); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_13 = PyObject_Length(__pyx_t_16); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_16 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_6 = PyNumber_Subtract(__pyx_v_n_remain, __pyx_t_16); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_16 = PyObject_RichCompare(__pyx_t_6, __pyx_v_target, Py_GE); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5383, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (!__pyx_t_2) {
            } else {
              __pyx_t_4 = __pyx_t_2;
              goto __pyx_L73_bool_binop_done;
            }
            __pyx_L74_next_or:;
/* … */
            if (__pyx_t_4) {
/* … */
              goto __pyx_L72;
            }
+5384:                     memory_ratio is not None and limit >= memory_ratio * total
            __pyx_t_2 = (__pyx_v_memory_ratio != Py_None);
            __pyx_t_3 = (__pyx_t_2 != 0);
            if (__pyx_t_3) {
            } else {
              __pyx_t_4 = __pyx_t_3;
              goto __pyx_L73_bool_binop_done;
            }
            __pyx_t_16 = PyNumber_Multiply(__pyx_v_memory_ratio, __pyx_v_total); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5384, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_6 = PyObject_RichCompare(__pyx_v_limit, __pyx_t_16, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5384, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5384, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_4 = __pyx_t_3;
            __pyx_L73_bool_binop_done:;
 5385:                 ):
+5386:                     to_close.append(group)
              __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_to_close, __pyx_v_group); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 5386, __pyx_L15_error)
+5387:                     n_remain -= len(groups[group])
              __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_v_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5387, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_13 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5387, __pyx_L15_error)
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5387, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_16 = PyNumber_InPlaceSubtract(__pyx_v_n_remain, __pyx_t_6); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5387, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_DECREF_SET(__pyx_v_n_remain, __pyx_t_16);
              __pyx_t_16 = 0;
 5388: 
 5389:                 else:
+5390:                     break
            /*else*/ {
              goto __pyx_L59_break;
            }
            __pyx_L72:;
          }
          __pyx_L59_break:;
 5391: 
+5392:             result = [getattr(ws, attribute) for g in to_close for ws in groups[g]]
          { /* enter inner scope */
            __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5392, __pyx_L79_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_6 = __pyx_v_to_close; __Pyx_INCREF(__pyx_t_6); __pyx_t_13 = 0;
            for (;;) {
              if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_6)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5392, __pyx_L79_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5392, __pyx_L79_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
              __Pyx_XDECREF_SET(__pyx_9genexpr98__pyx_v_g, __pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_groups, __pyx_9genexpr98__pyx_v_g); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5392, __pyx_L79_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
                __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0;
                __pyx_t_18 = NULL;
              } else {
                __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5392, __pyx_L79_error)
                __Pyx_GOTREF(__pyx_t_7);
                __pyx_t_18 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5392, __pyx_L79_error)
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              for (;;) {
                if (likely(!__pyx_t_18)) {
                  if (likely(PyList_CheckExact(__pyx_t_7))) {
                    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5392, __pyx_L79_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5392, __pyx_L79_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  } else {
                    if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5392, __pyx_L79_error)
                    #else
                    __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5392, __pyx_L79_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  }
                } else {
                  __pyx_t_1 = __pyx_t_18(__pyx_t_7);
                  if (unlikely(!__pyx_t_1)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 5392, __pyx_L79_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_1);
                }
                if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5392, __pyx_L79_error)
                __Pyx_XDECREF_SET(__pyx_9genexpr98__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
                __pyx_t_1 = 0;
                __pyx_t_1 = __Pyx_GetAttr(((PyObject *)__pyx_9genexpr98__pyx_v_ws), __pyx_v_attribute); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5392, __pyx_L79_error)
                __Pyx_GOTREF(__pyx_t_1);
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 5392, __pyx_L79_error)
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              }
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            }
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_9genexpr98__pyx_v_g); __pyx_9genexpr98__pyx_v_g = 0;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr98__pyx_v_ws); __pyx_9genexpr98__pyx_v_ws = 0;
            goto __pyx_L84_exit_scope;
            __pyx_L79_error:;
            __Pyx_XDECREF(__pyx_9genexpr98__pyx_v_g); __pyx_9genexpr98__pyx_v_g = 0;
            __Pyx_XDECREF((PyObject *)__pyx_9genexpr98__pyx_v_ws); __pyx_9genexpr98__pyx_v_ws = 0;
            goto __pyx_L15_error;
            __pyx_L84_exit_scope:;
          } /* exit inner scope */
          __pyx_v_result = ((PyObject*)__pyx_t_16);
          __pyx_t_16 = 0;
+5393:             if result:
          __pyx_t_4 = (PyList_GET_SIZE(__pyx_v_result) != 0);
          if (__pyx_t_4) {
/* … */
          }
+5394:                 logger.debug("Suggest closing workers: %s", result)
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_logger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5394, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_debug); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5394, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = NULL;
            __pyx_t_14 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_7, function);
                __pyx_t_14 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_7)) {
              PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_kp_u_Suggest_closing_workers_s, __pyx_v_result};
              __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5394, __pyx_L15_error)
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_GOTREF(__pyx_t_16);
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
              PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_kp_u_Suggest_closing_workers_s, __pyx_v_result};
              __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5394, __pyx_L15_error)
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_GOTREF(__pyx_t_16);
            } else
            #endif
            {
              __pyx_t_1 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5394, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (__pyx_t_6) {
                __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
              }
              __Pyx_INCREF(__pyx_kp_u_Suggest_closing_workers_s);
              __Pyx_GIVEREF(__pyx_kp_u_Suggest_closing_workers_s);
              PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_14, __pyx_kp_u_Suggest_closing_workers_s);
              __Pyx_INCREF(__pyx_v_result);
              __Pyx_GIVEREF(__pyx_v_result);
              PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_14, __pyx_v_result);
              __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5394, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            }
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 5395: 
+5396:             return result
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_result);
          __pyx_r = __pyx_v_result;
          goto __pyx_L19_try_return;
 5397: 
+5398:     async def retire_workers(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_130retire_workers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_129retire_workers[] = "Gracefully retire workers from cluster\n\n        Parameters\n        ----------\n        workers: list (optional)\n            List of worker addresses to retire.\n            If not provided we call ``workers_to_close`` which finds a good set\n        workers_names: list (optional)\n            List of worker names to retire.\n        remove: bool (defaults to True)\n            Whether or not to remove the worker metadata immediately or else\n            wait for the worker to contact us\n        close_workers: bool (defaults to False)\n            Whether or not to actually close the worker explicitly from here.\n            Otherwise we expect some external job scheduler to finish off the\n            worker.\n        **kwargs: dict\n            Extra options to pass to workers_to_close to determine which\n            workers we should drop\n\n        Returns\n        -------\n        Dictionary mapping worker ID/address to dictionary of information about\n        that worker for each retired worker.\n\n        See Also\n        --------\n        Scheduler.workers_to_close\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_130retire_workers = {"retire_workers", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_130retire_workers, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_129retire_workers};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_130retire_workers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_remove = 0;
  PyObject *__pyx_v_close_workers = 0;
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_lock = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("retire_workers (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,&__pyx_n_s_remove,&__pyx_n_s_close_workers,&__pyx_n_s_names,&__pyx_n_s_lock_2,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_129retire_workers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers, PyObject *__pyx_v_remove, PyObject *__pyx_v_close_workers, PyObject *__pyx_v_names, PyObject *__pyx_v_lock, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_43_retire_workers *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("retire_workers", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_43_retire_workers *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_43_retire_workers(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_43_retire_workers, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_43_retire_workers *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5398, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_remove = __pyx_v_remove;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_remove);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_remove);
  __pyx_cur_scope->__pyx_v_close_workers = __pyx_v_close_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_close_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_close_workers);
  __pyx_cur_scope->__pyx_v_names = __pyx_v_names;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_names);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_names);
  __pyx_cur_scope->__pyx_v_lock = __pyx_v_lock;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_lock);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_lock);
  __pyx_cur_scope->__pyx_v_kwargs = __pyx_v_kwargs;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_kwargs);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_kwargs);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_131generator16, __pyx_codeobj__80, (PyObject *) __pyx_cur_scope, __pyx_n_s_retire_workers, __pyx_n_s_Scheduler_retire_workers, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5398, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.retire_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_131generator16(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("retire_workers", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5398, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("retire_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__295 = PyTuple_Pack(22, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_remove, __pyx_n_s_close_workers, __pyx_n_s_names, __pyx_n_s_lock_2, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ts, __pyx_n_s_keys, __pyx_n_s_other_workers, __pyx_n_s_worker_keys, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_w, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_w); if (unlikely(!__pyx_tuple__295)) __PYX_ERR(0, 5398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__295);
  __Pyx_GIVEREF(__pyx_tuple__295);
  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(7, 0, 22, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_retire_workers, 5398, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(0, 5398, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_return, __pyx_n_u_dict_2) < 0) __PYX_ERR(0, 5398, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_130retire_workers, 0, __pyx_n_s_Scheduler_retire_workers, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__296);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_12);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_retire_workers, __pyx_t_2) < 0) __PYX_ERR(0, 5398, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__296 = PyTuple_Pack(6, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__296)) __PYX_ERR(0, 5398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__296);
  __Pyx_GIVEREF(__pyx_tuple__296);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_43_retire_workers {
  PyObject_HEAD
  PyObject *__pyx_v_close_workers;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_kwargs;
  PyObject *__pyx_v_lock;
  PyObject *__pyx_v_names;
  PyObject *__pyx_v_other_workers;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_remove;
  PyObject *__pyx_v_self;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr102__pyx_v_ts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_10genexpr100__pyx_v_w;
  PyObject *__pyx_10genexpr101__pyx_v_w;
  PyObject *__pyx_10genexpr105__pyx_v_w;
  PyObject *__pyx_10genexpr106__pyx_v_w;
  PyObject *__pyx_v_worker_keys;
  PyObject *__pyx_v_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr103__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr104__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_9genexpr99__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  PyObject *__pyx_t_9;
  PyObject *__pyx_t_10;
  PyObject *__pyx_t_11;
  PyObject *__pyx_t_12;
};

 5399:         self,
+5400:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+5401:         workers=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+5402:         remove=True,
    values[3] = ((PyObject *)((PyObject *)Py_True));
+5403:         close_workers=False,
    values[4] = ((PyObject *)((PyObject *)Py_False));
+5404:         names=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+5405:         lock=True,
    values[6] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_remove);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close_workers);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_names);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lock_2);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "retire_workers") < 0)) __PYX_ERR(0, 5398, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
    __pyx_v_remove = values[3];
    __pyx_v_close_workers = values[4];
    __pyx_v_names = values[5];
    __pyx_v_lock = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("retire_workers", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5398, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_CLEAR(__pyx_v_kwargs);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.retire_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_129retire_workers(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers, __pyx_v_remove, __pyx_v_close_workers, __pyx_v_names, __pyx_v_lock, __pyx_v_kwargs);
 5406:         **kwargs,
 5407:     ) -> dict:
 5408:         """Gracefully retire workers from cluster
 5409: 
 5410:         Parameters
 5411:         ----------
 5412:         workers: list (optional)
 5413:             List of worker addresses to retire.
 5414:             If not provided we call ``workers_to_close`` which finds a good set
 5415:         workers_names: list (optional)
 5416:             List of worker names to retire.
 5417:         remove: bool (defaults to True)
 5418:             Whether or not to remove the worker metadata immediately or else
 5419:             wait for the worker to contact us
 5420:         close_workers: bool (defaults to False)
 5421:             Whether or not to actually close the worker explicitly from here.
 5422:             Otherwise we expect some external job scheduler to finish off the
 5423:             worker.
 5424:         **kwargs: dict
 5425:             Extra options to pass to workers_to_close to determine which
 5426:             workers we should drop
 5427: 
 5428:         Returns
 5429:         -------
 5430:         Dictionary mapping worker ID/address to dictionary of information about
 5431:         that worker for each retired worker.
 5432: 
 5433:         See Also
 5434:         --------
 5435:         Scheduler.workers_to_close
 5436:         """
+5437:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5438:         ws: WorkerState
 5439:         ts: TaskState
+5440:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5440, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5440, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
        __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.retire_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_24, &__pyx_t_5, &__pyx_t_23) < 0) __PYX_ERR(0, 5440, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_24);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_23);
          __pyx_t_3 = PyTuple_Pack(3, __pyx_t_24, __pyx_t_5, __pyx_t_23); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5440, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5440, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_9 < 0) __PYX_ERR(0, 5440, __pyx_L10_except_error)
          __pyx_t_14 = ((!(__pyx_t_9 != 0)) != 0);
          if (__pyx_t_14) {
            __Pyx_GIVEREF(__pyx_t_24);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ErrRestoreWithState(__pyx_t_24, __pyx_t_5, __pyx_t_23);
            __pyx_t_24 = 0; __pyx_t_5 = 0; __pyx_t_23 = 0; 
            __PYX_ERR(0, 5440, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5440, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_19, &__pyx_t_20);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_19);
        __Pyx_XGOTREF(__pyx_t_20);
        __pyx_t_25 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5440, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        }
        __pyx_r = __pyx_t_25;
        __pyx_t_25 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_19, __pyx_t_20);
        }
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L79;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L79:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+5441:             async with self._lock if lock else empty_context:
          /*with:*/ {
            __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_lock); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5441, __pyx_L8_error)
            if (__pyx_t_9) {
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_lock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5441, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_1 = __pyx_t_2;
              __pyx_t_2 = 0;
            } else {
              __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty_context); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5441, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_1 = __pyx_t_2;
              __pyx_t_2 = 0;
            }
            __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aexit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5441, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aenter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5441, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5441, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_1);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
              __Pyx_XGIVEREF(__pyx_t_6);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
              __Pyx_XGIVEREF(__pyx_t_7);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_10);
              __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 1;
              return __pyx_r;
              __pyx_L15_resume_from_await:;
              __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_1);
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_6);
              __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_7);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
              __pyx_cur_scope->__pyx_t_4 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
              __pyx_cur_scope->__pyx_t_5 = 0;
              __Pyx_XGOTREF(__pyx_t_10);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5441, __pyx_L14_error)
              __pyx_t_2 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_2);
            } else {
              __pyx_t_2 = NULL;
              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_2) < 0) __PYX_ERR(0, 5441, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            /*try:*/ {
              {
                /*try:*/ {
/* … */
                }
                __pyx_L19_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("distributed.scheduler.Scheduler.retire_workers", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_5, &__pyx_t_24) < 0) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_23);
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_GOTREF(__pyx_t_24);
                  __pyx_t_3 = PyTuple_Pack(3, __pyx_t_23, __pyx_t_5, __pyx_t_24); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_21);
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_5);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_13);
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_13;
                    __Pyx_XGIVEREF(__pyx_t_21);
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_21;
                    __Pyx_XGIVEREF(__pyx_t_23);
                    __pyx_cur_scope->__pyx_t_10 = __pyx_t_23;
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __pyx_cur_scope->__pyx_t_11 = __pyx_t_24;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_SwapException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 6;
                    return __pyx_r;
                    __pyx_L72_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_5);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_cur_scope->__pyx_t_8 = 0;
                    __Pyx_XGOTREF(__pyx_t_13);
                    __pyx_t_21 = __pyx_cur_scope->__pyx_t_9;
                    __pyx_cur_scope->__pyx_t_9 = 0;
                    __Pyx_XGOTREF(__pyx_t_21);
                    __pyx_t_23 = __pyx_cur_scope->__pyx_t_10;
                    __pyx_cur_scope->__pyx_t_10 = 0;
                    __Pyx_XGOTREF(__pyx_t_23);
                    __pyx_t_24 = __pyx_cur_scope->__pyx_t_11;
                    __pyx_cur_scope->__pyx_t_11 = 0;
                    __Pyx_XGOTREF(__pyx_t_24);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                    __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
                  } else {
                    __pyx_t_3 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                    __Pyx_GOTREF(__pyx_t_3);
                  }
                  __pyx_t_21 = __pyx_t_3;
                  __pyx_t_3 = 0;
                  __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                  if (__pyx_t_14 < 0) __PYX_ERR(0, 5441, __pyx_L21_except_error)
                  __pyx_t_9 = ((!(__pyx_t_14 != 0)) != 0);
                  if (__pyx_t_9) {
                    __Pyx_GIVEREF(__pyx_t_23);
                    __Pyx_GIVEREF(__pyx_t_5);
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_5, __pyx_t_24);
                    __pyx_t_23 = 0; __pyx_t_5 = 0; __pyx_t_24 = 0; 
                    __PYX_ERR(0, 5441, __pyx_L21_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                  goto __pyx_L20_exception_handled;
                }
                __pyx_L21_except_error:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
                goto __pyx_L8_error;
                __pyx_L23_try_return:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
                goto __pyx_L16_return;
                __pyx_L20_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_10) {
                  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5441, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_13);
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_13);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_13;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 7;
                    return __pyx_r;
                    __pyx_L73_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_13);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5441, __pyx_L8_error)
                    __pyx_t_24 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_24);
                  } else {
                    __pyx_t_24 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_24) < 0) __PYX_ERR(0, 5441, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_24);
                  }
                  __pyx_t_13 = __pyx_t_24;
                  __pyx_t_24 = 0;
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                }
                goto __pyx_L18;
              }
              __pyx_L16_return: {
                __Pyx_PyThreadState_assign
                __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
                if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
                if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
                __Pyx_XGOTREF(__pyx_t_13);
                __Pyx_XGOTREF(__pyx_t_12);
                __Pyx_XGOTREF(__pyx_t_11);
                __Pyx_XGOTREF(__pyx_t_21);
                __Pyx_XGOTREF(__pyx_t_20);
                __Pyx_XGOTREF(__pyx_t_19);
                __pyx_t_25 = __pyx_r;
                __pyx_r = 0;
                if (__pyx_t_10) {
                  __pyx_t_26 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5441, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_26);
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_26);
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_7);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_13);
                    __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                    __Pyx_XGIVEREF(__pyx_t_19);
                    __pyx_cur_scope->__pyx_t_8 = __pyx_t_19;
                    __Pyx_XGIVEREF(__pyx_t_20);
                    __pyx_cur_scope->__pyx_t_9 = __pyx_t_20;
                    __Pyx_XGIVEREF(__pyx_t_21);
                    __pyx_cur_scope->__pyx_t_10 = __pyx_t_21;
                    __Pyx_XGIVEREF(__pyx_t_25);
                    __pyx_cur_scope->__pyx_t_12 = __pyx_t_25;
                    __Pyx_XGIVEREF(__pyx_t_26);
                    __pyx_cur_scope->__pyx_t_11 = __pyx_t_26;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 8;
                    return __pyx_r;
                    __pyx_L74_resume_from_await:;
                    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_4);
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_7);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                    __pyx_cur_scope->__pyx_t_7 = 0;
                    __Pyx_XGOTREF(__pyx_t_13);
                    __pyx_t_19 = __pyx_cur_scope->__pyx_t_8;
                    __pyx_cur_scope->__pyx_t_8 = 0;
                    __Pyx_XGOTREF(__pyx_t_19);
                    __pyx_t_20 = __pyx_cur_scope->__pyx_t_9;
                    __pyx_cur_scope->__pyx_t_9 = 0;
                    __Pyx_XGOTREF(__pyx_t_20);
                    __pyx_t_21 = __pyx_cur_scope->__pyx_t_10;
                    __pyx_cur_scope->__pyx_t_10 = 0;
                    __Pyx_XGOTREF(__pyx_t_21);
                    __pyx_t_25 = __pyx_cur_scope->__pyx_t_12;
                    __pyx_cur_scope->__pyx_t_12 = 0;
                    __Pyx_XGOTREF(__pyx_t_25);
                    __pyx_t_26 = __pyx_cur_scope->__pyx_t_11;
                    __pyx_cur_scope->__pyx_t_11 = 0;
                    __Pyx_XGOTREF(__pyx_t_26);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5441, __pyx_L8_error)
                    __pyx_t_24 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_24);
                  } else {
                    __pyx_t_24 = NULL;
                    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_24) < 0) __PYX_ERR(0, 5441, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_24);
                  }
                  __pyx_t_26 = __pyx_t_24;
                  __pyx_t_24 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                }
                __pyx_r = __pyx_t_25;
                __pyx_t_25 = 0;
                if (PY_MAJOR_VERSION >= 3) {
                  __Pyx_XGIVEREF(__pyx_t_21);
                  __Pyx_XGIVEREF(__pyx_t_20);
                  __Pyx_XGIVEREF(__pyx_t_19);
                  __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
                }
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
                __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
                goto __pyx_L12_try_return;
              }
              __pyx_L18:;
            }
            goto __pyx_L75;
            __pyx_L14_error:;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            goto __pyx_L8_error;
            __pyx_L75:;
          }
+5442:                 if names is not None:
                  __pyx_t_9 = (__pyx_cur_scope->__pyx_v_names != Py_None);
                  __pyx_t_14 = (__pyx_t_9 != 0);
                  if (__pyx_t_14) {
/* … */
                  }
+5443:                     if names:
                    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_names); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5443, __pyx_L19_error)
                    if (__pyx_t_14) {
/* … */
                    }
+5444:                         logger.info("Retire worker names %s", names)
                      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5444, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5444, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __pyx_t_2 = NULL;
                      __pyx_t_15 = 0;
                      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
                        if (likely(__pyx_t_2)) {
                          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                          __Pyx_INCREF(__pyx_t_2);
                          __Pyx_INCREF(function);
                          __Pyx_DECREF_SET(__pyx_t_3, function);
                          __pyx_t_15 = 1;
                        }
                      }
                      #if CYTHON_FAST_PYCALL
                      if (PyFunction_Check(__pyx_t_3)) {
                        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Retire_worker_names_s, __pyx_cur_scope->__pyx_v_names};
                        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5444, __pyx_L19_error)
                        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                        __Pyx_GOTREF(__pyx_t_1);
                      } else
                      #endif
                      #if CYTHON_FAST_PYCCALL
                      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Retire_worker_names_s, __pyx_cur_scope->__pyx_v_names};
                        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5444, __pyx_L19_error)
                        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                        __Pyx_GOTREF(__pyx_t_1);
                      } else
                      #endif
                      {
                        __pyx_t_5 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5444, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_5);
                        if (__pyx_t_2) {
                          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
                        }
                        __Pyx_INCREF(__pyx_kp_u_Retire_worker_names_s);
                        __Pyx_GIVEREF(__pyx_kp_u_Retire_worker_names_s);
                        PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_15, __pyx_kp_u_Retire_worker_names_s);
                        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_names);
                        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_names);
                        PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_15, __pyx_cur_scope->__pyx_v_names);
                        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5444, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5445:                     names = set(map(str, names))
                    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5445, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_INCREF(((PyObject *)(&PyUnicode_Type)));
                    __Pyx_GIVEREF(((PyObject *)(&PyUnicode_Type)));
                    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&PyUnicode_Type)));
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_names);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_names);
                    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_names);
                    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5445, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __pyx_t_1 = PySet_New(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5445, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_names);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_names, __pyx_t_1);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_t_1 = 0;
+5446:                     workers = [
                    { /* enter inner scope */
                      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5446, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
+5447:                         ws._address
                          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_9genexpr99__pyx_v_ws->_address))) __PYX_ERR(0, 5446, __pyx_L19_error)
+5448:                         for ws in parent._workers_dv.values()
                      __pyx_t_16 = 0;
                      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
                        __PYX_ERR(0, 5448, __pyx_L19_error)
                      }
                      __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5448, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __Pyx_XDECREF(__pyx_t_3);
                      __pyx_t_3 = __pyx_t_5;
                      __pyx_t_5 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_17, &__pyx_t_16, NULL, &__pyx_t_5, NULL, __pyx_t_15);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5448, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_5);
                        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5448, __pyx_L19_error)
                        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_9genexpr99__pyx_v_ws));
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr99__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
                        __Pyx_GIVEREF(__pyx_t_5);
                        __pyx_t_5 = 0;
+5449:                         if str(ws._name) in names
                        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_cur_scope->__pyx_9genexpr99__pyx_v_ws->_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5449, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_5);
                        __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_5, __pyx_cur_scope->__pyx_v_names, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5449, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                        __pyx_t_9 = (__pyx_t_14 != 0);
                        if (__pyx_t_9) {
/* … */
                        }
                      }
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    } /* exit inner scope */
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __pyx_t_1 = 0;
 5450:                     ]
+5451:                 if workers is None:
                  __pyx_t_9 = (__pyx_cur_scope->__pyx_v_workers == Py_None);
                  __pyx_t_14 = (__pyx_t_9 != 0);
                  if (__pyx_t_14) {
/* … */
                  }
+5452:                     while True:
                    while (1) {
+5453:                         try:
                      {
                        /*try:*/ {
/* … */
                        }
                        __pyx_L33_error:;
                        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
                        __Pyx_XGIVEREF(__pyx_t_19);
                        __Pyx_XGIVEREF(__pyx_t_20);
                        __Pyx_XGIVEREF(__pyx_t_21);
                        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
                        goto __pyx_L19_error;
                        __pyx_L37_try_return:;
                        __Pyx_XGIVEREF(__pyx_t_19);
                        __Pyx_XGIVEREF(__pyx_t_20);
                        __Pyx_XGIVEREF(__pyx_t_21);
                        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
                        goto __pyx_L23_try_return;
                        __pyx_L34_exception_handled:;
                        __Pyx_XGIVEREF(__pyx_t_19);
                        __Pyx_XGIVEREF(__pyx_t_20);
                        __Pyx_XGIVEREF(__pyx_t_21);
                        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
                      }
                    }
+5454:                             workers = self.workers_to_close(**kwargs)
                          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_workers_to_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5454, __pyx_L33_error)
                          __Pyx_GOTREF(__pyx_t_1);
                          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_cur_scope->__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5454, __pyx_L33_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_3);
                          __Pyx_GIVEREF(__pyx_t_3);
                          __pyx_t_3 = 0;
+5455:                             if workers:
                          __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5455, __pyx_L33_error)
                          if (__pyx_t_14) {
/* … */
                          }
+5456:                                 workers = await self.retire_workers(
                            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_retire_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5456, __pyx_L33_error)
                            __Pyx_GOTREF(__pyx_t_3);
/* … */
                            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5456, __pyx_L33_error)
                            __Pyx_GOTREF(__pyx_t_5);
                            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5);
                            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                            __Pyx_XGOTREF(__pyx_r);
                            if (likely(__pyx_r)) {
                              __Pyx_XGIVEREF(__pyx_t_4);
                              __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                              __Pyx_XGIVEREF(__pyx_t_6);
                              __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                              __Pyx_XGIVEREF(__pyx_t_7);
                              __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                              __Pyx_XGIVEREF(__pyx_t_8);
                              __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                              __Pyx_XGIVEREF(__pyx_t_10);
                              __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                              __Pyx_XGIVEREF(__pyx_t_11);
                              __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                              __Pyx_XGIVEREF(__pyx_t_12);
                              __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                              __Pyx_XGIVEREF(__pyx_t_13);
                              __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                              __Pyx_XGIVEREF(__pyx_t_19);
                              __pyx_cur_scope->__pyx_t_8 = __pyx_t_19;
                              __Pyx_XGIVEREF(__pyx_t_20);
                              __pyx_cur_scope->__pyx_t_9 = __pyx_t_20;
                              __Pyx_XGIVEREF(__pyx_t_21);
                              __pyx_cur_scope->__pyx_t_10 = __pyx_t_21;
                              __Pyx_XGIVEREF(__pyx_r);
                              __Pyx_RefNannyFinishContext();
                              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                              /* return from generator, awaiting value */
                              __pyx_generator->resume_label = 2;
                              return __pyx_r;
                              __pyx_L42_resume_from_await:;
                              __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                              __pyx_cur_scope->__pyx_t_0 = 0;
                              __Pyx_XGOTREF(__pyx_t_4);
                              __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                              __pyx_cur_scope->__pyx_t_1 = 0;
                              __Pyx_XGOTREF(__pyx_t_6);
                              __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                              __pyx_cur_scope->__pyx_t_2 = 0;
                              __Pyx_XGOTREF(__pyx_t_7);
                              __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                              __pyx_cur_scope->__pyx_t_3 = 0;
                              __Pyx_XGOTREF(__pyx_t_8);
                              __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                              __pyx_cur_scope->__pyx_t_4 = 0;
                              __Pyx_XGOTREF(__pyx_t_10);
                              __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                              __pyx_cur_scope->__pyx_t_5 = 0;
                              __Pyx_XGOTREF(__pyx_t_11);
                              __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                              __pyx_cur_scope->__pyx_t_6 = 0;
                              __Pyx_XGOTREF(__pyx_t_12);
                              __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                              __pyx_cur_scope->__pyx_t_7 = 0;
                              __Pyx_XGOTREF(__pyx_t_13);
                              __pyx_t_19 = __pyx_cur_scope->__pyx_t_8;
                              __pyx_cur_scope->__pyx_t_8 = 0;
                              __Pyx_XGOTREF(__pyx_t_19);
                              __pyx_t_20 = __pyx_cur_scope->__pyx_t_9;
                              __pyx_cur_scope->__pyx_t_9 = 0;
                              __Pyx_XGOTREF(__pyx_t_20);
                              __pyx_t_21 = __pyx_cur_scope->__pyx_t_10;
                              __pyx_cur_scope->__pyx_t_10 = 0;
                              __Pyx_XGOTREF(__pyx_t_21);
                              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5456, __pyx_L33_error)
                              __pyx_t_5 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_5);
                            } else {
                              __pyx_t_5 = NULL;
                              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_5) < 0) __PYX_ERR(0, 5456, __pyx_L33_error)
                              __Pyx_GOTREF(__pyx_t_5);
                            }
                            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_5);
                            __Pyx_GIVEREF(__pyx_t_5);
                            __pyx_t_5 = 0;
+5457:                                     workers=workers,
                            __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5457, __pyx_L33_error)
                            __Pyx_GOTREF(__pyx_t_1);
                            if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_workers, __pyx_cur_scope->__pyx_v_workers) < 0) __PYX_ERR(0, 5457, __pyx_L33_error)
+5458:                                     remove=remove,
                            if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_remove, __pyx_cur_scope->__pyx_v_remove) < 0) __PYX_ERR(0, 5457, __pyx_L33_error)
+5459:                                     close_workers=close_workers,
                            if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_close_workers, __pyx_cur_scope->__pyx_v_close_workers) < 0) __PYX_ERR(0, 5457, __pyx_L33_error)
+5460:                                     lock=False,
                            if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lock_2, Py_False) < 0) __PYX_ERR(0, 5457, __pyx_L33_error)
 5461:                                 )
+5462:                                 return workers
                            __Pyx_XDECREF(__pyx_r);
                            if (!(likely(PyDict_CheckExact(__pyx_cur_scope->__pyx_v_workers))||((__pyx_cur_scope->__pyx_v_workers) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_cur_scope->__pyx_v_workers)->tp_name), 0))) __PYX_ERR(0, 5462, __pyx_L33_error)
                            __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_workers);
                            goto __pyx_L37_try_return;
 5463:                             else:
+5464:                                 return {}
                          /*else*/ {
                            __Pyx_XDECREF(__pyx_r);
                            __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5464, __pyx_L33_error)
                            __Pyx_GOTREF(__pyx_t_5);
                            __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5);
                            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                            goto __pyx_L37_try_return;
                          }
+5465:                         except KeyError:  # keys left during replicate
                        __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
                        if (__pyx_t_15) {
                          __Pyx_ErrRestore(0,0,0);
                          goto __pyx_L34_exception_handled;
                        }
                        goto __pyx_L35_except_error;
                        __pyx_L35_except_error:;
 5466:                             pass
+5467:                 workers = {
                  { /* enter inner scope */
                    __pyx_t_5 = PySet_New(NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5467, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
+5468:                     parent._workers_dv[w] for w in workers if w in parent._workers_dv
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                      __pyx_t_1 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_17 = 0;
                      __pyx_t_22 = NULL;
                    } else {
                      __pyx_t_17 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5468, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __pyx_t_22 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5468, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_22)) {
                        if (likely(PyList_CheckExact(__pyx_t_1))) {
                          if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_1)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_17); __Pyx_INCREF(__pyx_t_3); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5468, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5468, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        } else {
                          if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_17); __Pyx_INCREF(__pyx_t_3); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5468, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5468, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        }
                      } else {
                        __pyx_t_3 = __pyx_t_22(__pyx_t_1);
                        if (unlikely(!__pyx_t_3)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5468, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_3);
                      }
                      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr100__pyx_v_w);
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr100__pyx_v_w, __pyx_t_3);
                      __Pyx_GIVEREF(__pyx_t_3);
                      __pyx_t_3 = 0;
                      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
                        __PYX_ERR(0, 5468, __pyx_L19_error)
                      }
                      __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_cur_scope->__pyx_10genexpr100__pyx_v_w, __pyx_cur_scope->__pyx_v_parent->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5468, __pyx_L19_error)
                      __pyx_t_9 = (__pyx_t_14 != 0);
                      if (__pyx_t_9) {
                        if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                          __PYX_ERR(0, 5468, __pyx_L19_error)
                        }
                        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_workers_dv, __pyx_cur_scope->__pyx_10genexpr100__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5468, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        if (unlikely(PySet_Add(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5468, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      }
                    }
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  } /* exit inner scope */
                  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
                  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_5);
                  __Pyx_GIVEREF(__pyx_t_5);
                  __pyx_t_5 = 0;
 5469:                 }
+5470:                 if not workers:
                  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5470, __pyx_L19_error)
                  __pyx_t_14 = ((!__pyx_t_9) != 0);
                  if (__pyx_t_14) {
/* … */
                  }
+5471:                     return {}
                    __Pyx_XDECREF(__pyx_r);
                    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5471, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    goto __pyx_L23_try_return;
+5472:                 logger.info("Retire workers %s", workers)
                  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5472, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5472, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_1 = NULL;
                  __pyx_t_15 = 0;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
                    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
                    if (likely(__pyx_t_1)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                      __Pyx_INCREF(__pyx_t_1);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_3, function);
                      __pyx_t_15 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_3)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Retire_workers_s, __pyx_cur_scope->__pyx_v_workers};
                    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5472, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_GOTREF(__pyx_t_5);
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Retire_workers_s, __pyx_cur_scope->__pyx_v_workers};
                    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5472, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_GOTREF(__pyx_t_5);
                  } else
                  #endif
                  {
                    __pyx_t_2 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5472, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    if (__pyx_t_1) {
                      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
                    }
                    __Pyx_INCREF(__pyx_kp_u_Retire_workers_s);
                    __Pyx_GIVEREF(__pyx_kp_u_Retire_workers_s);
                    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_15, __pyx_kp_u_Retire_workers_s);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
                    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_15, __pyx_cur_scope->__pyx_v_workers);
                    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5472, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5473: 
 5474:                 # Keys orphaned by retiring those workers
+5475:                 keys = set.union(*[w.has_what for w in workers])
                  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PySet_Type)), __pyx_n_s_union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5475, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  { /* enter inner scope */
                    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5475, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                      __pyx_t_2 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_2); __pyx_t_17 = 0;
                      __pyx_t_22 = NULL;
                    } else {
                      __pyx_t_17 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5475, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_22 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5475, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_22)) {
                        if (likely(PyList_CheckExact(__pyx_t_2))) {
                          if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5475, __pyx_L19_error)
                          #else
                          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5475, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_1);
                          #endif
                        } else {
                          if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5475, __pyx_L19_error)
                          #else
                          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5475, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_1);
                          #endif
                        }
                      } else {
                        __pyx_t_1 = __pyx_t_22(__pyx_t_2);
                        if (unlikely(!__pyx_t_1)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5475, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_1);
                      }
                      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr101__pyx_v_w);
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr101__pyx_v_w, __pyx_t_1);
                      __Pyx_GIVEREF(__pyx_t_1);
                      __pyx_t_1 = 0;
                      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_10genexpr101__pyx_v_w, __pyx_n_s_has_what); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5475, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 5475, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  } /* exit inner scope */
                  __pyx_t_2 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5475, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5475, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __Pyx_GIVEREF(__pyx_t_3);
                  __pyx_cur_scope->__pyx_v_keys = __pyx_t_3;
                  __pyx_t_3 = 0;
+5476:                 keys = {ts._key for ts in keys if ts._who_has.issubset(workers)}
                  { /* enter inner scope */
                    __pyx_t_3 = PySet_New(NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5476, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
                      __pyx_t_2 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_17 = 0;
                      __pyx_t_22 = NULL;
                    } else {
                      __pyx_t_17 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5476, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_22 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5476, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_22)) {
                        if (likely(PyList_CheckExact(__pyx_t_2))) {
                          if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_5); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5476, __pyx_L19_error)
                          #else
                          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5476, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_5);
                          #endif
                        } else {
                          if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_5); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5476, __pyx_L19_error)
                          #else
                          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5476, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_5);
                          #endif
                        }
                      } else {
                        __pyx_t_5 = __pyx_t_22(__pyx_t_2);
                        if (unlikely(!__pyx_t_5)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5476, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_5);
                      }
                      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5476, __pyx_L19_error)
                      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr102__pyx_v_ts));
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr102__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
                      __Pyx_GIVEREF(__pyx_t_5);
                      __pyx_t_5 = 0;
                      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_10genexpr102__pyx_v_ts->_who_has, __pyx_n_s_issubset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5476, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __pyx_t_23 = NULL;
                      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                        __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_1);
                        if (likely(__pyx_t_23)) {
                          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                          __Pyx_INCREF(__pyx_t_23);
                          __Pyx_INCREF(function);
                          __Pyx_DECREF_SET(__pyx_t_1, function);
                        }
                      }
                      __pyx_t_5 = (__pyx_t_23) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_23, __pyx_cur_scope->__pyx_v_workers) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_workers);
                      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5476, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5476, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                      if (__pyx_t_14) {
                        if (unlikely(PySet_Add(__pyx_t_3, (PyObject*)__pyx_cur_scope->__pyx_10genexpr102__pyx_v_ts->_key))) __PYX_ERR(0, 5476, __pyx_L19_error)
                      }
                    }
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  } /* exit inner scope */
                  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_keys);
                  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_keys, __pyx_t_3);
                  __Pyx_GIVEREF(__pyx_t_3);
                  __pyx_t_3 = 0;
 5477: 
+5478:                 other_workers = set(parent._workers_dv.values()) - workers
                  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
                    __PYX_ERR(0, 5478, __pyx_L19_error)
                  }
                  __pyx_t_3 = __Pyx_PyDict_Values(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5478, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_2 = PySet_New(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5478, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5478, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __Pyx_GIVEREF(__pyx_t_3);
                  __pyx_cur_scope->__pyx_v_other_workers = __pyx_t_3;
                  __pyx_t_3 = 0;
+5479:                 if keys:
                  __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5479, __pyx_L19_error)
                  if (__pyx_t_14) {
/* … */
                  }
+5480:                     if other_workers:
                    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_other_workers); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5480, __pyx_L19_error)
                    if (__pyx_t_14) {
/* … */
                      goto __pyx_L53;
                    }
+5481:                         logger.info("Moving %d keys to other workers", len(keys))
                      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5481, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5481, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __pyx_t_17 = PyObject_Length(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5481, __pyx_L19_error)
                      __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_17); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5481, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_1 = NULL;
                      __pyx_t_15 = 0;
                      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
                        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
                        if (likely(__pyx_t_1)) {
                          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                          __Pyx_INCREF(__pyx_t_1);
                          __Pyx_INCREF(function);
                          __Pyx_DECREF_SET(__pyx_t_5, function);
                          __pyx_t_15 = 1;
                        }
                      }
                      #if CYTHON_FAST_PYCALL
                      if (PyFunction_Check(__pyx_t_5)) {
                        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Moving_d_keys_to_other_workers, __pyx_t_2};
                        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5481, __pyx_L19_error)
                        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                        __Pyx_GOTREF(__pyx_t_3);
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      } else
                      #endif
                      #if CYTHON_FAST_PYCCALL
                      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Moving_d_keys_to_other_workers, __pyx_t_2};
                        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5481, __pyx_L19_error)
                        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                        __Pyx_GOTREF(__pyx_t_3);
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      } else
                      #endif
                      {
                        __pyx_t_23 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5481, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_23);
                        if (__pyx_t_1) {
                          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_1); __pyx_t_1 = NULL;
                        }
                        __Pyx_INCREF(__pyx_kp_u_Moving_d_keys_to_other_workers);
                        __Pyx_GIVEREF(__pyx_kp_u_Moving_d_keys_to_other_workers);
                        PyTuple_SET_ITEM(__pyx_t_23, 0+__pyx_t_15, __pyx_kp_u_Moving_d_keys_to_other_workers);
                        __Pyx_GIVEREF(__pyx_t_2);
                        PyTuple_SET_ITEM(__pyx_t_23, 1+__pyx_t_15, __pyx_t_2);
                        __pyx_t_2 = 0;
                        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5481, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_3);
                        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5482:                         await self.replicate(
                      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_replicate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5482, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
/* … */
                      __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5482, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_23);
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                      __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_23);
                      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                      __Pyx_XGOTREF(__pyx_r);
                      if (likely(__pyx_r)) {
                        __Pyx_XGIVEREF(__pyx_t_4);
                        __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                        __Pyx_XGIVEREF(__pyx_t_6);
                        __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                        __Pyx_XGIVEREF(__pyx_t_7);
                        __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                        __Pyx_XGIVEREF(__pyx_t_8);
                        __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                        __Pyx_XGIVEREF(__pyx_t_10);
                        __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                        __Pyx_XGIVEREF(__pyx_t_11);
                        __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                        __Pyx_XGIVEREF(__pyx_t_12);
                        __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                        __Pyx_XGIVEREF(__pyx_t_13);
                        __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                        __Pyx_XGIVEREF(__pyx_r);
                        __Pyx_RefNannyFinishContext();
                        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                        /* return from generator, awaiting value */
                        __pyx_generator->resume_label = 3;
                        return __pyx_r;
                        __pyx_L56_resume_from_await:;
                        __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                        __pyx_cur_scope->__pyx_t_0 = 0;
                        __Pyx_XGOTREF(__pyx_t_4);
                        __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                        __pyx_cur_scope->__pyx_t_1 = 0;
                        __Pyx_XGOTREF(__pyx_t_6);
                        __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                        __pyx_cur_scope->__pyx_t_2 = 0;
                        __Pyx_XGOTREF(__pyx_t_7);
                        __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                        __pyx_cur_scope->__pyx_t_3 = 0;
                        __Pyx_XGOTREF(__pyx_t_8);
                        __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                        __pyx_cur_scope->__pyx_t_4 = 0;
                        __Pyx_XGOTREF(__pyx_t_10);
                        __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                        __pyx_cur_scope->__pyx_t_5 = 0;
                        __Pyx_XGOTREF(__pyx_t_11);
                        __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                        __pyx_cur_scope->__pyx_t_6 = 0;
                        __Pyx_XGOTREF(__pyx_t_12);
                        __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                        __pyx_cur_scope->__pyx_t_7 = 0;
                        __Pyx_XGOTREF(__pyx_t_13);
                        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5482, __pyx_L19_error)
                      } else {
                        PyObject* exc_type = __Pyx_PyErr_Occurred();
                        if (exc_type) {
                          if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                          else __PYX_ERR(0, 5482, __pyx_L19_error)
                        }
                      }
+5483:                             keys=keys,
                      __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5483, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_keys, __pyx_cur_scope->__pyx_v_keys) < 0) __PYX_ERR(0, 5483, __pyx_L19_error)
                      { /* enter inner scope */
+5484:                             workers=[ws._address for ws in other_workers],
                        __pyx_t_23 = PyList_New(0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5484, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_23);
                        if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_other_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_other_workers)) {
                          __pyx_t_2 = __pyx_cur_scope->__pyx_v_other_workers; __Pyx_INCREF(__pyx_t_2); __pyx_t_17 = 0;
                          __pyx_t_22 = NULL;
                        } else {
                          __pyx_t_17 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_other_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5484, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_2);
                          __pyx_t_22 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5484, __pyx_L19_error)
                        }
                        for (;;) {
                          if (likely(!__pyx_t_22)) {
                            if (likely(PyList_CheckExact(__pyx_t_2))) {
                              if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_2)) break;
                              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5484, __pyx_L19_error)
                              #else
                              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5484, __pyx_L19_error)
                              __Pyx_GOTREF(__pyx_t_1);
                              #endif
                            } else {
                              if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5484, __pyx_L19_error)
                              #else
                              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5484, __pyx_L19_error)
                              __Pyx_GOTREF(__pyx_t_1);
                              #endif
                            }
                          } else {
                            __pyx_t_1 = __pyx_t_22(__pyx_t_2);
                            if (unlikely(!__pyx_t_1)) {
                              PyObject* exc_type = PyErr_Occurred();
                              if (exc_type) {
                                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                                else __PYX_ERR(0, 5484, __pyx_L19_error)
                              }
                              break;
                            }
                            __Pyx_GOTREF(__pyx_t_1);
                          }
                          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5484, __pyx_L19_error)
                          __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr103__pyx_v_ws));
                          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr103__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1));
                          __Pyx_GIVEREF(__pyx_t_1);
                          __pyx_t_1 = 0;
                          if (unlikely(__Pyx_ListComp_Append(__pyx_t_23, (PyObject*)__pyx_cur_scope->__pyx_10genexpr103__pyx_v_ws->_address))) __PYX_ERR(0, 5484, __pyx_L19_error)
                        }
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      } /* exit inner scope */
                      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_workers, __pyx_t_23) < 0) __PYX_ERR(0, 5483, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_n, __pyx_int_1) < 0) __PYX_ERR(0, 5483, __pyx_L19_error)
 5485:                             n=1,
+5486:                             delete=False,
                      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_delete, Py_False) < 0) __PYX_ERR(0, 5483, __pyx_L19_error)
+5487:                             lock=False,
                      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_lock_2, Py_False) < 0) __PYX_ERR(0, 5483, __pyx_L19_error)
 5488:                         )
 5489:                     else:
+5490:                         return {}
                    /*else*/ {
                      __Pyx_XDECREF(__pyx_r);
                      __pyx_t_23 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5490, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_23);
                      __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_23);
                      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                      goto __pyx_L23_try_return;
                    }
                    __pyx_L53:;
 5491: 
+5492:                 worker_keys = {ws._address: ws.identity() for ws in workers}
                  { /* enter inner scope */
                    __pyx_t_23 = PyDict_New(); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5492, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_workers)) {
                      __pyx_t_5 = __pyx_cur_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_5); __pyx_t_17 = 0;
                      __pyx_t_22 = NULL;
                    } else {
                      __pyx_t_17 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5492, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __pyx_t_22 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5492, __pyx_L19_error)
                    }
                    for (;;) {
                      if (likely(!__pyx_t_22)) {
                        if (likely(PyList_CheckExact(__pyx_t_5))) {
                          if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_5)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_17); __Pyx_INCREF(__pyx_t_3); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5492, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5492, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        } else {
                          if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_17); __Pyx_INCREF(__pyx_t_3); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 5492, __pyx_L19_error)
                          #else
                          __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5492, __pyx_L19_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          #endif
                        }
                      } else {
                        __pyx_t_3 = __pyx_t_22(__pyx_t_5);
                        if (unlikely(!__pyx_t_3)) {
                          PyObject* exc_type = PyErr_Occurred();
                          if (exc_type) {
                            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                            else __PYX_ERR(0, 5492, __pyx_L19_error)
                          }
                          break;
                        }
                        __Pyx_GOTREF(__pyx_t_3);
                      }
                      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5492, __pyx_L19_error)
                      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr104__pyx_v_ws));
                      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr104__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
                      __Pyx_GIVEREF(__pyx_t_3);
                      __pyx_t_3 = 0;
                      __pyx_t_3 = __pyx_f_11distributed_9scheduler_11WorkerState_identity(__pyx_cur_scope->__pyx_10genexpr104__pyx_v_ws, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5492, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      if (unlikely(PyDict_SetItem(__pyx_t_23, (PyObject*)__pyx_cur_scope->__pyx_10genexpr104__pyx_v_ws->_address, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5492, __pyx_L19_error)
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  } /* exit inner scope */
                  __Pyx_GIVEREF(__pyx_t_23);
                  __pyx_cur_scope->__pyx_v_worker_keys = ((PyObject*)__pyx_t_23);
                  __pyx_t_23 = 0;
+5493:                 if close_workers and worker_keys:
                  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_close_workers); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5493, __pyx_L19_error)
                  if (__pyx_t_9) {
                  } else {
                    __pyx_t_14 = __pyx_t_9;
                    goto __pyx_L60_bool_binop_done;
                  }
                  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_worker_keys); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5493, __pyx_L19_error)
                  __pyx_t_14 = __pyx_t_9;
                  __pyx_L60_bool_binop_done:;
                  if (__pyx_t_14) {
/* … */
                  }
+5494:                     await asyncio.gather(
                    __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5494, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_23, __pyx_n_s_gather); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5494, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    { /* enter inner scope */
/* … */
                    __pyx_t_3 = PySequence_Tuple(__pyx_t_23); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5494, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5494, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_23);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    __Pyx_XGOTREF(__pyx_r);
                    if (likely(__pyx_r)) {
                      __Pyx_XGIVEREF(__pyx_t_4);
                      __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                      __Pyx_XGIVEREF(__pyx_t_6);
                      __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                      __Pyx_XGIVEREF(__pyx_t_7);
                      __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                      __Pyx_XGIVEREF(__pyx_t_8);
                      __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                      __Pyx_XGIVEREF(__pyx_t_10);
                      __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                      __Pyx_XGIVEREF(__pyx_t_11);
                      __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                      __Pyx_XGIVEREF(__pyx_t_12);
                      __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                      __Pyx_XGIVEREF(__pyx_t_13);
                      __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                      __Pyx_XGIVEREF(__pyx_r);
                      __Pyx_RefNannyFinishContext();
                      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                      /* return from generator, awaiting value */
                      __pyx_generator->resume_label = 4;
                      return __pyx_r;
                      __pyx_L64_resume_from_await:;
                      __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                      __pyx_cur_scope->__pyx_t_0 = 0;
                      __Pyx_XGOTREF(__pyx_t_4);
                      __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                      __pyx_cur_scope->__pyx_t_1 = 0;
                      __Pyx_XGOTREF(__pyx_t_6);
                      __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                      __pyx_cur_scope->__pyx_t_2 = 0;
                      __Pyx_XGOTREF(__pyx_t_7);
                      __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                      __pyx_cur_scope->__pyx_t_3 = 0;
                      __Pyx_XGOTREF(__pyx_t_8);
                      __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                      __pyx_cur_scope->__pyx_t_4 = 0;
                      __Pyx_XGOTREF(__pyx_t_10);
                      __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                      __pyx_cur_scope->__pyx_t_5 = 0;
                      __Pyx_XGOTREF(__pyx_t_11);
                      __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                      __pyx_cur_scope->__pyx_t_6 = 0;
                      __Pyx_XGOTREF(__pyx_t_12);
                      __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                      __pyx_cur_scope->__pyx_t_7 = 0;
                      __Pyx_XGOTREF(__pyx_t_13);
                      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5494, __pyx_L19_error)
                    } else {
                      PyObject* exc_type = __Pyx_PyErr_Occurred();
                      if (exc_type) {
                        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                        else __PYX_ERR(0, 5494, __pyx_L19_error)
                      }
                    }
+5495:                         *[self.close_worker(worker=w, safe=True) for w in worker_keys]
                      __pyx_t_23 = PyList_New(0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5495, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_23);
                      __pyx_t_17 = 0;
                      __pyx_t_2 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_worker_keys, 1, ((PyObject *)NULL), (&__pyx_t_16), (&__pyx_t_15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5495, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __Pyx_XDECREF(__pyx_t_3);
                      __pyx_t_3 = __pyx_t_2;
                      __pyx_t_2 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_16, &__pyx_t_17, &__pyx_t_2, NULL, NULL, __pyx_t_15);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_2);
                        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr105__pyx_v_w);
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr105__pyx_v_w, __pyx_t_2);
                        __Pyx_GIVEREF(__pyx_t_2);
                        __pyx_t_2 = 0;
                        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_close_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_2);
                        __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_worker, __pyx_cur_scope->__pyx_10genexpr105__pyx_v_w) < 0) __PYX_ERR(0, 5495, __pyx_L19_error)
                        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_safe, Py_True) < 0) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_24);
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                        if (unlikely(__Pyx_ListComp_Append(__pyx_t_23, (PyObject*)__pyx_t_24))) __PYX_ERR(0, 5495, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    } /* exit inner scope */
 5496:                     )
+5497:                 if remove:
                  __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_remove); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 5497, __pyx_L19_error)
                  if (__pyx_t_14) {
/* … */
                  }
+5498:                     await asyncio.gather(
                    __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5498, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_23, __pyx_n_s_gather); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5498, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    { /* enter inner scope */
/* … */
                    __pyx_t_5 = PySequence_Tuple(__pyx_t_23); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5498, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5498, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_23);
                    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                    __Pyx_XGOTREF(__pyx_r);
                    if (likely(__pyx_r)) {
                      __Pyx_XGIVEREF(__pyx_t_4);
                      __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
                      __Pyx_XGIVEREF(__pyx_t_6);
                      __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                      __Pyx_XGIVEREF(__pyx_t_7);
                      __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                      __Pyx_XGIVEREF(__pyx_t_8);
                      __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
                      __Pyx_XGIVEREF(__pyx_t_10);
                      __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                      __Pyx_XGIVEREF(__pyx_t_11);
                      __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                      __Pyx_XGIVEREF(__pyx_t_12);
                      __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                      __Pyx_XGIVEREF(__pyx_t_13);
                      __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                      __Pyx_XGIVEREF(__pyx_r);
                      __Pyx_RefNannyFinishContext();
                      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                      /* return from generator, awaiting value */
                      __pyx_generator->resume_label = 5;
                      return __pyx_r;
                      __pyx_L68_resume_from_await:;
                      __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
                      __pyx_cur_scope->__pyx_t_0 = 0;
                      __Pyx_XGOTREF(__pyx_t_4);
                      __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                      __pyx_cur_scope->__pyx_t_1 = 0;
                      __Pyx_XGOTREF(__pyx_t_6);
                      __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                      __pyx_cur_scope->__pyx_t_2 = 0;
                      __Pyx_XGOTREF(__pyx_t_7);
                      __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
                      __pyx_cur_scope->__pyx_t_3 = 0;
                      __Pyx_XGOTREF(__pyx_t_8);
                      __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                      __pyx_cur_scope->__pyx_t_4 = 0;
                      __Pyx_XGOTREF(__pyx_t_10);
                      __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                      __pyx_cur_scope->__pyx_t_5 = 0;
                      __Pyx_XGOTREF(__pyx_t_11);
                      __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                      __pyx_cur_scope->__pyx_t_6 = 0;
                      __Pyx_XGOTREF(__pyx_t_12);
                      __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                      __pyx_cur_scope->__pyx_t_7 = 0;
                      __Pyx_XGOTREF(__pyx_t_13);
                      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5498, __pyx_L19_error)
                    } else {
                      PyObject* exc_type = __Pyx_PyErr_Occurred();
                      if (exc_type) {
                        if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                        else __PYX_ERR(0, 5498, __pyx_L19_error)
                      }
                    }
+5499:                         *[self.remove_worker(address=w, safe=True) for w in worker_keys]
                      __pyx_t_23 = PyList_New(0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5499, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_23);
                      __pyx_t_16 = 0;
                      __pyx_t_24 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_worker_keys, 1, ((PyObject *)NULL), (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5499, __pyx_L19_error)
                      __Pyx_GOTREF(__pyx_t_24);
                      __Pyx_XDECREF(__pyx_t_5);
                      __pyx_t_5 = __pyx_t_24;
                      __pyx_t_24 = 0;
                      while (1) {
                        __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_17, &__pyx_t_16, &__pyx_t_24, NULL, NULL, __pyx_t_15);
                        if (unlikely(__pyx_t_18 == 0)) break;
                        if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_24);
                        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr106__pyx_v_w);
                        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr106__pyx_v_w, __pyx_t_24);
                        __Pyx_GIVEREF(__pyx_t_24);
                        __pyx_t_24 = 0;
                        __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_24);
                        __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_address, __pyx_cur_scope->__pyx_10genexpr106__pyx_v_w) < 0) __PYX_ERR(0, 5499, __pyx_L19_error)
                        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_safe, Py_True) < 0) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_24, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __Pyx_GOTREF(__pyx_t_2);
                        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                        if (unlikely(__Pyx_ListComp_Append(__pyx_t_23, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 5499, __pyx_L19_error)
                        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      }
                      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    } /* exit inner scope */
 5500:                     )
 5501: 
+5502:                 self.log_event(
                  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5502, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
 5503:                     "all",
 5504:                     {
+5505:                         "action": "retire-workers",
                  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5505, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_retire_workers_2) < 0) __PYX_ERR(0, 5505, __pyx_L19_error)
+5506:                         "workers": worker_keys,
                  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_workers, __pyx_cur_scope->__pyx_v_worker_keys) < 0) __PYX_ERR(0, 5505, __pyx_L19_error)
+5507:                         "moved-keys": len(keys),
                  __pyx_t_17 = PyObject_Length(__pyx_cur_scope->__pyx_v_keys); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5507, __pyx_L19_error)
                  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_17); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5507, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_u_moved_keys_2, __pyx_t_2) < 0) __PYX_ERR(0, 5505, __pyx_L19_error)
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __pyx_t_2 = NULL;
                  __pyx_t_15 = 0;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_5, function);
                      __pyx_t_15 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_5)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_n_u_all, __pyx_t_3};
                    __pyx_t_23 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5502, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_n_u_all, __pyx_t_3};
                    __pyx_t_23 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5502, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  } else
                  #endif
                  {
                    __pyx_t_1 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5502, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    if (__pyx_t_2) {
                      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
                    }
                    __Pyx_INCREF(__pyx_n_u_all);
                    __Pyx_GIVEREF(__pyx_n_u_all);
                    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_15, __pyx_n_u_all);
                    __Pyx_GIVEREF(__pyx_t_3);
                    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_15, __pyx_t_3);
                    __pyx_t_3 = 0;
                    __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5502, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
 5508:                     },
 5509:                 )
+5510:                 self.log_event(list(worker_keys), {"action": "retired"})
                  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5510, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_worker_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5510, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5510, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_n_u_retired) < 0) __PYX_ERR(0, 5510, __pyx_L19_error)
                  __pyx_t_2 = NULL;
                  __pyx_t_15 = 0;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_5, function);
                      __pyx_t_15 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_5)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_3};
                    __pyx_t_23 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5510, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_3};
                    __pyx_t_23 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5510, __pyx_L19_error)
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  } else
                  #endif
                  {
                    __pyx_t_24 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5510, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_24);
                    if (__pyx_t_2) {
                      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_2); __pyx_t_2 = NULL;
                    }
                    __Pyx_GIVEREF(__pyx_t_1);
                    PyTuple_SET_ITEM(__pyx_t_24, 0+__pyx_t_15, __pyx_t_1);
                    __Pyx_GIVEREF(__pyx_t_3);
                    PyTuple_SET_ITEM(__pyx_t_24, 1+__pyx_t_15, __pyx_t_3);
                    __pyx_t_1 = 0;
                    __pyx_t_3 = 0;
                    __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_24, NULL); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5510, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_23);
                    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
 5511: 
+5512:                 return worker_keys
                  __Pyx_XDECREF(__pyx_r);
                  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_worker_keys);
                  goto __pyx_L23_try_return;
 5513: 
+5514:     def add_keys(self, comm=None, worker=None, keys=()):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_133add_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_132add_keys[] = "\n        Learn that a worker has certain keys\n\n        This should not be used in practice and is mostly here for legacy\n        reasons.  However, it is sent by workers from time to time.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_133add_keys = {"add_keys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_133add_keys, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_132add_keys};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_133add_keys(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_keys (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_worker,&__pyx_n_s_keys,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject*)__pyx_empty_tuple));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_keys") < 0)) __PYX_ERR(0, 5514, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_keys = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_keys", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5514, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_132add_keys(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_worker, __pyx_v_keys);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_132add_keys(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_worker, PyObject *__pyx_v_keys) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_key = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_keys", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__297 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_worker, __pyx_n_s_keys, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_key, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__297)) __PYX_ERR(0, 5514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__297);
  __Pyx_GIVEREF(__pyx_tuple__297);
  __pyx_codeobj__298 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__297, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_keys_2, 5514, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__298)) __PYX_ERR(0, 5514, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_133add_keys, 0, __pyx_n_s_Scheduler_add_keys, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__298)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__299);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_keys_2, __pyx_t_2) < 0) __PYX_ERR(0, 5514, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__299 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_empty_tuple)); if (unlikely(!__pyx_tuple__299)) __PYX_ERR(0, 5514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__299);
  __Pyx_GIVEREF(__pyx_tuple__299);
 5515:         """
 5516:         Learn that a worker has certain keys
 5517: 
 5518:         This should not be used in practice and is mostly here for legacy
 5519:         reasons.  However, it is sent by workers from time to time.
 5520:         """
+5521:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5522:         if worker not in parent._workers_dv:
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 5522, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_worker, __pyx_v_parent->_workers_dv, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5522, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5523:             return "not found"
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_kp_u_not_found);
    __pyx_r = __pyx_kp_u_not_found;
    goto __pyx_L0;
+5524:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 5524, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5524, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5525:         for key in keys:
  if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
    __pyx_t_1 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5525, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5525, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5525, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5525, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5525, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5525, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5526:             ts: TaskState = parent._tasks.get(key)
    if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 5526, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5526, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+5527:             if ts is not None and ts._state == "memory":
    __pyx_t_2 = (((PyObject *)__pyx_v_ts) != Py_None);
    __pyx_t_7 = (__pyx_t_2 != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_3 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_7 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 5527, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_7 != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L6;
    }
+5528:                 if ts not in ws._has_what:
      if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 5528, __pyx_L1_error)
      }
      __pyx_t_3 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_has_what, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5528, __pyx_L1_error)
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
/* … */
      }
+5529:                     ws._nbytes += ts.get_nbytes()
        __pyx_t_8 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5529, __pyx_L1_error)
        __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes + __pyx_t_8);
+5530:                     ws._has_what.add(ts)
        if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
          __PYX_ERR(0, 5530, __pyx_L1_error)
        }
        __pyx_t_9 = PySet_Add(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 5530, __pyx_L1_error)
+5531:                     ts._who_has.add(ws)
        if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
          __PYX_ERR(0, 5531, __pyx_L1_error)
        }
        __pyx_t_9 = PySet_Add(__pyx_v_ts->_who_has, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 5531, __pyx_L1_error)
 5532:             else:
+5533:                 self.worker_send(
    /*else*/ {
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_worker_send); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
+5534:                     worker, {"op": "delete-data", "keys": [key], "report": False}
      __pyx_t_11 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_op, __pyx_kp_u_delete_data) < 0) __PYX_ERR(0, 5534, __pyx_L1_error)
      __pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyList_SET_ITEM(__pyx_t_12, 0, __pyx_v_key);
      if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_keys, __pyx_t_12) < 0) __PYX_ERR(0, 5534, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 5534, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_worker, __pyx_t_11};
        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5533, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_worker, __pyx_t_11};
        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5533, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      {
        __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5533, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        if (__pyx_t_12) {
          __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
        }
        __Pyx_INCREF(__pyx_v_worker);
        __Pyx_GIVEREF(__pyx_v_worker);
        PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_v_worker);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_11);
        __pyx_t_11 = 0;
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_14, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5533, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __pyx_L6:;
 5535:                 )
 5536: 
+5537:         return "OK"
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_n_u_OK);
  __pyx_r = __pyx_n_u_OK;
  goto __pyx_L0;
 5538: 
+5539:     def update_data(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_135update_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_134update_data[] = "\n        Learn that new data has entered the network from an external source\n\n        See Also\n        --------\n        Scheduler.mark_key_in_memory\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_135update_data = {"update_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_135update_data, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_134update_data};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_135update_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_who_has = 0;
  PyObject *__pyx_v_nbytes = 0;
  PyObject *__pyx_v_client = 0;
  CYTHON_UNUSED PyObject *__pyx_v_serializers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_data (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_who_has,&__pyx_n_s_nbytes,&__pyx_n_s_client,&__pyx_n_s_serializers,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_134update_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_who_has, PyObject *__pyx_v_nbytes, PyObject *__pyx_v_client, CYTHON_UNUSED PyObject *__pyx_v_serializers) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_workers = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_10genexpr107__pyx_v_k = NULL;
  PyObject *__pyx_10genexpr107__pyx_v_v = NULL;
  PyObject *__pyx_10genexpr108__pyx_v_vv = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_data", 0);
  __Pyx_INCREF(__pyx_v_who_has);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_k);
  __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_v);
  __Pyx_XDECREF(__pyx_10genexpr108__pyx_v_vv);
  __Pyx_XDECREF(__pyx_v_who_has);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__300 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_who_has, __pyx_n_s_nbytes, __pyx_n_s_client, __pyx_n_s_serializers, __pyx_n_s_parent, __pyx_n_s_key, __pyx_n_s_workers, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_vv); if (unlikely(!__pyx_tuple__300)) __PYX_ERR(0, 5539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__300);
  __Pyx_GIVEREF(__pyx_tuple__300);
  __pyx_codeobj__301 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__300, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_update_data_2, 5539, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__301)) __PYX_ERR(0, 5539, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_135update_data, 0, __pyx_n_s_Scheduler_update_data, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__301)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__302);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_update_data_2, __pyx_t_2) < 0) __PYX_ERR(0, 5539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__302 = PyTuple_Pack(5, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__302)) __PYX_ERR(0, 5539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__302);
  __Pyx_GIVEREF(__pyx_tuple__302);
+5540:         self, comm=None, who_has=None, nbytes=None, client=None, serializers=None
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    values[5] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_who_has);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nbytes);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_serializers);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_data") < 0)) __PYX_ERR(0, 5539, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_who_has = values[2];
    __pyx_v_nbytes = values[3];
    __pyx_v_client = values[4];
    __pyx_v_serializers = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_data", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5539, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_134update_data(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_who_has, __pyx_v_nbytes, __pyx_v_client, __pyx_v_serializers);
 5541:     ):
 5542:         """
 5543:         Learn that new data has entered the network from an external source
 5544: 
 5545:         See Also
 5546:         --------
 5547:         Scheduler.mark_key_in_memory
 5548:         """
+5549:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5550:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5550, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5550, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.update_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 5550, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_15 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5550, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5550, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_22);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          if (__pyx_t_19 < 0) __PYX_ERR(0, 5550, __pyx_L9_except_error)
          __pyx_t_18 = ((!(__pyx_t_19 != 0)) != 0);
          if (__pyx_t_18) {
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_3, __pyx_t_1);
            __pyx_t_5 = 0; __pyx_t_3 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 5550, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L36;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L36:;
  }
+5551:             who_has = {
          { /* enter inner scope */
            __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5551, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_1);
+5552:                 k: [self.coerce_address(vv) for vv in v] for k, v in who_has.items()
            __pyx_t_9 = 0;
            if (unlikely(__pyx_v_who_has == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 5552, __pyx_L15_error)
            }
            __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_who_has, 0, __pyx_n_s_items, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5552, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_2);
            __pyx_t_2 = __pyx_t_3;
            __pyx_t_3 = 0;
            while (1) {
              __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_10, &__pyx_t_9, &__pyx_t_3, &__pyx_t_5, NULL, __pyx_t_11);
              if (unlikely(__pyx_t_12 == 0)) break;
              if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 5552, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_XDECREF_SET(__pyx_10genexpr107__pyx_v_k, __pyx_t_3);
              __pyx_t_3 = 0;
              __Pyx_XDECREF_SET(__pyx_10genexpr107__pyx_v_v, __pyx_t_5);
              __pyx_t_5 = 0;
              { /* enter inner scope */
                __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5552, __pyx_L20_error)
                __Pyx_GOTREF(__pyx_t_5);
                if (likely(PyList_CheckExact(__pyx_10genexpr107__pyx_v_v)) || PyTuple_CheckExact(__pyx_10genexpr107__pyx_v_v)) {
                  __pyx_t_3 = __pyx_10genexpr107__pyx_v_v; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0;
                  __pyx_t_14 = NULL;
                } else {
                  __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_10genexpr107__pyx_v_v); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5552, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5552, __pyx_L20_error)
                }
                for (;;) {
                  if (likely(!__pyx_t_14)) {
                    if (likely(PyList_CheckExact(__pyx_t_3))) {
                      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_15 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5552, __pyx_L20_error)
                      #else
                      __pyx_t_15 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5552, __pyx_L20_error)
                      __Pyx_GOTREF(__pyx_t_15);
                      #endif
                    } else {
                      if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5552, __pyx_L20_error)
                      #else
                      __pyx_t_15 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5552, __pyx_L20_error)
                      __Pyx_GOTREF(__pyx_t_15);
                      #endif
                    }
                  } else {
                    __pyx_t_15 = __pyx_t_14(__pyx_t_3);
                    if (unlikely(!__pyx_t_15)) {
                      PyObject* exc_type = PyErr_Occurred();
                      if (exc_type) {
                        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                        else __PYX_ERR(0, 5552, __pyx_L20_error)
                      }
                      break;
                    }
                    __Pyx_GOTREF(__pyx_t_15);
                  }
                  __Pyx_XDECREF_SET(__pyx_10genexpr108__pyx_v_vv, __pyx_t_15);
                  __pyx_t_15 = 0;
                  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5552, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_17 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
                    __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);
                    if (likely(__pyx_t_17)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                      __Pyx_INCREF(__pyx_t_17);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_16, function);
                    }
                  }
                  __pyx_t_15 = (__pyx_t_17) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_17, __pyx_10genexpr108__pyx_v_vv) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_10genexpr108__pyx_v_vv);
                  __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                  if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5552, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_15))) __PYX_ERR(0, 5552, __pyx_L20_error)
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                }
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_10genexpr108__pyx_v_vv); __pyx_10genexpr108__pyx_v_vv = 0;
                goto __pyx_L23_exit_scope;
                __pyx_L20_error:;
                __Pyx_XDECREF(__pyx_10genexpr108__pyx_v_vv); __pyx_10genexpr108__pyx_v_vv = 0;
                goto __pyx_L15_error;
                __pyx_L23_exit_scope:;
              } /* exit inner scope */
              if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr107__pyx_v_k, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 5552, __pyx_L15_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_k); __pyx_10genexpr107__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_v); __pyx_10genexpr107__pyx_v_v = 0;
            goto __pyx_L24_exit_scope;
            __pyx_L15_error:;
            __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_k); __pyx_10genexpr107__pyx_v_k = 0;
            __Pyx_XDECREF(__pyx_10genexpr107__pyx_v_v); __pyx_10genexpr107__pyx_v_v = 0;
            goto __pyx_L7_error;
            __pyx_L24_exit_scope:;
          } /* exit inner scope */
          __Pyx_DECREF_SET(__pyx_v_who_has, __pyx_t_1);
          __pyx_t_1 = 0;
 5553:             }
+5554:             logger.debug("Update data %s", who_has)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5554, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5554, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          __pyx_t_11 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
              __pyx_t_11 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Update_data_s, __pyx_v_who_has};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5554, __pyx_L7_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Update_data_s, __pyx_v_who_has};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5554, __pyx_L7_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          {
            __pyx_t_3 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5554, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_Update_data_s);
            __Pyx_GIVEREF(__pyx_kp_u_Update_data_s);
            PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_11, __pyx_kp_u_Update_data_s);
            __Pyx_INCREF(__pyx_v_who_has);
            __Pyx_GIVEREF(__pyx_v_who_has);
            PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_11, __pyx_v_who_has);
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5554, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5555: 
+5556:             for key, workers in who_has.items():
          __pyx_t_10 = 0;
          __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_who_has, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_11)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5556, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_1);
          __pyx_t_1 = __pyx_t_5;
          __pyx_t_5 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_10, &__pyx_t_5, &__pyx_t_3, NULL, __pyx_t_11);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 5556, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5);
            __pyx_t_5 = 0;
            __Pyx_XDECREF_SET(__pyx_v_workers, __pyx_t_3);
            __pyx_t_3 = 0;
+5557:                 ts: TaskState = parent._tasks.get(key)
            if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
              __PYX_ERR(0, 5557, __pyx_L7_error)
            }
            __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5557, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5557, __pyx_L7_error)
            __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
            __pyx_t_3 = 0;
+5558:                 if ts is None:
            __pyx_t_18 = (((PyObject *)__pyx_v_ts) == Py_None);
            __pyx_t_19 = (__pyx_t_18 != 0);
            if (__pyx_t_19) {
/* … */
            }
+5559:                     ts: TaskState = self.new_task(key, None, "memory")
              __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_new_task); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5559, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_2 = NULL;
              __pyx_t_12 = 0;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
                __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
                if (likely(__pyx_t_2)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                  __Pyx_INCREF(__pyx_t_2);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_5, function);
                  __pyx_t_12 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_5)) {
                PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_key, Py_None, __pyx_n_u_memory_2};
                __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5559, __pyx_L7_error)
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_GOTREF(__pyx_t_3);
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_key, Py_None, __pyx_n_u_memory_2};
                __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5559, __pyx_L7_error)
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_GOTREF(__pyx_t_3);
              } else
              #endif
              {
                __pyx_t_15 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5559, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_15);
                if (__pyx_t_2) {
                  __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2); __pyx_t_2 = NULL;
                }
                __Pyx_INCREF(__pyx_v_key);
                __Pyx_GIVEREF(__pyx_v_key);
                PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_12, __pyx_v_key);
                __Pyx_INCREF(Py_None);
                __Pyx_GIVEREF(Py_None);
                PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_12, Py_None);
                __Pyx_INCREF(__pyx_n_u_memory_2);
                __Pyx_GIVEREF(__pyx_n_u_memory_2);
                PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_12, __pyx_n_u_memory_2);
                __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5559, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              }
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5559, __pyx_L7_error)
              __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
              __pyx_t_3 = 0;
+5560:                 ts.state = "memory"
            if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_memory_2) < 0) __PYX_ERR(0, 5560, __pyx_L7_error)
+5561:                 if key in nbytes:
            __pyx_t_19 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_v_nbytes, Py_EQ)); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5561, __pyx_L7_error)
            __pyx_t_18 = (__pyx_t_19 != 0);
            if (__pyx_t_18) {
/* … */
            }
+5562:                     ts.set_nbytes(nbytes[key])
              __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_nbytes, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5562, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5562, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = __pyx_f_11distributed_9scheduler_9TaskState_set_nbytes(__pyx_v_ts, __pyx_t_13, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5562, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5563:                 for w in workers:
            if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
              __pyx_t_3 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0;
              __pyx_t_14 = NULL;
            } else {
              __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5563, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5563, __pyx_L7_error)
            }
            for (;;) {
              if (likely(!__pyx_t_14)) {
                if (likely(PyList_CheckExact(__pyx_t_3))) {
                  if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5563, __pyx_L7_error)
                  #else
                  __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5563, __pyx_L7_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  #endif
                } else {
                  if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5563, __pyx_L7_error)
                  #else
                  __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5563, __pyx_L7_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  #endif
                }
              } else {
                __pyx_t_5 = __pyx_t_14(__pyx_t_3);
                if (unlikely(!__pyx_t_5)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5563, __pyx_L7_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_5);
              }
              __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_5);
              __pyx_t_5 = 0;
/* … */
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5564:                     ws: WorkerState = parent._workers_dv[w]
              if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 5564, __pyx_L7_error)
              }
              __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_w); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5564, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5564, __pyx_L7_error)
              __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
              __pyx_t_5 = 0;
+5565:                     if ts not in ws._has_what:
              if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
                __PYX_ERR(0, 5565, __pyx_L7_error)
              }
              __pyx_t_18 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_has_what, Py_NE)); if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 5565, __pyx_L7_error)
              __pyx_t_19 = (__pyx_t_18 != 0);
              if (__pyx_t_19) {
/* … */
              }
+5566:                         ws._nbytes += ts.get_nbytes()
                __pyx_t_20 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5566, __pyx_L7_error)
                __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes + __pyx_t_20);
+5567:                         ws._has_what.add(ts)
                if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
                  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
                  __PYX_ERR(0, 5567, __pyx_L7_error)
                }
                __pyx_t_21 = PySet_Add(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 5567, __pyx_L7_error)
+5568:                         ts._who_has.add(ws)
                if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
                  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
                  __PYX_ERR(0, 5568, __pyx_L7_error)
                }
                __pyx_t_21 = PySet_Add(__pyx_v_ts->_who_has, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 5568, __pyx_L7_error)
+5569:                 self.report(
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5569, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
+5570:                     {"op": "key-in-memory", "key": key, "workers": list(workers)}
            __pyx_t_15 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5570, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_15);
            if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_op, __pyx_kp_u_key_in_memory) < 0) __PYX_ERR(0, 5570, __pyx_L7_error)
            if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_key, __pyx_v_key) < 0) __PYX_ERR(0, 5570, __pyx_L7_error)
            __pyx_t_2 = PySequence_List(__pyx_v_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5570, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_workers, __pyx_t_2) < 0) __PYX_ERR(0, 5570, __pyx_L7_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_2)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_2);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_15);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5569, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5571:                 )
 5572: 
+5573:             if client:
          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_v_client); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5573, __pyx_L7_error)
          if (__pyx_t_19) {
/* … */
          }
+5574:                 self.client_desires_keys(keys=list(who_has), client=client)
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_client_desires_keys_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5574, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5574, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = PySequence_List(__pyx_v_who_has); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5574, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_keys, __pyx_t_5) < 0) __PYX_ERR(0, 5574, __pyx_L7_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 5574, __pyx_L7_error)
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5574, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5575: 
+5576:     def report_on_key(self, key: str = None, ts: TaskState = None, client: str = None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_137report_on_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_137report_on_key = {"report_on_key", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_137report_on_key, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_137report_on_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_client = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("report_on_key (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_ts,&__pyx_n_s_client,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject*)((PyObject *)Py_None));
    values[2] = (PyObject *)((struct __pyx_obj_11distributed_9scheduler_TaskState *)((PyObject *)Py_None));
    values[3] = ((PyObject*)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ts);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_client);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "report_on_key") < 0)) __PYX_ERR(0, 5576, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = ((PyObject*)values[1]);
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)values[2]);
    __pyx_v_client = ((PyObject*)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("report_on_key", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5576, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.report_on_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_key), (&PyUnicode_Type), 1, "key", 1))) __PYX_ERR(0, 5576, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 5576, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_client), (&PyUnicode_Type), 1, "client", 1))) __PYX_ERR(0, 5576, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_136report_on_key(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_ts, __pyx_v_client);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_136report_on_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, PyObject *__pyx_v_client) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_tasks = 0;
  PyObject *__pyx_v_report_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("report_on_key", 0);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_INCREF((PyObject *)__pyx_v_ts);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.report_on_key", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_tasks);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_140generator17(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__303 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_ts, __pyx_n_s_client, __pyx_n_s_parent, __pyx_n_s_tasks, __pyx_n_s_report_msg); if (unlikely(!__pyx_tuple__303)) __PYX_ERR(0, 5576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__303);
  __Pyx_GIVEREF(__pyx_tuple__303);
  __pyx_codeobj__304 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__303, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_report_on_key, 5576, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__304)) __PYX_ERR(0, 5576, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_key, __pyx_n_u_unicode) < 0) __PYX_ERR(0, 5576, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ts, __pyx_n_u_TaskState) < 0) __PYX_ERR(0, 5576, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_client, __pyx_n_u_unicode) < 0) __PYX_ERR(0, 5576, __pyx_L1_error)
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_137report_on_key, 0, __pyx_n_s_Scheduler_report_on_key, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__304)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__305);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_12, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_report_on_key, __pyx_t_12) < 0) __PYX_ERR(0, 5576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__305 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__305)) __PYX_ERR(0, 5576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__305);
  __Pyx_GIVEREF(__pyx_tuple__305);
+5577:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5578:         if ts is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+5579:             tasks: dict = parent._tasks
    __pyx_t_1 = __pyx_v_parent->_tasks;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_tasks = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+5580:             ts = tasks.get(key)
    if (unlikely(__pyx_v_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 5580, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5580, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
    __pyx_t_1 = 0;
+5581:         elif key is None:
  __pyx_t_3 = (__pyx_v_key == ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+5582:             key = ts._key
    __pyx_t_1 = __pyx_v_ts->_key;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
 5583:         else:
+5584:             assert False, (key, ts)
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5584, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key);
        __Pyx_INCREF(((PyObject *)__pyx_v_ts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
        PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_ts));
        __pyx_t_4 = PyTuple_Pack(1, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5584, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(0, 5584, __pyx_L1_error)
      }
    }
    #endif
+5585:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }
  __pyx_L3:;
 5586: 
+5587:         report_msg: dict = _task_to_report_msg(parent, ts)
  __pyx_t_4 = __pyx_f_11distributed_9scheduler__task_to_report_msg(__pyx_v_parent, __pyx_v_ts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_report_msg = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+5588:         if report_msg is not None:
  __pyx_t_2 = (__pyx_v_report_msg != ((PyObject*)Py_None));
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5589:             self.report(report_msg, ts=ts, client=client)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_report); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_report_msg);
    __Pyx_GIVEREF(__pyx_v_report_msg);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_report_msg);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_ts, ((PyObject *)__pyx_v_ts)) < 0) __PYX_ERR(0, 5589, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_client, __pyx_v_client) < 0) __PYX_ERR(0, 5589, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 5590: 
+5591:     async def feed(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_139feed(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_138feed[] = "\n        Provides a data Comm to external requester\n\n        Caution: this runs arbitrary Python code on the scheduler.  This should\n        eventually be phased out.  It is mostly used by diagnostics.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_139feed = {"feed", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_139feed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_138feed};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_139feed(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_function = 0;
  PyObject *__pyx_v_setup = 0;
  PyObject *__pyx_v_teardown = 0;
  PyObject *__pyx_v_interval = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("feed (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_function,&__pyx_n_s_setup,&__pyx_n_s_teardown,&__pyx_n_s_interval,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_138feed(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm, PyObject *__pyx_v_function, PyObject *__pyx_v_setup, PyObject *__pyx_v_teardown, PyObject *__pyx_v_interval, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_44_feed *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("feed", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_44_feed *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_44_feed(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_44_feed, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_44_feed *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5591, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_function = __pyx_v_function;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_function);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_function);
  __pyx_cur_scope->__pyx_v_setup = __pyx_v_setup;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_setup);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_setup);
  __pyx_cur_scope->__pyx_v_teardown = __pyx_v_teardown;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_teardown);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_teardown);
  __pyx_cur_scope->__pyx_v_interval = __pyx_v_interval;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_interval);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_interval);
  __pyx_cur_scope->__pyx_v_kwargs = __pyx_v_kwargs;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_kwargs);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_kwargs);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_140generator17, __pyx_codeobj__81, (PyObject *) __pyx_cur_scope, __pyx_n_s_feed, __pyx_n_s_Scheduler_feed, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5591, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.feed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_140generator17(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("feed", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5591, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("feed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__306 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_function, __pyx_n_s_setup, __pyx_n_s_teardown, __pyx_n_s_interval, __pyx_n_s_kwargs, __pyx_n_s_state, __pyx_n_s_response); if (unlikely(!__pyx_tuple__306)) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__306);
  __Pyx_GIVEREF(__pyx_tuple__306);
  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(6, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__306, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_feed, 5591, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(0, 5591, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_139feed, 0, __pyx_n_s_Scheduler_feed, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__307);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_feed, __pyx_t_12) < 0) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__307 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_kp_u_1s)); if (unlikely(!__pyx_tuple__307)) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__307);
  __Pyx_GIVEREF(__pyx_tuple__307);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_44_feed {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_function;
  PyObject *__pyx_v_interval;
  PyObject *__pyx_v_kwargs;
  PyObject *__pyx_v_response;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_setup;
  PyObject *__pyx_v_state;
  PyObject *__pyx_v_teardown;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
};

+5592:         self, comm, function=None, setup=None, teardown=None, interval="1s", **kwargs
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    values[5] = ((PyObject *)((PyObject*)__pyx_kp_u_1s));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("feed", 0, 2, 6, 1); __PYX_ERR(0, 5591, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_function);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_setup);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_teardown);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "feed") < 0)) __PYX_ERR(0, 5591, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_function = values[2];
    __pyx_v_setup = values[3];
    __pyx_v_teardown = values[4];
    __pyx_v_interval = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("feed", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5591, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_CLEAR(__pyx_v_kwargs);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.feed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_138feed(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_function, __pyx_v_setup, __pyx_v_teardown, __pyx_v_interval, __pyx_v_kwargs);
 5593:     ):
 5594:         """
 5595:         Provides a data Comm to external requester
 5596: 
 5597:         Caution: this runs arbitrary Python code on the scheduler.  This should
 5598:         eventually be phased out.  It is mostly used by diagnostics.
 5599:         """
+5600:         if not dask.config.get("distributed.scheduler.pickle"):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dask); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_distributed_scheduler_pickle) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_distributed_scheduler_pickle);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5600, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = ((!__pyx_t_4) != 0);
  if (__pyx_t_5) {
/* … */
  }
+5601:             logger.warn(
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Tried_to_call_feed_route_with_cu) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Tried_to_call_feed_route_with_cu);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5602:                 "Tried to call 'feed' route with custom functions, but "
 5603:                 "pickle is disallowed.  Set the 'distributed.scheduler.pickle'"
 5604:                 "config value to True to use the 'feed' route (this is mostly "
 5605:                 "commonly used with progress bars)"
 5606:             )
+5607:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = NULL;
    goto __pyx_L0;
 5608: 
+5609:         interval = parse_timedelta(interval)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_interval) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_interval);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_interval);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_interval, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+5610:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5610, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5610, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.feed", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 5610, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5610, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5610, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (__pyx_t_4 < 0) __PYX_ERR(0, 5610, __pyx_L11_except_error)
          __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_7);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_7, __pyx_t_3);
            __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_3 = 0; 
            __PYX_ERR(0, 5610, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_6) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
    goto __pyx_L41;
    __pyx_L5_error:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L1_error;
    __pyx_L41:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+5611:             if function:
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_function); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5611, __pyx_L9_error)
          if (__pyx_t_5) {
/* … */
          }
+5612:                 function = pickle.loads(function)
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5612, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_loads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5612, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_function) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_function);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5612, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_function);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_function, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
+5613:             if setup:
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_setup); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5613, __pyx_L9_error)
          if (__pyx_t_5) {
/* … */
          }
+5614:                 setup = pickle.loads(setup)
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pickle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5614, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_loads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5614, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_2)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_2);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_setup) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_setup);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5614, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_setup);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_setup, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
+5615:             if teardown:
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_teardown); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5615, __pyx_L9_error)
          if (__pyx_t_5) {
/* … */
          }
+5616:                 teardown = pickle.loads(teardown)
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5616, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_loads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5616, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_3)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_3);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_teardown) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_teardown);
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5616, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_teardown);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_teardown, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
+5617:             state = setup(self) if setup else None
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_setup); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5617, __pyx_L9_error)
          if (__pyx_t_5) {
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_setup);
            __pyx_t_3 = __pyx_cur_scope->__pyx_v_setup; __pyx_t_7 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_7)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_7);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_cur_scope->__pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_self);
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5617, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_1 = __pyx_t_2;
            __pyx_t_2 = 0;
          } else {
            __Pyx_INCREF(Py_None);
            __pyx_t_1 = Py_None;
          }
          __Pyx_GIVEREF(__pyx_t_1);
          __pyx_cur_scope->__pyx_v_state = __pyx_t_1;
          __pyx_t_1 = 0;
+5618:             if inspect.isawaitable(state):
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_inspect); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5618, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isawaitable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5618, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_state) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_state);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5618, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5618, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (__pyx_t_5) {
/* … */
          }
+5619:                 state = await state
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_cur_scope->__pyx_v_state);
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_6);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_6;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
              __Pyx_XGIVEREF(__pyx_t_10);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_10;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 1;
              return __pyx_r;
              __pyx_L19_resume_from_await:;
              __pyx_t_6 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_6);
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              __pyx_t_10 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_10);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5619, __pyx_L9_error)
              __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
            } else {
              __pyx_t_1 = NULL;
              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 5619, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_state);
            __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_state, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
+5620:             try:
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              goto __pyx_L28_try_end;
              __pyx_L23_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_XGIVEREF(__pyx_t_13);
              __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
              goto __pyx_L21_error;
              __pyx_L24_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_XGIVEREF(__pyx_t_13);
              __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
              __pyx_L28_try_end:;
            }
          }
+5621:                 while self.status == Status.running:
                while (1) {
                  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5621, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5621, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_running); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5621, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5621, __pyx_L23_error)
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5621, __pyx_L23_error)
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  if (!__pyx_t_5) break;
+5622:                     if state is None:
                  __pyx_t_5 = (__pyx_cur_scope->__pyx_v_state == Py_None);
                  __pyx_t_4 = (__pyx_t_5 != 0);
                  if (__pyx_t_4) {
/* … */
                    goto __pyx_L31;
                  }
+5623:                         response = function(self)
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_function);
                    __pyx_t_2 = __pyx_cur_scope->__pyx_v_function; __pyx_t_1 = NULL;
                    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
                      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
                      if (likely(__pyx_t_1)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                        __Pyx_INCREF(__pyx_t_1);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_2, function);
                      }
                    }
                    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_cur_scope->__pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_self);
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5623, __pyx_L23_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __pyx_t_3 = 0;
 5624:                     else:
+5625:                         response = function(self, state)
                  /*else*/ {
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_function);
                    __pyx_t_2 = __pyx_cur_scope->__pyx_v_function; __pyx_t_1 = NULL;
                    __pyx_t_14 = 0;
                    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
                      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
                      if (likely(__pyx_t_1)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                        __Pyx_INCREF(__pyx_t_1);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_2, function);
                        __pyx_t_14 = 1;
                      }
                    }
                    #if CYTHON_FAST_PYCALL
                    if (PyFunction_Check(__pyx_t_2)) {
                      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5625, __pyx_L23_error)
                      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __Pyx_GOTREF(__pyx_t_3);
                    } else
                    #endif
                    #if CYTHON_FAST_PYCCALL
                    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
                      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5625, __pyx_L23_error)
                      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __Pyx_GOTREF(__pyx_t_3);
                    } else
                    #endif
                    {
                      __pyx_t_7 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5625, __pyx_L23_error)
                      __Pyx_GOTREF(__pyx_t_7);
                      if (__pyx_t_1) {
                        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL;
                      }
                      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
                      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
                      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_14, __pyx_cur_scope->__pyx_v_self);
                      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
                      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
                      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_14, __pyx_cur_scope->__pyx_v_state);
                      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5625, __pyx_L23_error)
                      __Pyx_GOTREF(__pyx_t_3);
                      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                    }
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
                    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_3);
                    __Pyx_GIVEREF(__pyx_t_3);
                    __pyx_t_3 = 0;
                  }
                  __pyx_L31:;
+5626:                     await comm.write(response)
                  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_comm, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5626, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_7 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
                    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
                    if (likely(__pyx_t_7)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                      __Pyx_INCREF(__pyx_t_7);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_2, function);
                    }
                  }
                  __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_cur_scope->__pyx_v_response) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_response);
                  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5626, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_13);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_13;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 2;
                    return __pyx_r;
                    __pyx_L32_resume_from_await:;
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_13);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5626, __pyx_L23_error)
                  } else {
                    PyObject* exc_type = __Pyx_PyErr_Occurred();
                    if (exc_type) {
                      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                      else __PYX_ERR(0, 5626, __pyx_L23_error)
                    }
                  }
+5627:                     await asyncio.sleep(interval)
                  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5627, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sleep); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5627, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_7);
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __pyx_t_2 = NULL;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_7, function);
                    }
                  }
                  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_2, __pyx_cur_scope->__pyx_v_interval) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_cur_scope->__pyx_v_interval);
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5627, __pyx_L23_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_XGOTREF(__pyx_r);
                  if (likely(__pyx_r)) {
                    __Pyx_XGIVEREF(__pyx_t_6);
                    __pyx_cur_scope->__pyx_t_0 = __pyx_t_6;
                    __Pyx_XGIVEREF(__pyx_t_8);
                    __pyx_cur_scope->__pyx_t_1 = __pyx_t_8;
                    __Pyx_XGIVEREF(__pyx_t_9);
                    __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
                    __Pyx_XGIVEREF(__pyx_t_10);
                    __pyx_cur_scope->__pyx_t_3 = __pyx_t_10;
                    __Pyx_XGIVEREF(__pyx_t_11);
                    __pyx_cur_scope->__pyx_t_4 = __pyx_t_11;
                    __Pyx_XGIVEREF(__pyx_t_12);
                    __pyx_cur_scope->__pyx_t_5 = __pyx_t_12;
                    __Pyx_XGIVEREF(__pyx_t_13);
                    __pyx_cur_scope->__pyx_t_6 = __pyx_t_13;
                    __Pyx_XGIVEREF(__pyx_r);
                    __Pyx_RefNannyFinishContext();
                    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                    /* return from generator, awaiting value */
                    __pyx_generator->resume_label = 3;
                    return __pyx_r;
                    __pyx_L33_resume_from_await:;
                    __pyx_t_6 = __pyx_cur_scope->__pyx_t_0;
                    __pyx_cur_scope->__pyx_t_0 = 0;
                    __Pyx_XGOTREF(__pyx_t_6);
                    __pyx_t_8 = __pyx_cur_scope->__pyx_t_1;
                    __pyx_cur_scope->__pyx_t_1 = 0;
                    __Pyx_XGOTREF(__pyx_t_8);
                    __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
                    __pyx_cur_scope->__pyx_t_2 = 0;
                    __Pyx_XGOTREF(__pyx_t_9);
                    __pyx_t_10 = __pyx_cur_scope->__pyx_t_3;
                    __pyx_cur_scope->__pyx_t_3 = 0;
                    __Pyx_XGOTREF(__pyx_t_10);
                    __pyx_t_11 = __pyx_cur_scope->__pyx_t_4;
                    __pyx_cur_scope->__pyx_t_4 = 0;
                    __Pyx_XGOTREF(__pyx_t_11);
                    __pyx_t_12 = __pyx_cur_scope->__pyx_t_5;
                    __pyx_cur_scope->__pyx_t_5 = 0;
                    __Pyx_XGOTREF(__pyx_t_12);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_t_6;
                    __pyx_cur_scope->__pyx_t_6 = 0;
                    __Pyx_XGOTREF(__pyx_t_13);
                    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5627, __pyx_L23_error)
                  } else {
                    PyObject* exc_type = __Pyx_PyErr_Occurred();
                    if (exc_type) {
                      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
                      else __PYX_ERR(0, 5627, __pyx_L23_error)
                    }
                  }
                }
+5628:             except (EnvironmentError, CommClosedError):
              __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_7, &__pyx_t_2);
              __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5628, __pyx_L25_except_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_14 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_builtin_EnvironmentError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_1);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_ErrRestore(__pyx_t_3, __pyx_t_7, __pyx_t_2);
              __pyx_t_3 = 0; __pyx_t_7 = 0; __pyx_t_2 = 0;
              if (__pyx_t_14) {
                __Pyx_ErrRestore(0,0,0);
                goto __pyx_L24_exception_handled;
              }
              goto __pyx_L25_except_error;
              __pyx_L25_except_error:;
 5629:                 pass
 5630:             finally:
+5631:                 if teardown:
          /*finally:*/ {
            /*normal exit:*/{
              __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_teardown); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5631, __pyx_L9_error)
              if (__pyx_t_4) {
/* … */
              }
              goto __pyx_L22;
            }
            __pyx_L21_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_assign
              __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
              if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_13);
              __Pyx_XGOTREF(__pyx_t_12);
              __Pyx_XGOTREF(__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_19);
              __pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
              {
                __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_teardown); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5631, __pyx_L36_error)
                if (__pyx_t_4) {
/* … */
                }
              }
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_17);
                __Pyx_XGIVEREF(__pyx_t_18);
                __Pyx_XGIVEREF(__pyx_t_19);
                __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              }
              __Pyx_XGIVEREF(__pyx_t_13);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
              __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
              __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
              goto __pyx_L9_error;
              __pyx_L36_error:;
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_17);
                __Pyx_XGIVEREF(__pyx_t_18);
                __Pyx_XGIVEREF(__pyx_t_19);
                __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              }
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
              goto __pyx_L9_error;
            }
            __pyx_L22:;
          }
+5632:                     teardown(self, state)
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_teardown);
                __pyx_t_7 = __pyx_cur_scope->__pyx_v_teardown; __pyx_t_3 = NULL;
                __pyx_t_14 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
                  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
                  if (likely(__pyx_t_3)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                    __Pyx_INCREF(__pyx_t_3);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_7, function);
                    __pyx_t_14 = 1;
                  }
                }
                #if CYTHON_FAST_PYCALL
                if (PyFunction_Check(__pyx_t_7)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                  __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GOTREF(__pyx_t_2);
                } else
                #endif
                #if CYTHON_FAST_PYCCALL
                if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
                  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                  __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L9_error)
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __Pyx_GOTREF(__pyx_t_2);
                } else
                #endif
                {
                  __pyx_t_1 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5632, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  if (__pyx_t_3) {
                    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
                  }
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
                  PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_14, __pyx_cur_scope->__pyx_v_self);
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
                  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
                  PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_14, __pyx_cur_scope->__pyx_v_state);
                  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                }
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
                  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_teardown);
                  __pyx_t_7 = __pyx_cur_scope->__pyx_v_teardown; __pyx_t_1 = NULL;
                  __pyx_t_20 = 0;
                  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
                    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
                    if (likely(__pyx_t_1)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                      __Pyx_INCREF(__pyx_t_1);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_7, function);
                      __pyx_t_20 = 1;
                    }
                  }
                  #if CYTHON_FAST_PYCALL
                  if (PyFunction_Check(__pyx_t_7)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_20, 2+__pyx_t_20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L36_error)
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_GOTREF(__pyx_t_2);
                  } else
                  #endif
                  #if CYTHON_FAST_PYCCALL
                  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
                    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_state};
                    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_20, 2+__pyx_t_20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L36_error)
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_GOTREF(__pyx_t_2);
                  } else
                  #endif
                  {
                    __pyx_t_3 = PyTuple_New(2+__pyx_t_20); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5632, __pyx_L36_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    if (__pyx_t_1) {
                      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
                    }
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
                    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_20, __pyx_cur_scope->__pyx_v_self);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
                    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_20, __pyx_cur_scope->__pyx_v_state);
                    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5632, __pyx_L36_error)
                    __Pyx_GOTREF(__pyx_t_2);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  }
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5633: 
+5634:     def log_worker_event(self, worker=None, topic=None, msg=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_142log_worker_event(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_142log_worker_event = {"log_worker_event", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_142log_worker_event, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_142log_worker_event(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_topic = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("log_worker_event (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,&__pyx_n_s_topic,&__pyx_n_s_msg,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_topic);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "log_worker_event") < 0)) __PYX_ERR(0, 5634, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
    __pyx_v_topic = values[2];
    __pyx_v_msg = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("log_worker_event", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5634, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.log_worker_event", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_141log_worker_event(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_topic, __pyx_v_msg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_141log_worker_event(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_worker, PyObject *__pyx_v_topic, PyObject *__pyx_v_msg) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("log_worker_event", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.log_worker_event", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__308 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_topic, __pyx_n_s_msg); if (unlikely(!__pyx_tuple__308)) __PYX_ERR(0, 5634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__308);
  __Pyx_GIVEREF(__pyx_tuple__308);
  __pyx_codeobj__309 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__308, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_log_worker_event, 5634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__309)) __PYX_ERR(0, 5634, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_142log_worker_event, 0, __pyx_n_s_Scheduler_log_worker_event, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__309)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__310);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_log_worker_event, __pyx_t_12) < 0) __PYX_ERR(0, 5634, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__310 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__310)) __PYX_ERR(0, 5634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__310);
  __Pyx_GIVEREF(__pyx_tuple__310);
+5635:         self.log_event(topic, msg)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_topic, __pyx_v_msg};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5635, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_topic, __pyx_v_msg};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5635, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_topic);
    __Pyx_GIVEREF(__pyx_v_topic);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_topic);
    __Pyx_INCREF(__pyx_v_msg);
    __Pyx_GIVEREF(__pyx_v_msg);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_msg);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5636: 
+5637:     def subscribe_worker_status(self, comm=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_144subscribe_worker_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_144subscribe_worker_status = {"subscribe_worker_status", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_144subscribe_worker_status, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_144subscribe_worker_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subscribe_worker_status (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "subscribe_worker_status") < 0)) __PYX_ERR(0, 5637, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("subscribe_worker_status", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5637, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.subscribe_worker_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_143subscribe_worker_status(__pyx_self, __pyx_v_self, __pyx_v_comm);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_143subscribe_worker_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_comm) {
  PyObject *__pyx_v_ident = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subscribe_worker_status", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.subscribe_worker_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ident);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__311 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_ident, __pyx_n_s_v); if (unlikely(!__pyx_tuple__311)) __PYX_ERR(0, 5637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__311);
  __Pyx_GIVEREF(__pyx_tuple__311);
  __pyx_codeobj__312 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_subscribe_worker_status, 5637, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__312)) __PYX_ERR(0, 5637, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_144subscribe_worker_status, 0, __pyx_n_s_Scheduler_subscribe_worker_statu, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__312)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__313);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_subscribe_worker_status, __pyx_t_12) < 0) __PYX_ERR(0, 5637, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__313 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__313)) __PYX_ERR(0, 5637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__313);
  __Pyx_GIVEREF(__pyx_tuple__313);
+5638:         WorkerStatusPlugin(self, comm)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_WorkerStatusPlugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self, __pyx_v_comm};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5638, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self, __pyx_v_comm};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5638, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self);
    __Pyx_INCREF(__pyx_v_comm);
    __Pyx_GIVEREF(__pyx_v_comm);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_comm);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5639:         ident = self.identity()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_identity); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ident = __pyx_t_1;
  __pyx_t_1 = 0;
+5640:         for v in ident["workers"].values():
  __pyx_t_6 = 0;
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_ident, __pyx_n_u_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 5640, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_t_2, 0, __pyx_n_s_values, (&__pyx_t_7), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_7, &__pyx_t_6, NULL, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_8 == 0)) break;
    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 5640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_5);
    __pyx_t_5 = 0;
+5641:             del v["metrics"]
    if (unlikely(PyObject_DelItem(__pyx_v_v, __pyx_n_u_metrics) < 0)) __PYX_ERR(0, 5641, __pyx_L1_error)
+5642:             del v["last_seen"]
    if (unlikely(PyObject_DelItem(__pyx_v_v, __pyx_n_u_last_seen) < 0)) __PYX_ERR(0, 5642, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5643:         return ident
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ident);
  __pyx_r = __pyx_v_ident;
  goto __pyx_L0;
 5644: 
+5645:     def get_processing(self, comm=None, workers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_146get_processing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_146get_processing = {"get_processing", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_146get_processing, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_146get_processing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_processing (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_processing") < 0)) __PYX_ERR(0, 5645, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_processing", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5645, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_145get_processing(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_145get_processing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_10genexpr109__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr110__pyx_v_ts = NULL;
  PyObject *__pyx_10genexpr111__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr111__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr112__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_processing", 0);
  __Pyx_INCREF(__pyx_v_workers);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_10genexpr109__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr110__pyx_v_ts);
  __Pyx_XDECREF(__pyx_10genexpr111__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr111__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr112__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__314 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__314)) __PYX_ERR(0, 5645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__314);
  __Pyx_GIVEREF(__pyx_tuple__314);
  __pyx_codeobj__315 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__314, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_processing, 5645, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__315)) __PYX_ERR(0, 5645, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_146get_processing, 0, __pyx_n_s_Scheduler_get_processing, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__315)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__316);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_processing, __pyx_t_12) < 0) __PYX_ERR(0, 5645, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__316 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__316)) __PYX_ERR(0, 5645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__316);
  __Pyx_GIVEREF(__pyx_tuple__316);
+5646:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5647:         ws: WorkerState
 5648:         ts: TaskState
+5649:         if workers is not None:
  __pyx_t_2 = (__pyx_v_workers != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5650:             workers = set(map(self.coerce_address, workers))
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_v_workers);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_workers);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PySet_New(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_workers, __pyx_t_4);
    __pyx_t_4 = 0;
+5651:             return {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5651, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_4);
+5652:                 w: [ts._key for ts in parent._workers_dv[w].processing] for w in workers
      if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
        __pyx_t_1 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5652, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5652, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_1))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5652, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5652, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5652, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5652, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_1);
          if (unlikely(!__pyx_t_7)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5652, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_XDECREF_SET(__pyx_10genexpr109__pyx_v_w, __pyx_t_7);
        __pyx_t_7 = 0;
        { /* enter inner scope */
          __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5652, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 5652, __pyx_L11_error)
          }
          __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_10genexpr109__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5652, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_processing_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5652, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) {
            __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_10 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5652, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_11 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5652, __pyx_L11_error)
          }
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_8))) {
                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_8)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5652, __pyx_L11_error)
                #else
                __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5652, __pyx_L11_error)
                __Pyx_GOTREF(__pyx_t_9);
                #endif
              } else {
                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 5652, __pyx_L11_error)
                #else
                __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5652, __pyx_L11_error)
                __Pyx_GOTREF(__pyx_t_9);
                #endif
              }
            } else {
              __pyx_t_9 = __pyx_t_11(__pyx_t_8);
              if (unlikely(!__pyx_t_9)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 5652, __pyx_L11_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_9);
            }
            if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5652, __pyx_L11_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr110__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
            __pyx_t_9 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_10genexpr110__pyx_v_ts->_key))) __PYX_ERR(0, 5652, __pyx_L11_error)
          }
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr110__pyx_v_ts); __pyx_10genexpr110__pyx_v_ts = 0;
          goto __pyx_L14_exit_scope;
          __pyx_L11_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr110__pyx_v_ts); __pyx_10genexpr110__pyx_v_ts = 0;
          goto __pyx_L6_error;
          __pyx_L14_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_10genexpr109__pyx_v_w, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 5652, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_10genexpr109__pyx_v_w); __pyx_10genexpr109__pyx_v_w = 0;
      goto __pyx_L15_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_10genexpr109__pyx_v_w); __pyx_10genexpr109__pyx_v_w = 0;
      goto __pyx_L1_error;
      __pyx_L15_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
 5653:             }
 5654:         else:
+5655:             return {
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5655, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_4);
+5656:                 w: [ts._key for ts in ws._processing]
        { /* enter inner scope */
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5656, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_14 = 0;
          if (unlikely(__pyx_10genexpr111__pyx_v_ws->_processing == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 5656, __pyx_L23_error)
          }
          __pyx_t_9 = __Pyx_dict_iterator(__pyx_10genexpr111__pyx_v_ws->_processing, 1, ((PyObject *)NULL), (&__pyx_t_15), (&__pyx_t_13)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5656, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_7);
          __pyx_t_7 = __pyx_t_9;
          __pyx_t_9 = 0;
          while (1) {
            __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_15, &__pyx_t_14, &__pyx_t_9, NULL, NULL, __pyx_t_13);
            if (unlikely(__pyx_t_16 == 0)) break;
            if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 5656, __pyx_L23_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5656, __pyx_L23_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr112__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
            __pyx_t_9 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_10genexpr112__pyx_v_ts->_key))) __PYX_ERR(0, 5656, __pyx_L23_error)
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr112__pyx_v_ts); __pyx_10genexpr112__pyx_v_ts = 0;
          goto __pyx_L26_exit_scope;
          __pyx_L23_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr112__pyx_v_ts); __pyx_10genexpr112__pyx_v_ts = 0;
          goto __pyx_L18_error;
          __pyx_L26_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_10genexpr111__pyx_v_w, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 5656, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_10genexpr111__pyx_v_w); __pyx_10genexpr111__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr111__pyx_v_ws); __pyx_10genexpr111__pyx_v_ws = 0;
      goto __pyx_L27_exit_scope;
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_10genexpr111__pyx_v_w); __pyx_10genexpr111__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr111__pyx_v_ws); __pyx_10genexpr111__pyx_v_ws = 0;
      goto __pyx_L1_error;
      __pyx_L27_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
+5657:                 for w, ws in parent._workers_dv.items()
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 5657, __pyx_L18_error)
      }
      __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_10), (&__pyx_t_12)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5657, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_5, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 5657, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5657, __pyx_L18_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr111__pyx_v_w, __pyx_t_7);
        __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_10genexpr111__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_8));
        __pyx_t_8 = 0;
 5658:             }
 5659: 
+5660:     def get_who_has(self, comm=None, keys=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_148get_who_has(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_148get_who_has = {"get_who_has", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_148get_who_has, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_148get_who_has(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_who_has (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_who_has") < 0)) __PYX_ERR(0, 5660, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_who_has", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5660, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_who_has", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_147get_who_has(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_147get_who_has(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_10genexpr113__pyx_v_k = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr114__pyx_v_ws = NULL;
  PyObject *__pyx_10genexpr115__pyx_v_key = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr115__pyx_v_ts = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr116__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_who_has", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_who_has", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_10genexpr113__pyx_v_k);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr114__pyx_v_ws);
  __Pyx_XDECREF(__pyx_10genexpr115__pyx_v_key);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr115__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr116__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__317 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ts, __pyx_n_s_k, __pyx_n_s_ws, __pyx_n_s_key, __pyx_n_s_ts, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__317)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__317);
  __Pyx_GIVEREF(__pyx_tuple__317);
  __pyx_codeobj__318 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__317, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_who_has, 5660, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__318)) __PYX_ERR(0, 5660, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_148get_who_has, 0, __pyx_n_s_Scheduler_get_who_has, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__318)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__319);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_who_has, __pyx_t_12) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__319 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__319)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__319);
  __Pyx_GIVEREF(__pyx_tuple__319);
+5661:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5662:         ws: WorkerState
 5663:         ts: TaskState
+5664:         if keys is not None:
  __pyx_t_2 = (__pyx_v_keys != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5665:             return {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5665, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
+5666:                 k: [ws._address for ws in parent._tasks[k].who_has]
            __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5666, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 5666, __pyx_L11_error)
            }
            __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_10genexpr113__pyx_v_k); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5666, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_who_has); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5666, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) {
              __pyx_t_9 = __pyx_t_10; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
              __pyx_t_12 = NULL;
            } else {
              __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5666, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5666, __pyx_L11_error)
            }
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            for (;;) {
              if (likely(!__pyx_t_12)) {
                if (likely(PyList_CheckExact(__pyx_t_9))) {
                  if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_10 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5666, __pyx_L11_error)
                  #else
                  __pyx_t_10 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5666, __pyx_L11_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  #endif
                } else {
                  if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5666, __pyx_L11_error)
                  #else
                  __pyx_t_10 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5666, __pyx_L11_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  #endif
                }
              } else {
                __pyx_t_10 = __pyx_t_12(__pyx_t_9);
                if (unlikely(!__pyx_t_10)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5666, __pyx_L11_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_10);
              }
              if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5666, __pyx_L11_error)
              __Pyx_XDECREF_SET(__pyx_10genexpr114__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_10));
              __pyx_t_10 = 0;
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_10genexpr114__pyx_v_ws->_address))) __PYX_ERR(0, 5666, __pyx_L11_error)
            }
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_XDECREF((PyObject *)__pyx_10genexpr114__pyx_v_ws); __pyx_10genexpr114__pyx_v_ws = 0;
            goto __pyx_L14_exit_scope;
            __pyx_L11_error:;
            __Pyx_XDECREF((PyObject *)__pyx_10genexpr114__pyx_v_ws); __pyx_10genexpr114__pyx_v_ws = 0;
            goto __pyx_L6_error;
            __pyx_L14_exit_scope:;
          } /* exit inner scope */
          __pyx_t_7 = __pyx_t_8;
          __pyx_t_8 = 0;
        } else {
+5667:                 if k in parent._tasks
        if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 5667, __pyx_L6_error)
        }
        __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_10genexpr113__pyx_v_k, __pyx_v_parent->_tasks, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5667, __pyx_L6_error)
        if ((__pyx_t_3 != 0)) {
          { /* enter inner scope */
+5668:                 else []
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5668, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_7 = __pyx_t_8;
          __pyx_t_8 = 0;
        }
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr113__pyx_v_k, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 5666, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5669:                 for k in keys
      if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
        __pyx_t_4 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5669, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5669, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5669, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5669, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5669, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5669, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_4);
          if (unlikely(!__pyx_t_7)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5669, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_XDECREF_SET(__pyx_10genexpr113__pyx_v_k, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr113__pyx_v_k); __pyx_10genexpr113__pyx_v_k = 0;
      goto __pyx_L15_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_10genexpr113__pyx_v_k); __pyx_10genexpr113__pyx_v_k = 0;
      goto __pyx_L1_error;
      __pyx_L15_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 5670:             }
 5671:         else:
+5672:             return {
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5672, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_1);
+5673:                 key: [ws._address for ws in ts._who_has]
        { /* enter inner scope */
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5673, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = 0;
          __pyx_t_9 = __Pyx_set_iterator(__pyx_10genexpr115__pyx_v_ts->_who_has, 1, (&__pyx_t_16), (&__pyx_t_14)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5673, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_7);
          __pyx_t_7 = __pyx_t_9;
          __pyx_t_9 = 0;
          while (1) {
            __pyx_t_17 = __Pyx_set_iter_next(__pyx_t_7, __pyx_t_16, &__pyx_t_15, &__pyx_t_9, __pyx_t_14);
            if (unlikely(__pyx_t_17 == 0)) break;
            if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 5673, __pyx_L23_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5673, __pyx_L23_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr116__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_9));
            __pyx_t_9 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_10genexpr116__pyx_v_ws->_address))) __PYX_ERR(0, 5673, __pyx_L23_error)
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr116__pyx_v_ws); __pyx_10genexpr116__pyx_v_ws = 0;
          goto __pyx_L26_exit_scope;
          __pyx_L23_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr116__pyx_v_ws); __pyx_10genexpr116__pyx_v_ws = 0;
          goto __pyx_L18_error;
          __pyx_L26_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr115__pyx_v_key, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 5673, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr115__pyx_v_key); __pyx_10genexpr115__pyx_v_key = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr115__pyx_v_ts); __pyx_10genexpr115__pyx_v_ts = 0;
      goto __pyx_L27_exit_scope;
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_10genexpr115__pyx_v_key); __pyx_10genexpr115__pyx_v_key = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr115__pyx_v_ts); __pyx_10genexpr115__pyx_v_ts = 0;
      goto __pyx_L1_error;
      __pyx_L27_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
+5674:                 for key, ts in parent._tasks.items()
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 5674, __pyx_L18_error)
      }
      __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_tasks, 1, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_13)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5674, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_11, &__pyx_t_5, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_13);
        if (unlikely(__pyx_t_14 == 0)) break;
        if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5674, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5674, __pyx_L18_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr115__pyx_v_key, __pyx_t_7);
        __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_10genexpr115__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_8));
        __pyx_t_8 = 0;
 5675:             }
 5676: 
+5677:     def get_has_what(self, comm=None, workers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_150get_has_what(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_150get_has_what = {"get_has_what", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_150get_has_what, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_150get_has_what(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_has_what (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_has_what") < 0)) __PYX_ERR(0, 5677, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_has_what", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5677, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_has_what", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_149get_has_what(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_149get_has_what(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_10genexpr117__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr118__pyx_v_ts = NULL;
  PyObject *__pyx_10genexpr119__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr119__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr120__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_has_what", 0);
  __Pyx_INCREF(__pyx_v_workers);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_has_what", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_10genexpr117__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr118__pyx_v_ts);
  __Pyx_XDECREF(__pyx_10genexpr119__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr119__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr120__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__320 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ts, __pyx_n_s_w, __pyx_n_s_ws, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__320)) __PYX_ERR(0, 5677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__320);
  __Pyx_GIVEREF(__pyx_tuple__320);
  __pyx_codeobj__321 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__320, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_has_what, 5677, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__321)) __PYX_ERR(0, 5677, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_150get_has_what, 0, __pyx_n_s_Scheduler_get_has_what, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__321)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__322);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_has_what, __pyx_t_12) < 0) __PYX_ERR(0, 5677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__322 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__322)) __PYX_ERR(0, 5677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__322);
  __Pyx_GIVEREF(__pyx_tuple__322);
+5678:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5679:         ws: WorkerState
 5680:         ts: TaskState
+5681:         if workers is not None:
  __pyx_t_2 = (__pyx_v_workers != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5682:             workers = map(self.coerce_address, workers)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_v_workers);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_workers);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_workers, __pyx_t_1);
    __pyx_t_1 = 0;
+5683:             return {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5683, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
+5684:                 w: [ts._key for ts in parent._workers_dv[w].has_what]
            __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5684, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 5684, __pyx_L11_error)
            }
            __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_10genexpr117__pyx_v_w); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5684, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_has_what); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5684, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) {
              __pyx_t_9 = __pyx_t_10; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
              __pyx_t_12 = NULL;
            } else {
              __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5684, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5684, __pyx_L11_error)
            }
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            for (;;) {
              if (likely(!__pyx_t_12)) {
                if (likely(PyList_CheckExact(__pyx_t_9))) {
                  if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_10 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5684, __pyx_L11_error)
                  #else
                  __pyx_t_10 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5684, __pyx_L11_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  #endif
                } else {
                  if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5684, __pyx_L11_error)
                  #else
                  __pyx_t_10 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5684, __pyx_L11_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  #endif
                }
              } else {
                __pyx_t_10 = __pyx_t_12(__pyx_t_9);
                if (unlikely(!__pyx_t_10)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 5684, __pyx_L11_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_10);
              }
              if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5684, __pyx_L11_error)
              __Pyx_XDECREF_SET(__pyx_10genexpr118__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_10));
              __pyx_t_10 = 0;
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_10genexpr118__pyx_v_ts->_key))) __PYX_ERR(0, 5684, __pyx_L11_error)
            }
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_XDECREF((PyObject *)__pyx_10genexpr118__pyx_v_ts); __pyx_10genexpr118__pyx_v_ts = 0;
            goto __pyx_L14_exit_scope;
            __pyx_L11_error:;
            __Pyx_XDECREF((PyObject *)__pyx_10genexpr118__pyx_v_ts); __pyx_10genexpr118__pyx_v_ts = 0;
            goto __pyx_L6_error;
            __pyx_L14_exit_scope:;
          } /* exit inner scope */
          __pyx_t_7 = __pyx_t_8;
          __pyx_t_8 = 0;
        } else {
+5685:                 if w in parent._workers_dv
        if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 5685, __pyx_L6_error)
        }
        __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_10genexpr117__pyx_v_w, __pyx_v_parent->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5685, __pyx_L6_error)
        if ((__pyx_t_3 != 0)) {
          { /* enter inner scope */
+5686:                 else []
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5686, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_7 = __pyx_t_8;
          __pyx_t_8 = 0;
        }
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr117__pyx_v_w, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 5684, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5687:                 for w in workers
      if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
        __pyx_t_4 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5687, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5687, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5687, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5687, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5687, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5687, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_4);
          if (unlikely(!__pyx_t_7)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5687, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_XDECREF_SET(__pyx_10genexpr117__pyx_v_w, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr117__pyx_v_w); __pyx_10genexpr117__pyx_v_w = 0;
      goto __pyx_L15_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_10genexpr117__pyx_v_w); __pyx_10genexpr117__pyx_v_w = 0;
      goto __pyx_L1_error;
      __pyx_L15_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 5688:             }
 5689:         else:
+5690:             return {
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5690, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_1);
+5691:                 w: [ts._key for ts in ws._has_what]
        { /* enter inner scope */
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5691, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = 0;
          __pyx_t_9 = __Pyx_set_iterator(__pyx_10genexpr119__pyx_v_ws->_has_what, 1, (&__pyx_t_16), (&__pyx_t_14)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5691, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_7);
          __pyx_t_7 = __pyx_t_9;
          __pyx_t_9 = 0;
          while (1) {
            __pyx_t_17 = __Pyx_set_iter_next(__pyx_t_7, __pyx_t_16, &__pyx_t_15, &__pyx_t_9, __pyx_t_14);
            if (unlikely(__pyx_t_17 == 0)) break;
            if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 5691, __pyx_L23_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5691, __pyx_L23_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr120__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
            __pyx_t_9 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_10genexpr120__pyx_v_ts->_key))) __PYX_ERR(0, 5691, __pyx_L23_error)
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr120__pyx_v_ts); __pyx_10genexpr120__pyx_v_ts = 0;
          goto __pyx_L26_exit_scope;
          __pyx_L23_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr120__pyx_v_ts); __pyx_10genexpr120__pyx_v_ts = 0;
          goto __pyx_L18_error;
          __pyx_L26_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr119__pyx_v_w, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 5691, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr119__pyx_v_w); __pyx_10genexpr119__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr119__pyx_v_ws); __pyx_10genexpr119__pyx_v_ws = 0;
      goto __pyx_L27_exit_scope;
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_10genexpr119__pyx_v_w); __pyx_10genexpr119__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr119__pyx_v_ws); __pyx_10genexpr119__pyx_v_ws = 0;
      goto __pyx_L1_error;
      __pyx_L27_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
+5692:                 for w, ws in parent._workers_dv.items()
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 5692, __pyx_L18_error)
      }
      __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_13)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5692, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_7;
      __pyx_t_7 = 0;
      while (1) {
        __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_11, &__pyx_t_5, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_13);
        if (unlikely(__pyx_t_14 == 0)) break;
        if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5692, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5692, __pyx_L18_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr119__pyx_v_w, __pyx_t_7);
        __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_10genexpr119__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_8));
        __pyx_t_8 = 0;
 5693:             }
 5694: 
+5695:     def get_ncores(self, comm=None, workers=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_152get_ncores(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_152get_ncores = {"get_ncores", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_152get_ncores, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_152get_ncores(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_ncores (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_ncores") < 0)) __PYX_ERR(0, 5695, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_ncores", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5695, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_ncores", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_151get_ncores(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_151get_ncores(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_10genexpr121__pyx_v_w = NULL;
  PyObject *__pyx_10genexpr122__pyx_v_w = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr122__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_ncores", 0);
  __Pyx_INCREF(__pyx_v_workers);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_ncores", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_10genexpr121__pyx_v_w);
  __Pyx_XDECREF(__pyx_10genexpr122__pyx_v_w);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr122__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_155generator18(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__323 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_w, __pyx_n_s_w, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__323)) __PYX_ERR(0, 5695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__323);
  __Pyx_GIVEREF(__pyx_tuple__323);
  __pyx_codeobj__324 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__323, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_ncores, 5695, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__324)) __PYX_ERR(0, 5695, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_152get_ncores, 0, __pyx_n_s_Scheduler_get_ncores, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__324)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__325);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_ncores, __pyx_t_12) < 0) __PYX_ERR(0, 5695, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__325 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__325)) __PYX_ERR(0, 5695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__325);
  __Pyx_GIVEREF(__pyx_tuple__325);
+5696:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5697:         ws: WorkerState
+5698:         if workers is not None:
  __pyx_t_2 = (__pyx_v_workers != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+5699:             workers = map(self.coerce_address, workers)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_coerce_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_v_workers);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_workers);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_workers, __pyx_t_1);
    __pyx_t_1 = 0;
+5700:             return {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5700, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
+5701:                 w: parent._workers_dv[w].nthreads
          if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 5701, __pyx_L6_error)
          }
          __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_10genexpr121__pyx_v_w); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5701, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_nthreads); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5701, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr121__pyx_v_w, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 5701, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+5702:                 for w in workers
      if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
        __pyx_t_4 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5702, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5702, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5702, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5702, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5702, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5702, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_4);
          if (unlikely(!__pyx_t_7)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5702, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_XDECREF_SET(__pyx_10genexpr121__pyx_v_w, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr121__pyx_v_w); __pyx_10genexpr121__pyx_v_w = 0;
      goto __pyx_L10_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_10genexpr121__pyx_v_w); __pyx_10genexpr121__pyx_v_w = 0;
      goto __pyx_L1_error;
      __pyx_L10_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+5703:                 if w in parent._workers_dv
        if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 5703, __pyx_L6_error)
        }
        __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_10genexpr121__pyx_v_w, __pyx_v_parent->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5703, __pyx_L6_error)
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
/* … */
        }
 5704:             }
 5705:         else:
+5706:             return {w: ws._nthreads for w, ws in parent._workers_dv.items()}
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5706, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 5706, __pyx_L13_error)
      }
      __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5706, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_9, &__pyx_t_5, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_10);
        if (unlikely(__pyx_t_11 == 0)) break;
        if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 5706, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_t_7);
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 5706, __pyx_L13_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr122__pyx_v_w, __pyx_t_8);
        __pyx_t_8 = 0;
        __Pyx_XDECREF_SET(__pyx_10genexpr122__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_7));
        __pyx_t_7 = 0;
        __pyx_t_7 = PyInt_FromSsize_t(__pyx_10genexpr122__pyx_v_ws->_nthreads); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5706, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr122__pyx_v_w, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 5706, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_10genexpr122__pyx_v_w); __pyx_10genexpr122__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr122__pyx_v_ws); __pyx_10genexpr122__pyx_v_ws = 0;
      goto __pyx_L16_exit_scope;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_10genexpr122__pyx_v_w); __pyx_10genexpr122__pyx_v_w = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr122__pyx_v_ws); __pyx_10genexpr122__pyx_v_ws = 0;
      goto __pyx_L1_error;
      __pyx_L16_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 5707: 
+5708:     async def get_call_stack(self, comm=None, keys=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_154get_call_stack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_154get_call_stack = {"get_call_stack", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_154get_call_stack, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_154get_call_stack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_call_stack (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_call_stack") < 0)) __PYX_ERR(0, 5708, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_call_stack", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5708, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_call_stack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_153get_call_stack(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_14get_call_stack_2generator42(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_153get_call_stack(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_call_stack", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5708, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_keys = __pyx_v_keys;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_keys);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_155generator18, __pyx_codeobj__82, (PyObject *) __pyx_cur_scope, __pyx_n_s_get_call_stack, __pyx_n_s_Scheduler_get_call_stack, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5708, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_call_stack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_155generator18(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_call_stack", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5708, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("get_call_stack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__326 = PyTuple_Pack(18, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_dts, __pyx_n_s_stack, __pyx_n_s_processing_2, __pyx_n_s_key, __pyx_n_s_workers, __pyx_n_s_results, __pyx_n_s_response, __pyx_n_s_dts, __pyx_n_s_w, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_w, __pyx_n_s_r); if (unlikely(!__pyx_tuple__326)) __PYX_ERR(0, 5708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__326);
  __Pyx_GIVEREF(__pyx_tuple__326);
  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(3, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__326, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_call_stack, 5708, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 5708, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_154get_call_stack, 0, __pyx_n_s_Scheduler_get_call_stack, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__327);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_call_stack, __pyx_t_12) < 0) __PYX_ERR(0, 5708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__327 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__327)) __PYX_ERR(0, 5708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__327);
  __Pyx_GIVEREF(__pyx_tuple__327);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr123__pyx_v_dts;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_keys;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_processing;
  PyObject *__pyx_10genexpr126__pyx_v_r;
  PyObject *__pyx_v_response;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_stack;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts;
  PyObject *__pyx_10genexpr124__pyx_v_w;
  PyObject *__pyx_10genexpr126__pyx_v_w;
  PyObject *__pyx_v_workers;
};

+5709:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5710:         ts: TaskState
 5711:         dts: TaskState
+5712:         if keys is not None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_keys != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L4;
  }
+5713:             stack = list(keys)
    __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_stack = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+5714:             processing = set()
    __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_processing = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+5715:             while stack:
    while (1) {
      __pyx_t_3 = (PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_stack) != 0);
      if (!__pyx_t_3) break;
+5716:                 key = stack.pop()
      __pyx_t_1 = __Pyx_PyList_Pop(__pyx_cur_scope->__pyx_v_stack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5716, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
+5717:                 ts = parent._tasks[key]
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 5717, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_parent->_tasks, __pyx_cur_scope->__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5717, __pyx_L1_error)
      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1));
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
+5718:                 if ts._state == "waiting":
      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_ts->_state, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5718, __pyx_L1_error)
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L7;
      }
+5719:                     stack.extend([dts._key for dts in ts._dependencies])
        { /* enter inner scope */
          __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5719, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_5 = 0;
          __pyx_t_8 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_ts->_dependencies, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5719, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_4);
          __pyx_t_4 = __pyx_t_8;
          __pyx_t_8 = 0;
          while (1) {
            __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, __pyx_t_7);
            if (unlikely(__pyx_t_9 == 0)) break;
            if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 5719, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5719, __pyx_L1_error)
            __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr123__pyx_v_dts));
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr123__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_8));
            __Pyx_GIVEREF(__pyx_t_8);
            __pyx_t_8 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_10genexpr123__pyx_v_dts->_key))) __PYX_ERR(0, 5719, __pyx_L1_error)
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } /* exit inner scope */
        __pyx_t_10 = __Pyx_PyList_Extend(__pyx_cur_scope->__pyx_v_stack, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 5719, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5720:                 elif ts._state == "processing":
      __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5720, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
/* … */
      }
      __pyx_L7:;
    }
+5721:                     processing.add(ts)
        __pyx_t_10 = PySet_Add(__pyx_cur_scope->__pyx_v_processing, ((PyObject *)__pyx_cur_scope->__pyx_v_ts)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 5721, __pyx_L1_error)
 5722: 
+5723:             workers = defaultdict(list)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_8, ((PyObject *)(&PyList_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)(&PyList_Type)));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_workers = __pyx_t_1;
    __pyx_t_1 = 0;
+5724:             for ts in processing:
    __pyx_t_6 = 0;
    __pyx_t_4 = __Pyx_set_iterator(__pyx_cur_scope->__pyx_v_processing, 1, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_6, &__pyx_t_4, __pyx_t_7);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 5724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5724, __pyx_L1_error)
      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ts));
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
      __Pyx_GIVEREF(__pyx_t_4);
      __pyx_t_4 = 0;
+5725:                 if ts._processing_on:
      __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_cur_scope->__pyx_v_ts->_processing_on)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5725, __pyx_L1_error)
      if (__pyx_t_3) {
/* … */
      }
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5726:                     workers[ts._processing_on.address].append(ts._key)
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_ts->_processing_on), __pyx_n_s_address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5726, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_workers, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5726, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_10 = __Pyx_PyObject_Append(__pyx_t_8, __pyx_cur_scope->__pyx_v_ts->_key); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 5726, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 5727:         else:
+5728:             workers = {w: None for w in parent._workers_dv}
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = 0;
      if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 5728, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, ((PyObject *)NULL), (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8);
      __pyx_t_8 = __pyx_t_4;
      __pyx_t_4 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_8, __pyx_t_6, &__pyx_t_5, &__pyx_t_4, NULL, NULL, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 5728, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr124__pyx_v_w);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr124__pyx_v_w, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_4 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_10genexpr124__pyx_v_w, (PyObject*)Py_None))) __PYX_ERR(0, 5728, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_workers = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L4:;
 5729: 
+5730:         if not workers:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_workers); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5730, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_3) != 0);
  if (__pyx_t_2) {
/* … */
  }
+5731:             return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
 5732: 
+5733:         results = await asyncio.gather(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gather); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L16_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5733, __pyx_L1_error)
    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
  } else {
    __pyx_t_1 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 5733, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_results = __pyx_t_1;
  __pyx_t_1 = 0;
+5734:             *(self.rpc(w).call_stack(keys=v) for w, v in workers.items())
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_14get_call_stack_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_46_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_46_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_46_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_46_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_46_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5734, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_14get_call_stack_2generator42, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_get_call_stack_locals, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_call_stack.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_14get_call_stack_2generator42(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5734, __pyx_L1_error)
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) { __Pyx_RaiseClosureNameError("workers"); __PYX_ERR(0, 5734, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 5734, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 5734, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_cur_scope->__pyx_v_w) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_call_stack); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_keys, __pyx_cur_scope->__pyx_v_v) < 0) __PYX_ERR(0, 5734, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_8;
    __pyx_t_8 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5734, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_1 = __pyx_pf_11distributed_9scheduler_9Scheduler_14get_call_stack_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_46_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_45_get_call_stack *__pyx_outer_scope;
  PyObject *__pyx_v_v;
  PyObject *__pyx_v_w;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};

 5735:         )
+5736:         response = {w: r for w, r in zip(workers, results) if r}
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_workers);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_cur_scope->__pyx_v_results);
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
      __pyx_t_4 = __pyx_t_8; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
      __pyx_t_11 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5736, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5736, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    for (;;) {
      if (likely(!__pyx_t_11)) {
        if (likely(PyList_CheckExact(__pyx_t_4))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5736, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5736, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5736, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5736, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_11(__pyx_t_4);
        if (unlikely(!__pyx_t_8)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5736, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
        PyObject* sequence = __pyx_t_8;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 5736, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_13 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_13);
        #else
        __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5736, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5736, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        #endif
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_14 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5736, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_15 = Py_TYPE(__pyx_t_14)->tp_iternext;
        index = 0; __pyx_t_12 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_12)) goto __pyx_L19_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_12);
        index = 1; __pyx_t_13 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L19_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_13);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_14), 2) < 0) __PYX_ERR(0, 5736, __pyx_L1_error)
        __pyx_t_15 = NULL;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L20_unpacking_done;
        __pyx_L19_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 5736, __pyx_L1_error)
        __pyx_L20_unpacking_done:;
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr126__pyx_v_w);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr126__pyx_v_w, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_12);
      __pyx_t_12 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr126__pyx_v_r);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr126__pyx_v_r, __pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_10genexpr126__pyx_v_r); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 5736, __pyx_L1_error)
      if (__pyx_t_2) {
        if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_10genexpr126__pyx_v_w, (PyObject*)__pyx_cur_scope->__pyx_10genexpr126__pyx_v_r))) __PYX_ERR(0, 5736, __pyx_L1_error)
      }
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_response = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+5737:         return response
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_response);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 5738: 
+5739:     def get_nbytes(self, comm=None, keys=None, summary=True):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_157get_nbytes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_157get_nbytes = {"get_nbytes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_157get_nbytes, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_157get_nbytes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_summary = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_summary,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_summary);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_nbytes") < 0)) __PYX_ERR(0, 5739, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_summary = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_nbytes", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5739, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_156get_nbytes(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_summary);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_156get_nbytes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_summary) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_10genexpr127__pyx_v_k = NULL;
  PyObject *__pyx_10genexpr128__pyx_v_k = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr128__pyx_v_ts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nbytes", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_10genexpr127__pyx_v_k);
  __Pyx_XDECREF(__pyx_10genexpr128__pyx_v_k);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr128__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__328 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_summary, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_result, __pyx_n_s_out, __pyx_n_s_k, __pyx_n_s_v, __pyx_n_s_k, __pyx_n_s_k, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__328)) __PYX_ERR(0, 5739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__328);
  __Pyx_GIVEREF(__pyx_tuple__328);
  __pyx_codeobj__329 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__328, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_nbytes, 5739, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__329)) __PYX_ERR(0, 5739, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_157get_nbytes, 0, __pyx_n_s_Scheduler_get_nbytes, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__329)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__330);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_nbytes, __pyx_t_12) < 0) __PYX_ERR(0, 5739, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__330 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__330)) __PYX_ERR(0, 5739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__330);
  __Pyx_GIVEREF(__pyx_tuple__330);
+5740:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5741:         ts: TaskState
+5742:         with log_errors():
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5742, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5742, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_5) < 0) __PYX_ERR(0, 5742, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5742, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5742, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (__pyx_t_10 < 0) __PYX_ERR(0, 5742, __pyx_L9_except_error)
          __pyx_t_9 = ((!(__pyx_t_10 != 0)) != 0);
          if (__pyx_t_9) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_5);
            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(0, 5742, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5742, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_4) {
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5742, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L33;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L33:;
  }
+5743:             if keys is not None:
          __pyx_t_9 = (__pyx_v_keys != Py_None);
          __pyx_t_10 = (__pyx_t_9 != 0);
          if (__pyx_t_10) {
/* … */
            goto __pyx_L13;
          }
+5744:                 result = {k: parent._tasks[k].nbytes for k in keys}
            { /* enter inner scope */
              __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5744, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
                __pyx_t_2 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_11 = 0;
                __pyx_t_12 = NULL;
              } else {
                __pyx_t_11 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5744, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_12 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5744, __pyx_L16_error)
              }
              for (;;) {
                if (likely(!__pyx_t_12)) {
                  if (likely(PyList_CheckExact(__pyx_t_2))) {
                    if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_2)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5744, __pyx_L16_error)
                    #else
                    __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5744, __pyx_L16_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    #endif
                  } else {
                    if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 5744, __pyx_L16_error)
                    #else
                    __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5744, __pyx_L16_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    #endif
                  }
                } else {
                  __pyx_t_3 = __pyx_t_12(__pyx_t_2);
                  if (unlikely(!__pyx_t_3)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 5744, __pyx_L16_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_3);
                }
                __Pyx_XDECREF_SET(__pyx_10genexpr127__pyx_v_k, __pyx_t_3);
                __pyx_t_3 = 0;
                if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
                  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                  __PYX_ERR(0, 5744, __pyx_L16_error)
                }
                __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_10genexpr127__pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5744, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_nbytes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5744, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr127__pyx_v_k, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 5744, __pyx_L16_error)
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_10genexpr127__pyx_v_k); __pyx_10genexpr127__pyx_v_k = 0;
              goto __pyx_L19_exit_scope;
              __pyx_L16_error:;
              __Pyx_XDECREF(__pyx_10genexpr127__pyx_v_k); __pyx_10genexpr127__pyx_v_k = 0;
              goto __pyx_L7_error;
              __pyx_L19_exit_scope:;
            } /* exit inner scope */
            __pyx_v_result = ((PyObject*)__pyx_t_1);
            __pyx_t_1 = 0;
 5745:             else:
+5746:                 result = {
          /*else*/ {
            { /* enter inner scope */
              __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5746, __pyx_L22_error)
              __Pyx_GOTREF(__pyx_t_1);
+5747:                     k: ts._nbytes for k, ts in parent._tasks.items() if ts._nbytes >= 0
              __pyx_t_11 = 0;
              if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
                __PYX_ERR(0, 5747, __pyx_L22_error)
              }
              __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_parent->_tasks, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5747, __pyx_L22_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_XDECREF(__pyx_t_2);
              __pyx_t_2 = __pyx_t_5;
              __pyx_t_5 = 0;
              while (1) {
                __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_13, &__pyx_t_11, &__pyx_t_5, &__pyx_t_3, NULL, __pyx_t_14);
                if (unlikely(__pyx_t_15 == 0)) break;
                if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5747, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_GOTREF(__pyx_t_3);
                if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5747, __pyx_L22_error)
                __Pyx_XDECREF_SET(__pyx_10genexpr128__pyx_v_k, __pyx_t_5);
                __pyx_t_5 = 0;
                __Pyx_XDECREF_SET(__pyx_10genexpr128__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
                __pyx_t_3 = 0;
                __pyx_t_10 = ((__pyx_10genexpr128__pyx_v_ts->_nbytes >= 0) != 0);
                if (__pyx_t_10) {
                  __pyx_t_3 = PyInt_FromSsize_t(__pyx_10genexpr128__pyx_v_ts->_nbytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5747, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr128__pyx_v_k, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 5747, __pyx_L22_error)
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                }
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_10genexpr128__pyx_v_k); __pyx_10genexpr128__pyx_v_k = 0;
              __Pyx_XDECREF((PyObject *)__pyx_10genexpr128__pyx_v_ts); __pyx_10genexpr128__pyx_v_ts = 0;
              goto __pyx_L26_exit_scope;
              __pyx_L22_error:;
              __Pyx_XDECREF(__pyx_10genexpr128__pyx_v_k); __pyx_10genexpr128__pyx_v_k = 0;
              __Pyx_XDECREF((PyObject *)__pyx_10genexpr128__pyx_v_ts); __pyx_10genexpr128__pyx_v_ts = 0;
              goto __pyx_L7_error;
              __pyx_L26_exit_scope:;
            } /* exit inner scope */
            __pyx_v_result = ((PyObject*)__pyx_t_1);
            __pyx_t_1 = 0;
          }
          __pyx_L13:;
 5748:                 }
 5749: 
+5750:             if summary:
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_summary); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 5750, __pyx_L7_error)
          if (__pyx_t_10) {
/* … */
          }
+5751:                 out = defaultdict(lambda: 0)
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_10get_nbytes_lambda21(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_10get_nbytes_lambda21 = {"lambda21", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_10get_nbytes_lambda21, METH_NOARGS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_10get_nbytes_lambda21(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda21 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda21(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda21(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda21", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_int_0);
  __pyx_r = __pyx_int_0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5751, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_10get_nbytes_lambda21, 0, __pyx_n_s_Scheduler_get_nbytes_locals_lamb, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5751, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5751, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_v_out = __pyx_t_1;
            __pyx_t_1 = 0;
+5752:                 for k, v in result.items():
            __pyx_t_13 = 0;
            __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_result, 1, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5752, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_1);
            __pyx_t_1 = __pyx_t_2;
            __pyx_t_2 = 0;
            while (1) {
              __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_13, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_14);
              if (unlikely(__pyx_t_15 == 0)) break;
              if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 5752, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
              __pyx_t_2 = 0;
              __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_3);
              __pyx_t_3 = 0;
+5753:                     out[key_split(k)] += v
              __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_key_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5753, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_5 = NULL;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
                __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
                if (likely(__pyx_t_5)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                  __Pyx_INCREF(__pyx_t_5);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_2, function);
                }
              }
              __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k);
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5753, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_out, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5753, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5753, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(PyObject_SetItem(__pyx_v_out, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 5753, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5754:                 result = dict(out)
            __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_out); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5754, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_1));
            __pyx_t_1 = 0;
 5755: 
+5756:             return result
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_result);
          __pyx_r = __pyx_v_result;
          goto __pyx_L11_try_return;
 5757: 
+5758:     def run_function(self, stream, function, args=(), kwargs={}, wait=True):
static PyObject *__pyx_pf_11distributed_9scheduler_48__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject*)__pyx_empty_tuple));
  __Pyx_GIVEREF(((PyObject*)__pyx_empty_tuple));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject*)__pyx_empty_tuple));
  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_kwargs);
  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_kwargs);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_kwargs);
  __Pyx_INCREF(((PyObject *)Py_True));
  __Pyx_GIVEREF(((PyObject *)Py_True));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)Py_True));
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_159run_function(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_158run_function[] = "Run a function within this process\n\n        See Also\n        --------\n        Client.run_on_scheduler\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_159run_function = {"run_function", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_159run_function, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_158run_function};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_159run_function(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_stream = 0;
  PyObject *__pyx_v_function = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_v_wait = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("run_function (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_stream,&__pyx_n_s_function,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_wait,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self);
    values[3] = ((PyObject *)((PyObject*)__pyx_empty_tuple));
    values[4] = __pyx_dynamic_args->__pyx_arg_kwargs;
    values[5] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stream)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("run_function", 0, 3, 6, 1); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("run_function", 0, 3, 6, 2); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wait);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "run_function") < 0)) __PYX_ERR(0, 5758, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_stream = values[1];
    __pyx_v_function = values[2];
    __pyx_v_args = values[3];
    __pyx_v_kwargs = values[4];
    __pyx_v_wait = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("run_function", 0, 3, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5758, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.run_function", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_158run_function(__pyx_self, __pyx_v_self, __pyx_v_stream, __pyx_v_function, __pyx_v_args, __pyx_v_kwargs, __pyx_v_wait);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_158run_function(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_stream, PyObject *__pyx_v_function, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, PyObject *__pyx_v_wait) {
  PyObject *__pyx_v_run = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("run_function", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.run_function", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_run);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__331 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_stream, __pyx_n_s_function, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_wait, __pyx_n_s_run); if (unlikely(!__pyx_tuple__331)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__331);
  __Pyx_GIVEREF(__pyx_tuple__331);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_159run_function, 0, __pyx_n_s_Scheduler_run_function, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__332)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_12, sizeof(__pyx_defaults), 1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_12)->__pyx_arg_kwargs = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_12, __pyx_pf_11distributed_9scheduler_48__defaults__);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_run_function, __pyx_t_12) < 0) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__332 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__331, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_run_function, 5758, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__332)) __PYX_ERR(0, 5758, __pyx_L1_error)
 5759:         """Run a function within this process
 5760: 
 5761:         See Also
 5762:         --------
 5763:         Client.run_on_scheduler
 5764:         """
+5765:         from .worker import run
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_run);
  __Pyx_GIVEREF(__pyx_n_s_run);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_run);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_worker, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_run); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_run = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5766: 
+5767:         self.log_event("all", {"action": "run-function", "function": function})
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_log_event_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_action, __pyx_kp_u_run_function_2) < 0) __PYX_ERR(0, 5767, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_function, __pyx_v_function) < 0) __PYX_ERR(0, 5767, __pyx_L1_error)
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_n_u_all, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5767, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_n_u_all, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5767, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_n_u_all);
    __Pyx_GIVEREF(__pyx_n_u_all);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_n_u_all);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5768:         return run(self, stream, function=function, args=args, kwargs=kwargs, wait=wait)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_INCREF(__pyx_v_stream);
  __Pyx_GIVEREF(__pyx_v_stream);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_stream);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_function, __pyx_v_function) < 0) __PYX_ERR(0, 5768, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_args, __pyx_v_args) < 0) __PYX_ERR(0, 5768, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_kwargs, __pyx_v_kwargs) < 0) __PYX_ERR(0, 5768, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_wait, __pyx_v_wait) < 0) __PYX_ERR(0, 5768, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_run, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 5769: 
+5770:     def set_metadata(self, comm=None, keys=None, value=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_161set_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_161set_metadata = {"set_metadata", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_161set_metadata, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_161set_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_metadata (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_value,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_metadata") < 0)) __PYX_ERR(0, 5770, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_value = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_metadata", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5770, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.set_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_160set_metadata(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_value);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_160set_metadata(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_value) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_metadata = NULL;
  PyObject *__pyx_v_key = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_metadata", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.set_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_metadata);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__333 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_value, __pyx_n_s_parent, __pyx_n_s_metadata, __pyx_n_s_key, __pyx_n_s_e, __pyx_n_s_pdb); if (unlikely(!__pyx_tuple__333)) __PYX_ERR(0, 5770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__333);
  __Pyx_GIVEREF(__pyx_tuple__333);
  __pyx_codeobj__334 = (PyObject*)__Pyx_PyCode_New(4, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__333, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_set_metadata, 5770, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__334)) __PYX_ERR(0, 5770, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_161set_metadata, 0, __pyx_n_s_Scheduler_set_metadata, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__334)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__335);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_set_metadata, __pyx_t_12) < 0) __PYX_ERR(0, 5770, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__335 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__335)) __PYX_ERR(0, 5770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__335);
  __Pyx_GIVEREF(__pyx_tuple__335);
+5771:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5772:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }
+5773:             metadata = parent._task_metadata
      __pyx_t_1 = __pyx_v_parent->_task_metadata;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_metadata = __pyx_t_1;
      __pyx_t_1 = 0;
+5774:             for key in keys[:-1]:
      __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_keys, 0, -1L, NULL, NULL, &__pyx_slice__83, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5774, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5774, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5774, __pyx_L3_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_5))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5774, __pyx_L3_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5774, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5774, __pyx_L3_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5774, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_7(__pyx_t_5);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5774, __pyx_L3_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_1);
        __pyx_t_1 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_slice__83 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__83)) __PYX_ERR(0, 5774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__83);
  __Pyx_GIVEREF(__pyx_slice__83);
+5775:                 if key not in metadata or not isinstance(metadata[key], (dict, list)):
        __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_v_metadata, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5775, __pyx_L3_error)
        __pyx_t_10 = (__pyx_t_9 != 0);
        if (!__pyx_t_10) {
        } else {
          __pyx_t_8 = __pyx_t_10;
          goto __pyx_L12_bool_binop_done;
        }
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_metadata, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5775, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = PyDict_Check(__pyx_t_1); 
        __pyx_t_11 = (__pyx_t_9 != 0);
        if (!__pyx_t_11) {
        } else {
          __pyx_t_10 = __pyx_t_11;
          goto __pyx_L14_bool_binop_done;
        }
        __pyx_t_11 = PyList_Check(__pyx_t_1); 
        __pyx_t_9 = (__pyx_t_11 != 0);
        __pyx_t_10 = __pyx_t_9;
        __pyx_L14_bool_binop_done:;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_9 = ((!(__pyx_t_10 != 0)) != 0);
        __pyx_t_8 = __pyx_t_9;
        __pyx_L12_bool_binop_done:;
        if (__pyx_t_8) {
/* … */
        }
+5776:                     metadata[key] = dict()
          __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5776, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(PyObject_SetItem(__pyx_v_metadata, __pyx_v_key, __pyx_t_1) < 0)) __PYX_ERR(0, 5776, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5777:                 metadata = metadata[key]
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_metadata, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5777, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_metadata, __pyx_t_1);
        __pyx_t_1 = 0;
+5778:             metadata[keys[-1]] = value
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_keys, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5778, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PyObject_SetItem(__pyx_v_metadata, __pyx_t_5, __pyx_v_value) < 0)) __PYX_ERR(0, 5778, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5779:         except Exception as e:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.set_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(0, 5779, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_e);
          __pyx_v_e = NULL;
          goto __pyx_L22;
        }
        __pyx_L21_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_12 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
        __pyx_L22:;
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+5780:             import pdb
        __pyx_t_14 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5780, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_v_pdb = __pyx_t_14;
        __pyx_t_14 = 0;
 5781: 
+5782:             pdb.set_trace()
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5782, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
          }
        }
        __pyx_t_14 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5782, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      }
 5783: 
+5784:     def get_metadata(self, comm=None, keys=None, default=no_default):
static PyObject *__pyx_pf_11distributed_9scheduler_50__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)Py_None));
  __Pyx_GIVEREF(((PyObject *)Py_None));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_None));
  __Pyx_INCREF(((PyObject *)Py_None));
  __Pyx_GIVEREF(((PyObject *)Py_None));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)Py_None));
  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_default);
  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_default);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_default);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_163get_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_163get_metadata = {"get_metadata", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_163get_metadata, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_163get_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_default = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metadata (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,&__pyx_n_s_default,0};
    PyObject* values[4] = {0,0,0,0};
    __pyx_defaults1 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self);
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = __pyx_dynamic_args->__pyx_arg_default;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_default);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_metadata") < 0)) __PYX_ERR(0, 5784, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
    __pyx_v_default = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metadata", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5784, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_162get_metadata(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys, __pyx_v_default);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_162get_metadata(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys, PyObject *__pyx_v_default) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_metadata = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metadata", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_metadata);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__336 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_default, __pyx_n_s_parent, __pyx_n_s_metadata, __pyx_n_s_key); if (unlikely(!__pyx_tuple__336)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__336);
  __Pyx_GIVEREF(__pyx_tuple__336);
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_163get_metadata, 0, __pyx_n_s_Scheduler_get_metadata, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__337)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_12, sizeof(__pyx_defaults1), 1)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_no_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_12)->__pyx_arg_default = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_12, __pyx_pf_11distributed_9scheduler_50__defaults__);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_metadata, __pyx_t_12) < 0) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__337 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__336, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_metadata, 5784, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__337)) __PYX_ERR(0, 5784, __pyx_L1_error)
+5785:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5786:         metadata = parent._task_metadata
  __pyx_t_1 = __pyx_v_parent->_task_metadata;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_metadata = __pyx_t_1;
  __pyx_t_1 = 0;
+5787:         for key in keys[:-1]:
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_keys, 0, -1L, NULL, NULL, &__pyx_slice__83, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5787, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5787, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5787, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5787, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5787, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5787, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5788:             metadata = metadata[key]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_metadata, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_metadata, __pyx_t_1);
    __pyx_t_1 = 0;
+5789:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L9_try_return:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L0;
    __pyx_L8_except_return:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L0;
  }
+5790:             return metadata[keys[-1]]
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_keys, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5790, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_metadata, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5790, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L9_try_return;
+5791:         except KeyError:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 5791, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_9);
+5792:             if default != no_default:
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_no_default); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5792, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_default, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5792, __pyx_L7_except_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 5792, __pyx_L7_except_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (likely(__pyx_t_12)) {
/* … */
      }
+5793:                 return default
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_default);
        __pyx_r = __pyx_v_default;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L8_except_return;
 5794:             else:
+5795:                 raise
      /*else*/ {
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_2);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_9);
        __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_9 = 0; 
        __PYX_ERR(0, 5795, __pyx_L7_except_error)
      }
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 5796: 
+5797:     def get_task_status(self, comm=None, keys=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_165get_task_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_165get_task_status = {"get_task_status", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_165get_task_status, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_165get_task_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_status (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_keys,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_task_status") < 0)) __PYX_ERR(0, 5797, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_keys = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_task_status", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5797, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_task_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_164get_task_status(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_keys);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_164get_task_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_keys) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_10genexpr129__pyx_v_key = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_status", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_task_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_10genexpr129__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__338 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_keys, __pyx_n_s_parent, __pyx_n_s_key); if (unlikely(!__pyx_tuple__338)) __PYX_ERR(0, 5797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__338);
  __Pyx_GIVEREF(__pyx_tuple__338);
  __pyx_codeobj__339 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__338, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_task_status, 5797, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__339)) __PYX_ERR(0, 5797, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_165get_task_status, 0, __pyx_n_s_Scheduler_get_task_status, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__339)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__340);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_task_status, __pyx_t_12) < 0) __PYX_ERR(0, 5797, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__340 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__340)) __PYX_ERR(0, 5797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__340);
  __Pyx_GIVEREF(__pyx_tuple__340);
+5798:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+5799:         return {
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5799, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
+5800:             key: (parent._tasks[key].state if key in parent._tasks else None)
      if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 5800, __pyx_L5_error)
      }
      __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_10genexpr129__pyx_v_key, __pyx_v_parent->_tasks, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5800, __pyx_L5_error)
      if ((__pyx_t_6 != 0)) {
        if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 5800, __pyx_L5_error)
        }
        __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_10genexpr129__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5800, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_state); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5800, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_5 = __pyx_t_8;
        __pyx_t_8 = 0;
      } else {
        __Pyx_INCREF(Py_None);
        __pyx_t_5 = Py_None;
      }
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr129__pyx_v_key, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 5800, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5801:             for key in keys
    if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
      __pyx_t_2 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5801, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5801, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5801, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5801, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5801, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5801, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5801, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_10genexpr129__pyx_v_key, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_10genexpr129__pyx_v_key); __pyx_10genexpr129__pyx_v_key = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_10genexpr129__pyx_v_key); __pyx_10genexpr129__pyx_v_key = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5802:         }
 5803: 
+5804:     def get_task_stream(self, comm=None, start=None, stop=None, count=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_167get_task_stream(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_167get_task_stream = {"get_task_stream", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_167get_task_stream, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_167get_task_stream(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_stop = 0;
  PyObject *__pyx_v_count = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_stream (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_start,&__pyx_n_s_stop,&__pyx_n_s_count,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_task_stream") < 0)) __PYX_ERR(0, 5804, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_start = values[2];
    __pyx_v_stop = values[3];
    __pyx_v_count = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_task_stream", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5804, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_task_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_166get_task_stream(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_start, __pyx_v_stop, __pyx_v_count);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_166get_task_stream(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_count) {
  PyObject *__pyx_v_TaskStreamPlugin = NULL;
  PyObject *__pyx_v_tsp = NULL;
  PyObject *__pyx_10genexpr130__pyx_v_p = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_task_stream", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_task_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_TaskStreamPlugin);
  __Pyx_XDECREF(__pyx_v_tsp);
  __Pyx_XDECREF(__pyx_10genexpr130__pyx_v_p);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__341 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_start, __pyx_n_s_stop, __pyx_n_s_count, __pyx_n_s_TaskStreamPlugin, __pyx_n_s_tsp, __pyx_n_s_p); if (unlikely(!__pyx_tuple__341)) __PYX_ERR(0, 5804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__341);
  __Pyx_GIVEREF(__pyx_tuple__341);
  __pyx_codeobj__342 = (PyObject*)__Pyx_PyCode_New(5, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_task_stream, 5804, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__342)) __PYX_ERR(0, 5804, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_167get_task_stream, 0, __pyx_n_s_Scheduler_get_task_stream, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__342)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__343);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_task_stream, __pyx_t_12) < 0) __PYX_ERR(0, 5804, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__343 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__343)) __PYX_ERR(0, 5804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__343);
  __Pyx_GIVEREF(__pyx_tuple__343);
+5805:         from distributed.diagnostics.task_stream import TaskStreamPlugin
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_TaskStreamPlugin);
  __Pyx_GIVEREF(__pyx_n_s_TaskStreamPlugin);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_TaskStreamPlugin);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_distributed_diagnostics_task_str, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_TaskStreamPlugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_TaskStreamPlugin = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5806: 
+5807:         self.add_plugin(TaskStreamPlugin, idempotent=True)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_TaskStreamPlugin);
  __Pyx_GIVEREF(__pyx_v_TaskStreamPlugin);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_TaskStreamPlugin);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_idempotent, Py_True) < 0) __PYX_ERR(0, 5807, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5808:         tsp = [p for p in self.plugins if isinstance(p, TaskStreamPlugin)][0]
  { /* enter inner scope */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5808, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5808, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5808, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5808, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5808, __pyx_L5_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5808, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 5808, __pyx_L5_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5808, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5808, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_10genexpr130__pyx_v_p, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_7 = PyObject_IsInstance(__pyx_10genexpr130__pyx_v_p, __pyx_v_TaskStreamPlugin); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 5808, __pyx_L5_error)
      __pyx_t_8 = (__pyx_t_7 != 0);
      if (__pyx_t_8) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_10genexpr130__pyx_v_p))) __PYX_ERR(0, 5808, __pyx_L5_error)
      }
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_10genexpr130__pyx_v_p); __pyx_10genexpr130__pyx_v_p = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_10genexpr130__pyx_v_p); __pyx_10genexpr130__pyx_v_p = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_tsp = __pyx_t_1;
  __pyx_t_1 = 0;
+5809:         return tsp.collect(start=start, stop=stop, count=count)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tsp, __pyx_n_s_collect); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_start, __pyx_v_start) < 0) __PYX_ERR(0, 5809, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_stop, __pyx_v_stop) < 0) __PYX_ERR(0, 5809, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_count, __pyx_v_count) < 0) __PYX_ERR(0, 5809, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 5810: 
+5811:     def start_task_metadata(self, comm=None, name=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_169start_task_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_169start_task_metadata = {"start_task_metadata", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_169start_task_metadata, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_169start_task_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start_task_metadata (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_name,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start_task_metadata") < 0)) __PYX_ERR(0, 5811, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_name = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("start_task_metadata", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5811, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start_task_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_168start_task_metadata(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_168start_task_metadata(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_plugin = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start_task_metadata", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start_task_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_plugin);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__344 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_name, __pyx_n_s_plugin); if (unlikely(!__pyx_tuple__344)) __PYX_ERR(0, 5811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__344);
  __Pyx_GIVEREF(__pyx_tuple__344);
  __pyx_codeobj__345 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__344, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_start_task_metadata, 5811, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__345)) __PYX_ERR(0, 5811, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_169start_task_metadata, 0, __pyx_n_s_Scheduler_start_task_metadata, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__345)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__346);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_start_task_metadata, __pyx_t_12) < 0) __PYX_ERR(0, 5811, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__346 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__346)) __PYX_ERR(0, 5811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__346);
  __Pyx_GIVEREF(__pyx_tuple__346);
+5812:         plugin = CollectTaskMetaDataPlugin(scheduler=self, name=name)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CollectTaskMetaDataPlugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_scheduler, __pyx_v_self) < 0) __PYX_ERR(0, 5812, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 5812, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_plugin = __pyx_t_3;
  __pyx_t_3 = 0;
 5813: 
+5814:         self.add_plugin(plugin)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_add_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_plugin) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_plugin);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5815: 
+5816:     def stop_task_metadata(self, comm=None, name=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_171stop_task_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_171stop_task_metadata = {"stop_task_metadata", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_171stop_task_metadata, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_171stop_task_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stop_task_metadata (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_name,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stop_task_metadata") < 0)) __PYX_ERR(0, 5816, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_name = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stop_task_metadata", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5816, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stop_task_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_170stop_task_metadata(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_170stop_task_metadata(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_plugins = NULL;
  PyObject *__pyx_v_plugin = NULL;
  PyObject *__pyx_10genexpr131__pyx_v_p = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stop_task_metadata", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.stop_task_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_plugins);
  __Pyx_XDECREF(__pyx_v_plugin);
  __Pyx_XDECREF(__pyx_10genexpr131__pyx_v_p);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_174generator19(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__347 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_name, __pyx_n_s_plugins, __pyx_n_s_plugin, __pyx_n_s_p); if (unlikely(!__pyx_tuple__347)) __PYX_ERR(0, 5816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__347);
  __Pyx_GIVEREF(__pyx_tuple__347);
  __pyx_codeobj__348 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__347, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_stop_task_metadata, 5816, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__348)) __PYX_ERR(0, 5816, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_171stop_task_metadata, 0, __pyx_n_s_Scheduler_stop_task_metadata, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__348)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__349);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_stop_task_metadata, __pyx_t_12) < 0) __PYX_ERR(0, 5816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__349 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__349)) __PYX_ERR(0, 5816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__349);
  __Pyx_GIVEREF(__pyx_tuple__349);
+5817:         plugins = [
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5817, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
+5818:             p
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_10genexpr131__pyx_v_p))) __PYX_ERR(0, 5817, __pyx_L5_error)
+5819:             for p in self.plugins
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5819, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5819, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5819, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5819, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5819, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 5819, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5819, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5819, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_10genexpr131__pyx_v_p, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_10genexpr131__pyx_v_p); __pyx_10genexpr131__pyx_v_p = 0;
    goto __pyx_L11_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_10genexpr131__pyx_v_p); __pyx_10genexpr131__pyx_v_p = 0;
    goto __pyx_L1_error;
    __pyx_L11_exit_scope:;
  } /* exit inner scope */
  __pyx_v_plugins = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+5820:             if isinstance(p, CollectTaskMetaDataPlugin) and p.name == name
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CollectTaskMetaDataPlugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5820, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = PyObject_IsInstance(__pyx_10genexpr131__pyx_v_p, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 5820, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = (__pyx_t_7 != 0);
      if (__pyx_t_8) {
      } else {
        __pyx_t_6 = __pyx_t_8;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_10genexpr131__pyx_v_p, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5820, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_9 = PyObject_RichCompare(__pyx_t_2, __pyx_v_name, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5820, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5820, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_6 = __pyx_t_8;
      __pyx_L9_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
 5821:         ]
+5822:         if len(plugins) != 1:
  __pyx_t_4 = PyList_GET_SIZE(__pyx_v_plugins); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5822, __pyx_L1_error)
  __pyx_t_6 = ((__pyx_t_4 != 1) != 0);
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+5823:             raise ValueError(
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5823, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 5823, __pyx_L1_error)
+5824:                 "Expected to find exactly one CollectTaskMetaDataPlugin "
    __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_10 = 127;
    __Pyx_INCREF(__pyx_kp_u_Expected_to_find_exactly_one_Col);
    __pyx_t_4 += 65;
    __Pyx_GIVEREF(__pyx_kp_u_Expected_to_find_exactly_one_Col);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Expected_to_find_exactly_one_Col);
/* … */
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5825:                 f"with name {name} but found {len(plugins)}."
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_10;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_but_found);
    __pyx_t_4 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_but_found);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_but_found);
    __pyx_t_11 = PyList_GET_SIZE(__pyx_v_plugins); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5825, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_11, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u__84);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__84);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__84);
 5826:             )
 5827: 
+5828:         plugin = plugins[0]
  __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_plugins, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_plugin = __pyx_t_1;
  __pyx_t_1 = 0;
+5829:         self.remove_plugin(plugin)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_remove_plugin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_v_plugin) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_plugin);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5830:         return {"metadata": plugin.metadata, "state": plugin.state}
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin, __pyx_n_s_metadata); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_metadata, __pyx_t_3) < 0) __PYX_ERR(0, 5830, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin, __pyx_n_s_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_state, __pyx_t_3) < 0) __PYX_ERR(0, 5830, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5831: 
+5832:     async def register_worker_plugin(self, comm, plugin, name=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_173register_worker_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_172register_worker_plugin[] = " Registers a setup function, and call it on every worker ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_173register_worker_plugin = {"register_worker_plugin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_173register_worker_plugin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_172register_worker_plugin};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_173register_worker_plugin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_plugin = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("register_worker_plugin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_plugin,&__pyx_n_s_name,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("register_worker_plugin", 0, 3, 4, 1); __PYX_ERR(0, 5832, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_plugin)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("register_worker_plugin", 0, 3, 4, 2); __PYX_ERR(0, 5832, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "register_worker_plugin") < 0)) __PYX_ERR(0, 5832, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_plugin = values[2];
    __pyx_v_name = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("register_worker_plugin", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5832, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.register_worker_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_172register_worker_plugin(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_plugin, __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_172register_worker_plugin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_plugin, PyObject *__pyx_v_name) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("register_worker_plugin", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5832, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_plugin = __pyx_v_plugin;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_plugin);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_plugin);
  __pyx_cur_scope->__pyx_v_name = __pyx_v_name;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_174generator19, __pyx_codeobj__85, (PyObject *) __pyx_cur_scope, __pyx_n_s_register_worker_plugin, __pyx_n_s_Scheduler_register_worker_plugin, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 5832, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.register_worker_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_174generator19(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("register_worker_plugin", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5832, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("register_worker_plugin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__350 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_plugin, __pyx_n_s_name, __pyx_n_s_responses); if (unlikely(!__pyx_tuple__350)) __PYX_ERR(0, 5832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__350);
  __Pyx_GIVEREF(__pyx_tuple__350);
  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_register_worker_plugin, 5832, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 5832, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_173register_worker_plugin, 0, __pyx_n_s_Scheduler_register_worker_plugin, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_12, __pyx_tuple__351);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_register_worker_plugin, __pyx_t_12) < 0) __PYX_ERR(0, 5832, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_tuple__351 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__351)) __PYX_ERR(0, 5832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__351);
  __Pyx_GIVEREF(__pyx_tuple__351);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_47_register_worker_plugin {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_plugin;
  PyObject *__pyx_v_responses;
  PyObject *__pyx_v_self;
};

 5833:         """ Registers a setup function, and call it on every worker """
+5834:         self.worker_plugins.append({"plugin": plugin, "name": name})
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_plugin, __pyx_cur_scope->__pyx_v_plugin) < 0) __PYX_ERR(0, 5834, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_name, __pyx_cur_scope->__pyx_v_name) < 0) __PYX_ERR(0, 5834, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 5834, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5835: 
+5836:         responses = await self.broadcast(
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_broadcast); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5836, __pyx_L1_error)
    __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4);
  } else {
    __pyx_t_4 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_4) < 0) __PYX_ERR(0, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_responses = __pyx_t_4;
  __pyx_t_4 = 0;
+5837:             msg=dict(op="plugin-add", plugin=plugin, name=name)
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_op, __pyx_kp_u_plugin_add) < 0) __PYX_ERR(0, 5837, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_plugin, __pyx_cur_scope->__pyx_v_plugin) < 0) __PYX_ERR(0, 5837, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_name, __pyx_cur_scope->__pyx_v_name) < 0) __PYX_ERR(0, 5837, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_msg, __pyx_t_4) < 0) __PYX_ERR(0, 5837, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 5838:         )
+5839:         return responses
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_responses);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 5840: 
 5841:     #####################
 5842:     # State Transitions #
 5843:     #####################
 5844: 
+5845:     def _transition(self, key, finish: str, *args, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_176_transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_175_transition[] = "Transition a key from its current state to the finish state\n\n        Examples\n        --------\n        >>> self._transition('x', 'waiting')\n        {'x': 'processing'}\n\n        Returns\n        -------\n        Dictionary of recommendations for future transitions\n\n        See Also\n        --------\n        Scheduler.transitions : transitive version of this function\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_176_transition = {"_transition", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_176_transition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_175_transition};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_176_transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_finish = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_transition (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  if (PyTuple_GET_SIZE(__pyx_args) > 3) {
    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 3, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_args)) {
      __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_args);
  } else {
    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_finish,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_transition", 0, 3, 3, 1); __PYX_ERR(0, 5845, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_finish)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_transition", 0, 3, 3, 2); __PYX_ERR(0, 5845, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 3) ? pos_args : 3;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "_transition") < 0)) __PYX_ERR(0, 5845, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_finish = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_transition", 0, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5845, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler._transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_finish), (&PyUnicode_Type), 1, "finish", 1))) __PYX_ERR(0, 5845, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_175_transition(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_finish, __pyx_v_args, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_175_transition(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_finish, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_start_finish = 0;
  PyObject *__pyx_v_finish2 = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_msgs = 0;
  PyObject *__pyx_v_new_msgs = 0;
  PyObject *__pyx_v_dependents = 0;
  PyObject *__pyx_v_dependencies = 0;
  PyObject *__pyx_v_func = NULL;
  PyObject *__pyx_v_a = 0;
  PyObject *__pyx_v_a_recs = 0;
  PyObject *__pyx_v_a_wmsgs = 0;
  PyObject *__pyx_v_a_cmsgs = 0;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_b_recs = 0;
  PyObject *__pyx_v_b_wmsgs = 0;
  PyObject *__pyx_v_b_cmsgs = 0;
  PyObject *__pyx_v_b = 0;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_v_plugin = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskGroup *__pyx_v_tg = 0;
  int __pyx_v_all_forgotten;
  PyObject *__pyx_v_s = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_pdb = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_transition", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler._transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_start_finish);
  __Pyx_XDECREF(__pyx_v_finish2);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_msgs);
  __Pyx_XDECREF(__pyx_v_new_msgs);
  __Pyx_XDECREF(__pyx_v_dependents);
  __Pyx_XDECREF(__pyx_v_dependencies);
  __Pyx_XDECREF(__pyx_v_func);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_a_recs);
  __Pyx_XDECREF(__pyx_v_a_wmsgs);
  __Pyx_XDECREF(__pyx_v_a_cmsgs);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_b_recs);
  __Pyx_XDECREF(__pyx_v_b_wmsgs);
  __Pyx_XDECREF(__pyx_v_b_cmsgs);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_plugin);
  __Pyx_XDECREF((PyObject *)__pyx_v_tg);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_pdb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__352 = PyTuple_Pack(35, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_finish, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_parent, __pyx_n_s_ts, __pyx_n_s_start, __pyx_n_s_start_finish, __pyx_n_s_finish2, __pyx_n_s_recommendations, __pyx_n_s_worker_msgs, __pyx_n_s_client_msgs, __pyx_n_s_msgs, __pyx_n_s_new_msgs, __pyx_n_s_dependents, __pyx_n_s_dependencies, __pyx_n_s_func, __pyx_n_s_a, __pyx_n_s_a_recs, __pyx_n_s_a_wmsgs, __pyx_n_s_a_cmsgs, __pyx_n_s_v, __pyx_n_s_b_recs, __pyx_n_s_b_wmsgs, __pyx_n_s_b_cmsgs, __pyx_n_s_b, __pyx_n_s_w, __pyx_n_s_c, __pyx_n_s_plugin, __pyx_n_s_tg, __pyx_n_s_all_forgotten, __pyx_n_s_s, __pyx_n_s_e, __pyx_n_s_pdb); if (unlikely(!__pyx_tuple__352)) __PYX_ERR(0, 5845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__352);
  __Pyx_GIVEREF(__pyx_tuple__352);
/* … */
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_finish, __pyx_n_u_unicode) < 0) __PYX_ERR(0, 5845, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_176_transition, 0, __pyx_n_s_Scheduler__transition, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__353)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_12);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_transition_2, __pyx_t_2) < 0) __PYX_ERR(0, 5845, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__353 = (PyObject*)__Pyx_PyCode_New(3, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__352, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_transition_2, 5845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__353)) __PYX_ERR(0, 5845, __pyx_L1_error)
 5846:         """Transition a key from its current state to the finish state
 5847: 
 5848:         Examples
 5849:         --------
 5850:         >>> self._transition('x', 'waiting')
 5851:         {'x': 'processing'}
 5852: 
 5853:         Returns
 5854:         -------
 5855:         Dictionary of recommendations for future transitions
 5856: 
 5857:         See Also
 5858:         --------
 5859:         Scheduler.transitions : transitive version of this function
 5860:         """
+5861:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 5862:         ts: TaskState
 5863:         start: str
 5864:         start_finish: tuple
 5865:         finish2: str
 5866:         recommendations: dict
 5867:         worker_msgs: dict
 5868:         client_msgs: dict
 5869:         msgs: list
 5870:         new_msgs: list
 5871:         dependents: set
 5872:         dependencies: set
+5873:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }
+5874:             recommendations = {}
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5874, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_recommendations = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+5875:             worker_msgs = {}
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5875, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_worker_msgs = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+5876:             client_msgs = {}
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5876, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_client_msgs = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
 5877: 
+5878:             ts = parent._tasks.get(key)
      if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 5878, __pyx_L3_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_parent->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5878, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 5878, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
      __pyx_t_1 = 0;
+5879:             if ts is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_ts) == Py_None);
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
/* … */
      }
+5880:                 return recommendations, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5880, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_recommendations);
        __Pyx_GIVEREF(__pyx_v_recommendations);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_recommendations);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_client_msgs);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L7_try_return;
+5881:             start = ts._state
      __pyx_t_1 = __pyx_v_ts->_state;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_start = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+5882:             if start == finish:
      __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_start, __pyx_v_finish, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5882, __pyx_L3_error)
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (__pyx_t_5) {
/* … */
      }
+5883:                 return recommendations, worker_msgs, client_msgs
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5883, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_recommendations);
        __Pyx_GIVEREF(__pyx_v_recommendations);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_recommendations);
        __Pyx_INCREF(__pyx_v_worker_msgs);
        __Pyx_GIVEREF(__pyx_v_worker_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_worker_msgs);
        __Pyx_INCREF(__pyx_v_client_msgs);
        __Pyx_GIVEREF(__pyx_v_client_msgs);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_client_msgs);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L7_try_return;
 5884: 
+5885:             if self.plugins:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5885, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5885, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_5) {
/* … */
      }
+5886:                 dependents = set(ts._dependents)
        __pyx_t_1 = PySet_New(__pyx_v_ts->_dependents); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5886, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_v_dependents = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
+5887:                 dependencies = set(ts._dependencies)
        __pyx_t_1 = PySet_New(__pyx_v_ts->_dependencies); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5887, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_v_dependencies = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
 5888: 
+5889:             start_finish = (start, finish)
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5889, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_start);
      __Pyx_GIVEREF(__pyx_v_start);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_start);
      __Pyx_INCREF(__pyx_v_finish);
      __Pyx_GIVEREF(__pyx_v_finish);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_finish);
      __pyx_v_start_finish = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+5890:             func = self._transitions.get(start_finish)
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5890, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5890, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_start_finish) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_start_finish);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5890, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_func = __pyx_t_1;
      __pyx_t_1 = 0;
+5891:             if func is not None:
      __pyx_t_5 = (__pyx_v_func != Py_None);
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
/* … */
        goto __pyx_L12;
      }
+5892:                 a: tuple = func(key, *args, **kwargs)
        __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5892, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key);
        __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5892, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_func, __pyx_t_8, __pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5892, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5892, __pyx_L3_error)
        __pyx_v_a = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
+5893:                 recommendations, worker_msgs, client_msgs = a
        if (likely(__pyx_v_a != Py_None)) {
          PyObject* sequence = __pyx_v_a;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 3)) {
            if (size > 3) __Pyx_RaiseTooManyValuesError(3);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 5893, __pyx_L3_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_7);
          #else
          __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5893, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5893, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5893, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 5893, __pyx_L3_error)
        }
        if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5893, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5893, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 5893, __pyx_L3_error)
        __Pyx_DECREF_SET(__pyx_v_recommendations, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
        __Pyx_DECREF_SET(__pyx_v_worker_msgs, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_client_msgs, ((PyObject*)__pyx_t_7));
        __pyx_t_7 = 0;
+5894:             elif "released" not in start_finish:
      __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_released, __pyx_v_start_finish, Py_NE)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5894, __pyx_L3_error)
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (likely(__pyx_t_5)) {
/* … */
        goto __pyx_L12;
      }
+5895:                 func = self._transitions["released", finish]
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5895, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5895, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_n_u_released);
        __Pyx_GIVEREF(__pyx_n_u_released);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_n_u_released);
        __Pyx_INCREF(__pyx_v_finish);
        __Pyx_GIVEREF(__pyx_v_finish);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_finish);
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5895, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_1);
        __pyx_t_1 = 0;
+5896:                 assert not args and not kwargs
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_6 = (PyTuple_GET_SIZE(__pyx_v_args) != 0);
          __pyx_t_9 = ((!__pyx_t_6) != 0);
          if (__pyx_t_9) {
          } else {
            __pyx_t_5 = __pyx_t_9;
            goto __pyx_L13_bool_binop_done;
          }
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5896, __pyx_L3_error)
          __pyx_t_6 = ((!__pyx_t_9) != 0);
          __pyx_t_5 = __pyx_t_6;
          __pyx_L13_bool_binop_done:;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 5896, __pyx_L3_error)
          }
        }
        #endif
 5897:                 a_recs: dict
 5898:                 a_wmsgs: dict
 5899:                 a_cmsgs: dict
+5900:                 a: tuple = self._transition(key, "released")
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5900, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_10 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_n_u_released};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5900, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_n_u_released};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5900, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5900, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (__pyx_t_7) {
            __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL;
          }
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_key);
          __Pyx_INCREF(__pyx_n_u_released);
          __Pyx_GIVEREF(__pyx_n_u_released);
          PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_n_u_released);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5900, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5900, __pyx_L3_error)
        __pyx_v_a = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
+5901:                 a_recs, a_wmsgs, a_cmsgs = a
        if (likely(__pyx_v_a != Py_None)) {
          PyObject* sequence = __pyx_v_a;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 3)) {
            if (size > 3) __Pyx_RaiseTooManyValuesError(3);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 5901, __pyx_L3_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_11);
          #else
          __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5901, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5901, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_11 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5901, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 5901, __pyx_L3_error)
        }
        if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5901, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5901, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 5901, __pyx_L3_error)
        __pyx_v_a_recs = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_v_a_wmsgs = ((PyObject*)__pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_v_a_cmsgs = ((PyObject*)__pyx_t_11);
        __pyx_t_11 = 0;
+5902:                 v = a_recs.get(key)
        if (unlikely(__pyx_v_a_recs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
          __PYX_ERR(0, 5902, __pyx_L3_error)
        }
        __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_a_recs, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5902, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_v_v = __pyx_t_11;
        __pyx_t_11 = 0;
+5903:                 if v is not None:
        __pyx_t_5 = (__pyx_v_v != Py_None);
        __pyx_t_6 = (__pyx_t_5 != 0);
        if (__pyx_t_6) {
/* … */
        }
+5904:                     func = self._transitions["released", v]
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5904, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5904, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_n_u_released);
          __Pyx_GIVEREF(__pyx_n_u_released);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_n_u_released);
          __Pyx_INCREF(__pyx_v_v);
          __Pyx_GIVEREF(__pyx_v_v);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_v);
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5904, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF_SET(__pyx_v_func, __pyx_t_1);
          __pyx_t_1 = 0;
 5905:                 b_recs: dict
 5906:                 b_wmsgs: dict
 5907:                 b_cmsgs: dict
+5908:                 b: tuple = func(key)
        __Pyx_INCREF(__pyx_v_func);
        __pyx_t_8 = __pyx_v_func; __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
          }
        }
        __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_11, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_key);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5908, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5908, __pyx_L3_error)
        __pyx_v_b = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
+5909:                 b_recs, b_wmsgs, b_cmsgs = b
        if (likely(__pyx_v_b != Py_None)) {
          PyObject* sequence = __pyx_v_b;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 3)) {
            if (size > 3) __Pyx_RaiseTooManyValuesError(3);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 5909, __pyx_L3_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_11);
          #else
          __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5909, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5909, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_11 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5909, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 5909, __pyx_L3_error)
        }
        if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5909, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5909, __pyx_L3_error)
        if (!(likely(PyDict_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 5909, __pyx_L3_error)
        __pyx_v_b_recs = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_v_b_wmsgs = ((PyObject*)__pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_v_b_cmsgs = ((PyObject*)__pyx_t_11);
        __pyx_t_11 = 0;
 5910: 
+5911:                 recommendations.update(a_recs)
        __pyx_t_11 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_recommendations, __pyx_v_a_recs); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5911, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+5912:                 for w, new_msgs in a_wmsgs.items():
        __pyx_t_12 = 0;
        if (unlikely(__pyx_v_a_wmsgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
          __PYX_ERR(0, 5912, __pyx_L3_error)
        }
        __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_a_wmsgs, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5912, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_11);
        __pyx_t_11 = __pyx_t_8;
        __pyx_t_8 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_13, &__pyx_t_12, &__pyx_t_8, &__pyx_t_1, NULL, __pyx_t_10);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5912, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5912, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_8);
          __pyx_t_8 = 0;
          __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_1));
          __pyx_t_1 = 0;
+5913:                     msgs = worker_msgs.get(w)
          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_worker_msgs, __pyx_v_w, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5913, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5913, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_1));
          __pyx_t_1 = 0;
+5914:                     if msgs is not None:
          __pyx_t_6 = (__pyx_v_msgs != ((PyObject*)Py_None));
          __pyx_t_5 = (__pyx_t_6 != 0);
          if (__pyx_t_5) {
/* … */
            goto __pyx_L18;
          }
+5915:                         msgs.extend(new_msgs)
            if (unlikely(__pyx_v_msgs == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
              __PYX_ERR(0, 5915, __pyx_L3_error)
            }
            __pyx_t_15 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 5915, __pyx_L3_error)
 5916:                     else:
+5917:                         worker_msgs[w] = new_msgs
          /*else*/ {
            if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_w, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 5917, __pyx_L3_error)
          }
          __pyx_L18:;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+5918:                 for c, new_msgs in a_cmsgs.items():
        __pyx_t_13 = 0;
        if (unlikely(__pyx_v_a_cmsgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
          __PYX_ERR(0, 5918, __pyx_L3_error)
        }
        __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_a_cmsgs, 1, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5918, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF(__pyx_t_11);
        __pyx_t_11 = __pyx_t_1;
        __pyx_t_1 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_12, &__pyx_t_13, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_10);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5918, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_8);
          if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5918, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_1);
          __pyx_t_1 = 0;
          __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_8));
          __pyx_t_8 = 0;
+5919:                     msgs = client_msgs.get(c)
          __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_msgs, __pyx_v_c, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5919, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5919, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_8));
          __pyx_t_8 = 0;
+5920:                     if msgs is not None:
          __pyx_t_5 = (__pyx_v_msgs != ((PyObject*)Py_None));
          __pyx_t_6 = (__pyx_t_5 != 0);
          if (__pyx_t_6) {
/* … */
            goto __pyx_L21;
          }
+5921:                         msgs.extend(new_msgs)
            if (unlikely(__pyx_v_msgs == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
              __PYX_ERR(0, 5921, __pyx_L3_error)
            }
            __pyx_t_15 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 5921, __pyx_L3_error)
 5922:                     else:
+5923:                         client_msgs[c] = new_msgs
          /*else*/ {
            if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_c, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 5923, __pyx_L3_error)
          }
          __pyx_L21:;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 5924: 
+5925:                 recommendations.update(b_recs)
        __pyx_t_11 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_recommendations, __pyx_v_b_recs); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5925, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+5926:                 for w, new_msgs in b_wmsgs.items():
        __pyx_t_12 = 0;
        if (unlikely(__pyx_v_b_wmsgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
          __PYX_ERR(0, 5926, __pyx_L3_error)
        }
        __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_b_wmsgs, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5926, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_11);
        __pyx_t_11 = __pyx_t_8;
        __pyx_t_8 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_13, &__pyx_t_12, &__pyx_t_8, &__pyx_t_1, NULL, __pyx_t_10);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5926, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5926, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_8);
          __pyx_t_8 = 0;
          __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_1));
          __pyx_t_1 = 0;
+5927:                     msgs = worker_msgs.get(w)
          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_worker_msgs, __pyx_v_w, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5927, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5927, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_1));
          __pyx_t_1 = 0;
+5928:                     if msgs is not None:
          __pyx_t_6 = (__pyx_v_msgs != ((PyObject*)Py_None));
          __pyx_t_5 = (__pyx_t_6 != 0);
          if (__pyx_t_5) {
/* … */
            goto __pyx_L24;
          }
+5929:                         msgs.extend(new_msgs)
            if (unlikely(__pyx_v_msgs == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
              __PYX_ERR(0, 5929, __pyx_L3_error)
            }
            __pyx_t_15 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 5929, __pyx_L3_error)
 5930:                     else:
+5931:                         worker_msgs[w] = new_msgs
          /*else*/ {
            if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_w, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 5931, __pyx_L3_error)
          }
          __pyx_L24:;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+5932:                 for c, new_msgs in b_cmsgs.items():
        __pyx_t_13 = 0;
        if (unlikely(__pyx_v_b_cmsgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
          __PYX_ERR(0, 5932, __pyx_L3_error)
        }
        __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_b_cmsgs, 1, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5932, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF(__pyx_t_11);
        __pyx_t_11 = __pyx_t_1;
        __pyx_t_1 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_12, &__pyx_t_13, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_10);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5932, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_8);
          if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5932, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_1);
          __pyx_t_1 = 0;
          __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_8));
          __pyx_t_8 = 0;
+5933:                     msgs = client_msgs.get(c)
          __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_msgs, __pyx_v_c, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5933, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 5933, __pyx_L3_error)
          __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_8));
          __pyx_t_8 = 0;
+5934:                     if msgs is not None:
          __pyx_t_5 = (__pyx_v_msgs != ((PyObject*)Py_None));
          __pyx_t_6 = (__pyx_t_5 != 0);
          if (__pyx_t_6) {
/* … */
            goto __pyx_L27;
          }
+5935:                         msgs.extend(new_msgs)
            if (unlikely(__pyx_v_msgs == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
              __PYX_ERR(0, 5935, __pyx_L3_error)
            }
            __pyx_t_15 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 5935, __pyx_L3_error)
 5936:                     else:
+5937:                         client_msgs[c] = new_msgs
          /*else*/ {
            if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_c, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 5937, __pyx_L3_error)
          }
          __pyx_L27:;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 5938: 
+5939:                 start = "released"
        __Pyx_INCREF(__pyx_n_u_released);
        __Pyx_DECREF_SET(__pyx_v_start, __pyx_n_u_released);
 5940:             else:
+5941:                 raise RuntimeError("Impossible transition from %r to %r" % start_finish)
      /*else*/ {
        __pyx_t_11 = PyUnicode_Format(__pyx_kp_u_Impossible_transition_from_r_to, __pyx_v_start_finish); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5941, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5941, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_Raise(__pyx_t_8, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __PYX_ERR(0, 5941, __pyx_L3_error)
      }
      __pyx_L12:;
 5942: 
+5943:             finish2 = ts._state
      __pyx_t_8 = __pyx_v_ts->_state;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_v_finish2 = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
+5944:             self.transition_log.append((key, start, finish2, recommendations, time()))
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5944, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5944, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_11 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5944, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5944, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key);
      __Pyx_INCREF(__pyx_v_start);
      __Pyx_GIVEREF(__pyx_v_start);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_start);
      __Pyx_INCREF(__pyx_v_finish2);
      __Pyx_GIVEREF(__pyx_v_finish2);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_finish2);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_11);
      __pyx_t_11 = 0;
      __pyx_t_15 = __Pyx_PyObject_Append(__pyx_t_8, __pyx_t_1); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 5944, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5945:             if parent._validate:
      __pyx_t_6 = (__pyx_v_parent->_validate != 0);
      if (__pyx_t_6) {
/* … */
      }
+5946:                 logger.debug(
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5946, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_debug); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5946, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 5947:                     "Transitioned %r %s->%s (actual: %s).  Consequence: %s",
 5948:                     key,
 5949:                     start,
 5950:                     finish2,
 5951:                     ts._state,
+5952:                     dict(recommendations),
        if (unlikely(__pyx_v_recommendations == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
          __PYX_ERR(0, 5952, __pyx_L3_error)
        }
        __pyx_t_8 = PyDict_Copy(__pyx_v_recommendations); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5952, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
            __pyx_t_10 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[7] = {__pyx_t_7, __pyx_kp_u_Transitioned_r_s_s_actual_s_Cons, __pyx_v_key, __pyx_v_start, __pyx_v_finish2, __pyx_v_ts->_state, __pyx_t_8};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5946, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[7] = {__pyx_t_7, __pyx_kp_u_Transitioned_r_s_s_actual_s_Cons, __pyx_v_key, __pyx_v_start, __pyx_v_finish2, __pyx_v_ts->_state, __pyx_t_8};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5946, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        } else
        #endif
        {
          __pyx_t_16 = PyTuple_New(6+__pyx_t_10); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5946, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_16);
          if (__pyx_t_7) {
            __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_7); __pyx_t_7 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Transitioned_r_s_s_actual_s_Cons);
          __Pyx_GIVEREF(__pyx_kp_u_Transitioned_r_s_s_actual_s_Cons);
          PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_10, __pyx_kp_u_Transitioned_r_s_s_actual_s_Cons);
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_10, __pyx_v_key);
          __Pyx_INCREF(__pyx_v_start);
          __Pyx_GIVEREF(__pyx_v_start);
          PyTuple_SET_ITEM(__pyx_t_16, 2+__pyx_t_10, __pyx_v_start);
          __Pyx_INCREF(__pyx_v_finish2);
          __Pyx_GIVEREF(__pyx_v_finish2);
          PyTuple_SET_ITEM(__pyx_t_16, 3+__pyx_t_10, __pyx_v_finish2);
          __Pyx_INCREF(__pyx_v_ts->_state);
          __Pyx_GIVEREF(__pyx_v_ts->_state);
          PyTuple_SET_ITEM(__pyx_t_16, 4+__pyx_t_10, __pyx_v_ts->_state);
          __Pyx_GIVEREF(__pyx_t_8);
          PyTuple_SET_ITEM(__pyx_t_16, 5+__pyx_t_10, __pyx_t_8);
          __pyx_t_8 = 0;
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5946, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5953:                 )
+5954:             if self.plugins:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5954, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5954, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_6) {
/* … */
      }
 5955:                 # Temporarily put back forgotten key for plugin to retrieve it
+5956:                 if ts._state == "forgotten":
        __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5956, __pyx_L3_error)
        __pyx_t_5 = (__pyx_t_6 != 0);
        if (__pyx_t_5) {
/* … */
        }
+5957:                     ts._dependents = dependents
          if (unlikely(!__pyx_v_dependents)) { __Pyx_RaiseUnboundLocalError("dependents"); __PYX_ERR(0, 5957, __pyx_L3_error) }
          __Pyx_INCREF(__pyx_v_dependents);
          __Pyx_GIVEREF(__pyx_v_dependents);
          __Pyx_GOTREF(__pyx_v_ts->_dependents);
          __Pyx_DECREF(__pyx_v_ts->_dependents);
          __pyx_v_ts->_dependents = __pyx_v_dependents;
+5958:                     ts._dependencies = dependencies
          if (unlikely(!__pyx_v_dependencies)) { __Pyx_RaiseUnboundLocalError("dependencies"); __PYX_ERR(0, 5958, __pyx_L3_error) }
          __Pyx_INCREF(__pyx_v_dependencies);
          __Pyx_GIVEREF(__pyx_v_dependencies);
          __Pyx_GOTREF(__pyx_v_ts->_dependencies);
          __Pyx_DECREF(__pyx_v_ts->_dependencies);
          __pyx_v_ts->_dependencies = __pyx_v_dependencies;
+5959:                     parent._tasks[ts._key] = ts
          if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 5959, __pyx_L3_error)
          }
          if (unlikely(PyDict_SetItem(__pyx_v_parent->_tasks, __pyx_v_ts->_key, ((PyObject *)__pyx_v_ts)) < 0)) __PYX_ERR(0, 5959, __pyx_L3_error)
+5960:                 for plugin in list(self.plugins):
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_plugins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5960, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_11 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5960, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __pyx_t_11; __Pyx_INCREF(__pyx_t_1); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        for (;;) {
          if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_11 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_11); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 5960, __pyx_L3_error)
          #else
          __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5960, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
          __Pyx_XDECREF_SET(__pyx_v_plugin, __pyx_t_11);
          __pyx_t_11 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5961:                     try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            goto __pyx_L40_try_end;
            __pyx_L33_error:;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            goto __pyx_L3_error;
            __pyx_L34_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            __pyx_L40_try_end:;
          }
+5962:                         plugin.transition(key, start, finish2, *args, **kwargs)
              __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin, __pyx_n_s_transition); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5962, __pyx_L33_error)
              __Pyx_GOTREF(__pyx_t_11);
              __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5962, __pyx_L33_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_INCREF(__pyx_v_key);
              __Pyx_GIVEREF(__pyx_v_key);
              PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_key);
              __Pyx_INCREF(__pyx_v_start);
              __Pyx_GIVEREF(__pyx_v_start);
              PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_v_start);
              __Pyx_INCREF(__pyx_v_finish2);
              __Pyx_GIVEREF(__pyx_v_finish2);
              PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_v_finish2);
              __pyx_t_8 = PyNumber_Add(__pyx_t_16, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5962, __pyx_L33_error)
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, __pyx_v_kwargs); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5962, __pyx_L33_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+5963:                     except Exception:
            __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
            if (__pyx_t_10) {
              __Pyx_AddTraceback("distributed.scheduler.Scheduler._transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_8, &__pyx_t_11) < 0) __PYX_ERR(0, 5963, __pyx_L35_except_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_GOTREF(__pyx_t_11);
+5964:                         logger.info("Plugin failed with exception", exc_info=True)
              __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_logger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5964, __pyx_L35_except_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_info); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5964, __pyx_L35_except_error)
              __Pyx_GOTREF(__pyx_t_20);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5964, __pyx_L35_except_error)
              __Pyx_GOTREF(__pyx_t_7);
              if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_exc_info, Py_True) < 0) __PYX_ERR(0, 5964, __pyx_L35_except_error)
              __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_tuple__86, __pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5964, __pyx_L35_except_error)
              __Pyx_GOTREF(__pyx_t_21);
              __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              goto __pyx_L34_exception_handled;
            }
            goto __pyx_L35_except_error;
            __pyx_L35_except_error:;
/* … */
  __pyx_tuple__86 = PyTuple_Pack(1, __pyx_kp_u_Plugin_failed_with_exception); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 5964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__86);
  __Pyx_GIVEREF(__pyx_tuple__86);
+5965:                 if ts._state == "forgotten":
        __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5965, __pyx_L3_error)
        __pyx_t_6 = (__pyx_t_5 != 0);
        if (__pyx_t_6) {
/* … */
        }
+5966:                     del parent._tasks[ts._key]
          if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 5966, __pyx_L3_error)
          }
          if (unlikely(PyDict_DelItem(__pyx_v_parent->_tasks, __pyx_v_ts->_key) < 0)) __PYX_ERR(0, 5966, __pyx_L3_error)
 5967: 
+5968:             tg: TaskGroup = ts._group
      __pyx_t_1 = ((PyObject *)__pyx_v_ts->_group);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_tg = ((struct __pyx_obj_11distributed_9scheduler_TaskGroup *)__pyx_t_1);
      __pyx_t_1 = 0;
+5969:             if ts._state == "forgotten" and tg._name in parent._task_groups:
      __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5969, __pyx_L3_error)
      __pyx_t_9 = (__pyx_t_5 != 0);
      if (__pyx_t_9) {
      } else {
        __pyx_t_6 = __pyx_t_9;
        goto __pyx_L45_bool_binop_done;
      }
      if (unlikely(__pyx_v_parent->_task_groups == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 5969, __pyx_L3_error)
      }
      __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_v_tg->_name, __pyx_v_parent->_task_groups, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5969, __pyx_L3_error)
      __pyx_t_5 = (__pyx_t_9 != 0);
      __pyx_t_6 = __pyx_t_5;
      __pyx_L45_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
 5970:                 # Remove TaskGroup if all tasks are in the forgotten state
+5971:                 all_forgotten: bint = True
        __pyx_v_all_forgotten = 1;
+5972:                 for s in ALL_TASK_STATES:
        __pyx_t_12 = 0;
        __pyx_t_11 = __Pyx_set_iterator(__pyx_v_11distributed_9scheduler_ALL_TASK_STATES, 1, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5972, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_1);
        __pyx_t_1 = __pyx_t_11;
        __pyx_t_11 = 0;
        while (1) {
          __pyx_t_14 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_13, &__pyx_t_12, &__pyx_t_11, __pyx_t_10);
          if (unlikely(__pyx_t_14 == 0)) break;
          if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 5972, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_11);
          __pyx_t_11 = 0;
+5973:                     if tg._states.get(s):
          if (unlikely(__pyx_v_tg->_states == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(0, 5973, __pyx_L3_error)
          }
          __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_tg->_states, __pyx_v_s, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5973, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5973, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_6) {
/* … */
          }
        }
        __pyx_L48_break:;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5974:                         all_forgotten = False
            __pyx_v_all_forgotten = 0;
+5975:                         break
            goto __pyx_L48_break;
+5976:                 if all_forgotten:
        __pyx_t_6 = (__pyx_v_all_forgotten != 0);
        if (__pyx_t_6) {
/* … */
        }
+5977:                     ts._prefix._groups.remove(tg)
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts->_prefix->_groups, __pyx_n_s_remove); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5977, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_8 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, ((PyObject *)__pyx_v_tg)) : __Pyx_PyObject_CallOneArg(__pyx_t_11, ((PyObject *)__pyx_v_tg));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5977, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5978:                     del parent._task_groups[tg._name]
          if (unlikely(__pyx_v_parent->_task_groups == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 5978, __pyx_L3_error)
          }
          if (unlikely(PyDict_DelItem(__pyx_v_parent->_task_groups, __pyx_v_tg->_name) < 0)) __PYX_ERR(0, 5978, __pyx_L3_error)
 5979: 
+5980:             return recommendations, worker_msgs, client_msgs
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5980, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_recommendations);
      __Pyx_GIVEREF(__pyx_v_recommendations);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_recommendations);
      __Pyx_INCREF(__pyx_v_worker_msgs);
      __Pyx_GIVEREF(__pyx_v_worker_msgs);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_worker_msgs);
      __Pyx_INCREF(__pyx_v_client_msgs);
      __Pyx_GIVEREF(__pyx_v_client_msgs);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_client_msgs);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L7_try_return;
+5981:         except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler._transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_11, &__pyx_t_8) < 0) __PYX_ERR(0, 5981, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_11);
      __pyx_v_e = __pyx_t_11;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L56_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_25);
          __pyx_t_10 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_22 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e);
            __pyx_v_e = NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_22;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+5982:             logger.exception("Error transitioning %r from %r to %r", key, start, finish)
        __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_logger); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5982, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_21);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_n_s_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5982, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        if (unlikely(!__pyx_v_start)) { __Pyx_RaiseUnboundLocalError("start"); __PYX_ERR(0, 5982, __pyx_L56_error) }
        __pyx_t_21 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_21)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_21);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_10 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_21, __pyx_kp_u_Error_transitioning_r_from_r_to, __pyx_v_key, __pyx_v_start, __pyx_v_finish};
          __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5982, __pyx_L56_error)
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_GOTREF(__pyx_t_16);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_21, __pyx_kp_u_Error_transitioning_r_from_r_to, __pyx_v_key, __pyx_v_start, __pyx_v_finish};
          __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5982, __pyx_L56_error)
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_GOTREF(__pyx_t_16);
        } else
        #endif
        {
          __pyx_t_20 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5982, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_20);
          if (__pyx_t_21) {
            __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_21); __pyx_t_21 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_Error_transitioning_r_from_r_to);
          __Pyx_GIVEREF(__pyx_kp_u_Error_transitioning_r_from_r_to);
          PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_10, __pyx_kp_u_Error_transitioning_r_from_r_to);
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_10, __pyx_v_key);
          __Pyx_INCREF(__pyx_v_start);
          __Pyx_GIVEREF(__pyx_v_start);
          PyTuple_SET_ITEM(__pyx_t_20, 2+__pyx_t_10, __pyx_v_start);
          __Pyx_INCREF(__pyx_v_finish);
          __Pyx_GIVEREF(__pyx_v_finish);
          PyTuple_SET_ITEM(__pyx_t_20, 3+__pyx_t_10, __pyx_v_finish);
          __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5982, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+5983:             if LOG_PDB:
        __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_LOG_PDB); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5983, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5983, __pyx_L56_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (__pyx_t_6) {
/* … */
        }
+5984:                 import pdb
          __pyx_t_16 = __Pyx_Import(__pyx_n_s_pdb, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5984, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_v_pdb = __pyx_t_16;
          __pyx_t_16 = 0;
 5985: 
+5986:                 pdb.set_trace()
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pdb, __pyx_n_s_set_trace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5986, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_20 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_20)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_20);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
            }
          }
          __pyx_t_16 = (__pyx_t_20) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_20) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5986, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+5987:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_11, __pyx_t_8);
        __pyx_t_1 = 0; __pyx_t_11 = 0; __pyx_t_8 = 0; 
        __PYX_ERR(0, 5987, __pyx_L56_error)
      }
 5988: 
+5989:     def transition(self, key, finish: str, *args, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_178transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_177transition[] = "Transition a key from its current state to the finish state\n\n        Examples\n        --------\n        >>> self.transition('x', 'waiting')\n        {'x': 'processing'}\n\n        Returns\n        -------\n        Dictionary of recommendations for future transitions\n\n        See Also\n        --------\n        Scheduler.transitions: transitive version of this function\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_178transition = {"transition", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_178transition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_177transition};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_178transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_finish = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  if (PyTuple_GET_SIZE(__pyx_args) > 3) {
    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 3, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_args)) {
      __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_args);
  } else {
    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_finish,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transition", 0, 3, 3, 1); __PYX_ERR(0, 5989, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_finish)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transition", 0, 3, 3, 2); __PYX_ERR(0, 5989, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 3) ? pos_args : 3;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "transition") < 0)) __PYX_ERR(0, 5989, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_finish = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition", 0, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5989, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_finish), (&PyUnicode_Type), 1, "finish", 1))) __PYX_ERR(0, 5989, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_177transition(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_finish, __pyx_v_args, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_177transition(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_finish, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_a = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__354 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_finish, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_recommendations, __pyx_n_s_worker_msgs, __pyx_n_s_client_msgs, __pyx_n_s_a); if (unlikely(!__pyx_tuple__354)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__354);
  __Pyx_GIVEREF(__pyx_tuple__354);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_finish, __pyx_n_u_unicode) < 0) __PYX_ERR(0, 5989, __pyx_L1_error)
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_178transition, 0, __pyx_n_s_Scheduler_transition, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__355)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_12, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_transition, __pyx_t_12) < 0) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_codeobj__355 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__354, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_transition, 5989, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__355)) __PYX_ERR(0, 5989, __pyx_L1_error)
 5990:         """Transition a key from its current state to the finish state
 5991: 
 5992:         Examples
 5993:         --------
 5994:         >>> self.transition('x', 'waiting')
 5995:         {'x': 'processing'}
 5996: 
 5997:         Returns
 5998:         -------
 5999:         Dictionary of recommendations for future transitions
 6000: 
 6001:         See Also
 6002:         --------
 6003:         Scheduler.transitions: transitive version of this function
 6004:         """
 6005:         recommendations: dict
 6006:         worker_msgs: dict
 6007:         client_msgs: dict
+6008:         a: tuple = self._transition(key, finish, *args, **kwargs)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
  __Pyx_INCREF(__pyx_v_finish);
  __Pyx_GIVEREF(__pyx_v_finish);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_finish);
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 6008, __pyx_L1_error)
  __pyx_v_a = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+6009:         recommendations, worker_msgs, client_msgs = a
  if (likely(__pyx_v_a != Py_None)) {
    PyObject* sequence = __pyx_v_a;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 6009, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 6009, __pyx_L1_error)
  }
  if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 6009, __pyx_L1_error)
  if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 6009, __pyx_L1_error)
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 6009, __pyx_L1_error)
  __pyx_v_recommendations = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_v_worker_msgs = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_client_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6010:         self.send_all(client_msgs, worker_msgs)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_send_all); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client_msgs, __pyx_v_worker_msgs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_client_msgs, __pyx_v_worker_msgs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_client_msgs);
    __Pyx_GIVEREF(__pyx_v_client_msgs);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_client_msgs);
    __Pyx_INCREF(__pyx_v_worker_msgs);
    __Pyx_GIVEREF(__pyx_v_worker_msgs);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_worker_msgs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6011:         return recommendations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_recommendations);
  __pyx_r = __pyx_v_recommendations;
  goto __pyx_L0;
 6012: 
+6013:     def transitions(self, recommendations: dict):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_180transitions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_179transitions[] = "Process transitions until none are left\n\n        This includes feedback from previous transitions and continues until we\n        reach a steady state\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_180transitions = {"transitions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_180transitions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_179transitions};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_180transitions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_recommendations = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transitions (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_recommendations,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recommendations)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transitions", 1, 2, 2, 1); __PYX_ERR(0, 6013, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transitions") < 0)) __PYX_ERR(0, 6013, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_recommendations = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transitions", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6013, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.transitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_recommendations), (&PyDict_Type), 1, "recommendations", 1))) __PYX_ERR(0, 6013, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_179transitions(__pyx_self, __pyx_v_self, __pyx_v_recommendations);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_179transitions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_recommendations) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_worker_msgs = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_msgs = 0;
  PyObject *__pyx_v_new_msgs = 0;
  PyObject *__pyx_v_new = 0;
  PyObject *__pyx_v_new_recs = 0;
  PyObject *__pyx_v_new_wmsgs = 0;
  PyObject *__pyx_v_new_cmsgs = 0;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_finish = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transitions", 0);
  __Pyx_INCREF(__pyx_v_recommendations);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.transitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_worker_msgs);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_msgs);
  __Pyx_XDECREF(__pyx_v_new_msgs);
  __Pyx_XDECREF(__pyx_v_new);
  __Pyx_XDECREF(__pyx_v_new_recs);
  __Pyx_XDECREF(__pyx_v_new_wmsgs);
  __Pyx_XDECREF(__pyx_v_new_cmsgs);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_finish);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_recommendations);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__356 = PyTuple_Pack(16, __pyx_n_s_self, __pyx_n_s_recommendations, __pyx_n_s_parent, __pyx_n_s_keys, __pyx_n_s_worker_msgs, __pyx_n_s_client_msgs, __pyx_n_s_msgs, __pyx_n_s_new_msgs, __pyx_n_s_new_2, __pyx_n_s_new_recs, __pyx_n_s_new_wmsgs, __pyx_n_s_new_cmsgs, __pyx_n_s_key, __pyx_n_s_finish, __pyx_n_s_w, __pyx_n_s_c); if (unlikely(!__pyx_tuple__356)) __PYX_ERR(0, 6013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__356);
  __Pyx_GIVEREF(__pyx_tuple__356);
/* … */
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_recommendations, __pyx_n_u_dict_2) < 0) __PYX_ERR(0, 6013, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_180transitions, 0, __pyx_n_s_Scheduler_transitions, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__357)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_12);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_transitions_2, __pyx_t_2) < 0) __PYX_ERR(0, 6013, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__357 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__356, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_transitions_2, 6013, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__357)) __PYX_ERR(0, 6013, __pyx_L1_error)
 6014:         """Process transitions until none are left
 6015: 
 6016:         This includes feedback from previous transitions and continues until we
 6017:         reach a steady state
 6018:         """
+6019:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6020:         keys: set = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6021:         recommendations = recommendations.copy()
  if (unlikely(__pyx_v_recommendations == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "copy");
    __PYX_ERR(0, 6021, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_recommendations); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_recommendations, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;
+6022:         worker_msgs: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_worker_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6023:         client_msgs: dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_client_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 6024:         msgs: list
 6025:         new_msgs: list
 6026:         new: tuple
 6027:         new_recs: dict
 6028:         new_wmsgs: dict
 6029:         new_cmsgs: dict
+6030:         while recommendations:
  while (1) {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_recommendations); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6030, __pyx_L1_error)
    if (!__pyx_t_2) break;
+6031:             key, finish = recommendations.popitem()
    __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_popitem, __pyx_v_recommendations); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6031, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6031, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6031, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6031, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 6031, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L6_unpacking_done;
      __pyx_L5_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6031, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_finish, __pyx_t_4);
    __pyx_t_4 = 0;
+6032:             keys.add(key)
    __pyx_t_7 = PySet_Add(__pyx_v_keys, __pyx_v_key); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6032, __pyx_L1_error)
 6033: 
+6034:             new = self._transition(key, finish)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_key, __pyx_v_finish};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6034, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_key, __pyx_v_finish};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6034, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_8, __pyx_v_key);
      __Pyx_INCREF(__pyx_v_finish);
      __Pyx_GIVEREF(__pyx_v_finish);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_8, __pyx_v_finish);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 6034, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_new, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+6035:             new_recs, new_wmsgs, new_cmsgs = new
    if (likely(__pyx_v_new != Py_None)) {
      PyObject* sequence = __pyx_v_new;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6035, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 6035, __pyx_L1_error)
    }
    if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 6035, __pyx_L1_error)
    if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 6035, __pyx_L1_error)
    if (!(likely(PyDict_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 6035, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_new_recs, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_wmsgs, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_cmsgs, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
 6036: 
+6037:             recommendations.update(new_recs)
    __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_recommendations, __pyx_v_new_recs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6038:             for w, new_msgs in new_wmsgs.items():
    __pyx_t_9 = 0;
    if (unlikely(__pyx_v_new_wmsgs == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 6038, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_new_wmsgs, 1, __pyx_n_s_items, (&__pyx_t_10), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_4;
    __pyx_t_4 = 0;
    while (1) {
      __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_10, &__pyx_t_9, &__pyx_t_4, &__pyx_t_1, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_11 == 0)) break;
      if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6038, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 6038, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+6039:                 msgs = worker_msgs.get(w)
      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_worker_msgs, __pyx_v_w, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6039, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 6039, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+6040:                 if msgs is not None:
      __pyx_t_2 = (__pyx_v_msgs != ((PyObject*)Py_None));
      __pyx_t_12 = (__pyx_t_2 != 0);
      if (__pyx_t_12) {
/* … */
        goto __pyx_L9;
      }
+6041:                     msgs.extend(new_msgs)
        if (unlikely(__pyx_v_msgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
          __PYX_ERR(0, 6041, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6041, __pyx_L1_error)
 6042:                 else:
+6043:                     worker_msgs[w] = new_msgs
      /*else*/ {
        if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_w, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 6043, __pyx_L1_error)
      }
      __pyx_L9:;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6044:             for c, new_msgs in new_cmsgs.items():
    __pyx_t_10 = 0;
    if (unlikely(__pyx_v_new_cmsgs == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 6044, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_new_cmsgs, 1, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_10, &__pyx_t_1, &__pyx_t_4, NULL, __pyx_t_8);
      if (unlikely(__pyx_t_11 == 0)) break;
      if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 6044, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_v_new_msgs, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+6045:                 msgs = client_msgs.get(c)
      __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_client_msgs, __pyx_v_c, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6045, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 6045, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_msgs, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+6046:                 if msgs is not None:
      __pyx_t_12 = (__pyx_v_msgs != ((PyObject*)Py_None));
      __pyx_t_2 = (__pyx_t_12 != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L12;
      }
+6047:                     msgs.extend(new_msgs)
        if (unlikely(__pyx_v_msgs == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
          __PYX_ERR(0, 6047, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_PyList_Extend(__pyx_v_msgs, __pyx_v_new_msgs); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6047, __pyx_L1_error)
 6048:                 else:
+6049:                     client_msgs[c] = new_msgs
      /*else*/ {
        if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_c, __pyx_v_new_msgs) < 0)) __PYX_ERR(0, 6049, __pyx_L1_error)
      }
      __pyx_L12:;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
 6050: 
+6051:         self.send_all(client_msgs, worker_msgs)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_send_all); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_client_msgs, __pyx_v_worker_msgs};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6051, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_client_msgs, __pyx_v_worker_msgs};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6051, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_client_msgs);
    __Pyx_GIVEREF(__pyx_v_client_msgs);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_client_msgs);
    __Pyx_INCREF(__pyx_v_worker_msgs);
    __Pyx_GIVEREF(__pyx_v_worker_msgs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_v_worker_msgs);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 6052: 
+6053:         if parent._validate:
  __pyx_t_2 = (__pyx_v_parent->_validate != 0);
  if (__pyx_t_2) {
/* … */
  }
+6054:             for key in keys:
    __pyx_t_9 = 0;
    __pyx_t_4 = __Pyx_set_iterator(__pyx_v_keys, 1, (&__pyx_t_10), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6054, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_4;
    __pyx_t_4 = 0;
    while (1) {
      __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_10, &__pyx_t_9, &__pyx_t_4, __pyx_t_8);
      if (unlikely(__pyx_t_11 == 0)) break;
      if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6054, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_4);
      __pyx_t_4 = 0;
+6055:                 self.validate_key(key)
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_validate_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 6056: 
+6057:     def story(self, *keys):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_182story(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_181story[] = " Get all transitions that touch one of the input keys ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_182story = {"story", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_182story, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_181story};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_182story(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("story (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_keys = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_keys)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_keys);
  } else {
    __pyx_v_keys = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "story") < 0)) __PYX_ERR(0, 6057, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("story", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6057, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_keys); __pyx_v_keys = 0;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.story", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_181story(__pyx_self, __pyx_v_self, __pyx_v_keys);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_181story(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_keys) {
  PyObject *__pyx_10genexpr132__pyx_v_key = NULL;
  PyObject *__pyx_10genexpr133__pyx_v_t = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("story", 0);
  __Pyx_INCREF(__pyx_v_keys);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.story", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_10genexpr132__pyx_v_key);
  __Pyx_XDECREF(__pyx_10genexpr133__pyx_v_t);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__358 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_keys, __pyx_n_s_key, __pyx_n_s_t); if (unlikely(!__pyx_tuple__358)) __PYX_ERR(0, 6057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__358);
  __Pyx_GIVEREF(__pyx_tuple__358);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_182story, 0, __pyx_n_s_Scheduler_story, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__359)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_story, __pyx_t_2) < 0) __PYX_ERR(0, 6057, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__359 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__358, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_story, 6057, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__359)) __PYX_ERR(0, 6057, __pyx_L1_error)
 6058:         """ Get all transitions that touch one of the input keys """
+6059:         keys = {key.key if isinstance(key, TaskState) else key for key in keys}
  { /* enter inner scope */
    __pyx_t_1 = PySet_New(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6059, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
      __pyx_t_2 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6059, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6059, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 6059, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6059, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 6059, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6059, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6059, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_10genexpr132__pyx_v_key, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_6 = __Pyx_TypeCheck(__pyx_10genexpr132__pyx_v_key, __pyx_ptype_11distributed_9scheduler_TaskState); 
      if ((__pyx_t_6 != 0)) {
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_10genexpr132__pyx_v_key, __pyx_n_s_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6059, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = __pyx_t_7;
        __pyx_t_7 = 0;
      } else {
        __Pyx_INCREF(__pyx_10genexpr132__pyx_v_key);
        __pyx_t_5 = __pyx_10genexpr132__pyx_v_key;
      }
      if (unlikely(PySet_Add(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 6059, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_10genexpr132__pyx_v_key); __pyx_10genexpr132__pyx_v_key = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_10genexpr132__pyx_v_key); __pyx_10genexpr132__pyx_v_key = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_1);
  __pyx_t_1 = 0;
+6060:         return [
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6060, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_1);
+6061:             t for t in self.transition_log if t[0] in keys or keys.intersection(t[3])
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transition_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6061, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_5 = __pyx_t_2; __Pyx_INCREF(__pyx_t_5); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6061, __pyx_L11_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 6061, __pyx_L11_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6061, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 6061, __pyx_L11_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6061, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_4(__pyx_t_5);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6061, __pyx_L11_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_10genexpr133__pyx_v_t, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_10genexpr133__pyx_v_t, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_t_2, __pyx_v_keys, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_9 = (__pyx_t_8 != 0);
      if (!__pyx_t_9) {
      } else {
        __pyx_t_6 = __pyx_t_9;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_keys, __pyx_n_s_intersection); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_GetItemInt(__pyx_10genexpr133__pyx_v_t, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_2 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 6061, __pyx_L11_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = __pyx_t_9;
      __pyx_L15_bool_binop_done:;
      if (__pyx_t_6) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_10genexpr133__pyx_v_t))) __PYX_ERR(0, 6060, __pyx_L11_error)
      }
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_10genexpr133__pyx_v_t); __pyx_10genexpr133__pyx_v_t = 0;
    goto __pyx_L17_exit_scope;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_10genexpr133__pyx_v_t); __pyx_10genexpr133__pyx_v_t = 0;
    goto __pyx_L1_error;
    __pyx_L17_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6062:         ]
 6063: 
+6064:     transition_story = story
  __pyx_t_2 = PyObject_GetItem(__pyx_t_14, __pyx_n_s_story);
  if (unlikely(!__pyx_t_2)) {
    PyErr_Clear();
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_story);
  }
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_transition_story, __pyx_t_2) < 0) __PYX_ERR(0, 6064, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6065: 
+6066:     def reschedule(self, key=None, worker=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_184reschedule(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_183reschedule[] = "Reschedule a task\n\n        Things may have shifted and this task may now be better suited to run\n        elsewhere\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_184reschedule = {"reschedule", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_184reschedule, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_183reschedule};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_184reschedule(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reschedule (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_worker,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reschedule") < 0)) __PYX_ERR(0, 6066, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reschedule", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6066, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.reschedule", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_183reschedule(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_worker);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_183reschedule(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_worker) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reschedule", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.reschedule", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__360 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_worker, __pyx_n_s_parent, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__360)) __PYX_ERR(0, 6066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__360);
  __Pyx_GIVEREF(__pyx_tuple__360);
  __pyx_codeobj__361 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_reschedule, 6066, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__361)) __PYX_ERR(0, 6066, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_184reschedule, 0, __pyx_n_s_Scheduler_reschedule, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__361)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__362);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_reschedule, __pyx_t_2) < 0) __PYX_ERR(0, 6066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__362 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__362)) __PYX_ERR(0, 6066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__362);
  __Pyx_GIVEREF(__pyx_tuple__362);
 6067:         """Reschedule a task
 6068: 
 6069:         Things may have shifted and this task may now be better suited to run
 6070:         elsewhere
 6071:         """
+6072:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 6073:         ts: TaskState
+6074:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }
+6075:             ts = parent._tasks[key]
      if (unlikely(__pyx_v_parent->_tasks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6075, __pyx_L3_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_tasks, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6075, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6075, __pyx_L3_error)
      __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_1);
      __pyx_t_1 = 0;
+6076:         except KeyError:
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.reschedule", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 6076, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
+6077:             logger.warning(
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_logger); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6077, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_warning); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6077, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 6078:                 "Attempting to reschedule task {}, which was not "
+6079:                 "found on the scheduler. Aborting reschedule.".format(key)
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Attempting_to_reschedule_task_wh, __pyx_n_s_format); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6079, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_9 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_key);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6079, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6077, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 6080:             )
+6081:             return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+6082:         if ts._state != "processing":
  __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_NE)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 6082, __pyx_L1_error)
  __pyx_t_14 = (__pyx_t_13 != 0);
  if (__pyx_t_14) {
/* … */
  }
+6083:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+6084:         if worker and ts._processing_on.address != worker:
  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_v_worker); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 6084, __pyx_L1_error)
  if (__pyx_t_13) {
  } else {
    __pyx_t_14 = __pyx_t_13;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ts->_processing_on), __pyx_n_s_address); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_7, __pyx_v_worker, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_14 = __pyx_t_13;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_14) {
/* … */
  }
+6085:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+6086:         self.transitions({key: "released"})
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_transitions_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_v_key, __pyx_n_u_released) < 0) __PYX_ERR(0, 6086, __pyx_L1_error)
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6087: 
 6088:     #####################
 6089:     # Utility functions #
 6090:     #####################
 6091: 
+6092:     def add_resources(self, comm=None, worker=None, resources=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_186add_resources(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_186add_resources = {"add_resources", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_186add_resources, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_186add_resources(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_v_resources = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_resources (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_worker,&__pyx_n_s_resources,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resources);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_resources") < 0)) __PYX_ERR(0, 6092, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_worker = values[2];
    __pyx_v_resources = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_resources", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6092, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_185add_resources(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_worker, __pyx_v_resources);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_185add_resources(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_worker, PyObject *__pyx_v_resources) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_resource = NULL;
  PyObject *__pyx_v_quantity = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_resources", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.add_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_resource);
  __Pyx_XDECREF(__pyx_v_quantity);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__363 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_worker, __pyx_n_s_resources, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_resource, __pyx_n_s_quantity); if (unlikely(!__pyx_tuple__363)) __PYX_ERR(0, 6092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__363);
  __Pyx_GIVEREF(__pyx_tuple__363);
  __pyx_codeobj__364 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__363, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_resources, 6092, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__364)) __PYX_ERR(0, 6092, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_186add_resources, 0, __pyx_n_s_Scheduler_add_resources, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__364)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__365);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_resources, __pyx_t_2) < 0) __PYX_ERR(0, 6092, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__365 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__365)) __PYX_ERR(0, 6092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__365);
  __Pyx_GIVEREF(__pyx_tuple__365);
+6093:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6094:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 6094, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6094, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6095:         if resources:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_resources); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6095, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+6096:             ws._resources.update(resources)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_ws->_resources, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_resources) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_resources);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6097:         ws._used_resources = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_ws->_used_resources);
  __Pyx_DECREF(__pyx_v_ws->_used_resources);
  __pyx_v_ws->_used_resources = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6098:         for resource, quantity in ws._resources.items():
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_ws->_resources == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 6098, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_ws->_resources, 1, __pyx_n_s_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_4, NULL, __pyx_t_7);
    if (unlikely(__pyx_t_8 == 0)) break;
    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 6098, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_resource, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_quantity, __pyx_t_4);
    __pyx_t_4 = 0;
+6099:             ws._used_resources[resource] = 0
    if (unlikely(__pyx_v_ws->_used_resources == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 6099, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_ws->_used_resources, __pyx_v_resource, __pyx_int_0) < 0)) __PYX_ERR(0, 6099, __pyx_L1_error)
+6100:             parent._resources[resource][worker] = quantity
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_parent->_resources, __pyx_v_resource); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(PyObject_SetItem(__pyx_t_4, __pyx_v_worker, __pyx_v_quantity) < 0)) __PYX_ERR(0, 6100, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6101:         return "OK"
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_n_u_OK);
  __pyx_r = __pyx_n_u_OK;
  goto __pyx_L0;
 6102: 
+6103:     def remove_resources(self, worker):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_188remove_resources(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_188remove_resources = {"remove_resources", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_188remove_resources, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_188remove_resources(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_resources (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("remove_resources", 1, 2, 2, 1); __PYX_ERR(0, 6103, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove_resources") < 0)) __PYX_ERR(0, 6103, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_resources", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6103, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_187remove_resources(__pyx_self, __pyx_v_self, __pyx_v_worker);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_187remove_resources(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_resource = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_quantity = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_resources", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.remove_resources", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_resource);
  __Pyx_XDECREF(__pyx_v_quantity);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__366 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_resource, __pyx_n_s_quantity); if (unlikely(!__pyx_tuple__366)) __PYX_ERR(0, 6103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__366);
  __Pyx_GIVEREF(__pyx_tuple__366);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_188remove_resources, 0, __pyx_n_s_Scheduler_remove_resources, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__367)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_remove_resources, __pyx_t_2) < 0) __PYX_ERR(0, 6103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__367 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__366, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_resources, 6103, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__367)) __PYX_ERR(0, 6103, __pyx_L1_error)
+6104:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6105:         ws: WorkerState = parent._workers_dv[worker]
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 6105, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_workers_dv, __pyx_v_worker); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6105, __pyx_L1_error)
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6106:         for resource, quantity in ws._resources.items():
  __pyx_t_2 = 0;
  if (unlikely(__pyx_v_ws->_resources == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 6106, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_ws->_resources, 1, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6106, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_resource, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_quantity, __pyx_t_6);
    __pyx_t_6 = 0;
+6107:             del parent._resources[resource][worker]
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_parent->_resources, __pyx_v_resource); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(PyObject_DelItem(__pyx_t_6, __pyx_v_worker) < 0)) __PYX_ERR(0, 6107, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6108: 
+6109:     def coerce_address(self, addr, resolve=True):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_190coerce_address(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_189coerce_address[] = "\n        Coerce possible input addresses to canonical form.\n        *resolve* can be disabled for testing with fake hostnames.\n\n        Handles strings, tuples, or aliases.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_190coerce_address = {"coerce_address", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_190coerce_address, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_189coerce_address};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_190coerce_address(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_addr = 0;
  PyObject *__pyx_v_resolve = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coerce_address (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_addr,&__pyx_n_s_resolve,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("coerce_address", 0, 2, 3, 1); __PYX_ERR(0, 6109, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resolve);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coerce_address") < 0)) __PYX_ERR(0, 6109, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_addr = values[1];
    __pyx_v_resolve = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("coerce_address", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6109, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.coerce_address", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_189coerce_address(__pyx_self, __pyx_v_self, __pyx_v_addr, __pyx_v_resolve);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_189coerce_address(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_resolve) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coerce_address", 0);
  __Pyx_INCREF(__pyx_v_addr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.coerce_address", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_addr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__368 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_addr, __pyx_n_s_resolve, __pyx_n_s_parent); if (unlikely(!__pyx_tuple__368)) __PYX_ERR(0, 6109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__368);
  __Pyx_GIVEREF(__pyx_tuple__368);
  __pyx_codeobj__369 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__368, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_coerce_address, 6109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__369)) __PYX_ERR(0, 6109, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_190coerce_address, 0, __pyx_n_s_Scheduler_coerce_address, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__369)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__370);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_coerce_address, __pyx_t_2) < 0) __PYX_ERR(0, 6109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__370 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__370)) __PYX_ERR(0, 6109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__370);
  __Pyx_GIVEREF(__pyx_tuple__370);
 6110:         """
 6111:         Coerce possible input addresses to canonical form.
 6112:         *resolve* can be disabled for testing with fake hostnames.
 6113: 
 6114:         Handles strings, tuples, or aliases.
 6115:         """
 6116:         # XXX how many address-parsing routines do we have?
+6117:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6118:         if addr in parent._aliases:
  if (unlikely(__pyx_v_parent->_aliases == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6118, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_addr, __pyx_v_parent->_aliases, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6118, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6119:             addr = parent._aliases[addr]
    if (unlikely(__pyx_v_parent->_aliases == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 6119, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_parent->_aliases, __pyx_v_addr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_addr, __pyx_t_1);
    __pyx_t_1 = 0;
+6120:         if isinstance(addr, tuple):
  __pyx_t_3 = PyTuple_Check(__pyx_v_addr); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+6121:             addr = unparse_host_port(*addr)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_unparse_host_port); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_addr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_addr, __pyx_t_5);
    __pyx_t_5 = 0;
+6122:         if not isinstance(addr, str):
  __pyx_t_2 = PyUnicode_Check(__pyx_v_addr); 
  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+6123:             raise TypeError("addresses should be strings or tuples, got %r" % (addr,))
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_addr), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_addresses_should_be_strings_or_t, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(0, 6123, __pyx_L1_error)
 6124: 
+6125:         if resolve:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_resolve); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6125, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
    goto __pyx_L6;
  }
+6126:             addr = resolve_address(addr)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_resolve_address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_addr) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_addr);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_addr, __pyx_t_5);
    __pyx_t_5 = 0;
 6127:         else:
+6128:             addr = normalize_address(addr)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_normalize_address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_addr) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_addr);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_addr, __pyx_t_5);
    __pyx_t_5 = 0;
  }
  __pyx_L6:;
 6129: 
+6130:         return addr
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_addr);
  __pyx_r = __pyx_v_addr;
  goto __pyx_L0;
 6131: 
+6132:     def workers_list(self, workers):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_192workers_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_191workers_list[] = "\n        List of qualifying workers\n\n        Takes a list of worker addresses or hostnames.\n        Returns a list of all worker addresses that match\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_192workers_list = {"workers_list", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_192workers_list, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_191workers_list};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_192workers_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("workers_list (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_workers,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("workers_list", 1, 2, 2, 1); __PYX_ERR(0, 6132, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "workers_list") < 0)) __PYX_ERR(0, 6132, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_workers = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("workers_list", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6132, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_list", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_191workers_list(__pyx_self, __pyx_v_self, __pyx_v_workers);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_191workers_list(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_workers) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_10genexpr134__pyx_v_ww = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("workers_list", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.workers_list", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_10genexpr134__pyx_v_ww);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__371 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_workers, __pyx_n_s_parent, __pyx_n_s_out, __pyx_n_s_w, __pyx_n_s_ww); if (unlikely(!__pyx_tuple__371)) __PYX_ERR(0, 6132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__371);
  __Pyx_GIVEREF(__pyx_tuple__371);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_192workers_list, 0, __pyx_n_s_Scheduler_workers_list, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__372)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_workers_list, __pyx_t_2) < 0) __PYX_ERR(0, 6132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__372 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_workers_list, 6132, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__372)) __PYX_ERR(0, 6132, __pyx_L1_error)
 6133:         """
 6134:         List of qualifying workers
 6135: 
 6136:         Takes a list of worker addresses or hostnames.
 6137:         Returns a list of all worker addresses that match
 6138:         """
+6139:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6140:         if workers is None:
  __pyx_t_2 = (__pyx_v_workers == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6141:             return list(parent._workers)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PySequence_List(__pyx_v_parent->_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 6142: 
+6143:         out = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6144:         for w in workers:
  if (likely(PyList_CheckExact(__pyx_v_workers)) || PyTuple_CheckExact(__pyx_v_workers)) {
    __pyx_t_1 = __pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6144, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6144, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 6144, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6144, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 6144, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6144, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 6144, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6145:             if ":" in w:
    __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__51, __pyx_v_w, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6145, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+6146:                 out.add(w)
      __pyx_t_7 = PySet_Add(__pyx_v_out, __pyx_v_w); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6146, __pyx_L1_error)
 6147:             else:
+6148:                 out.update({ww for ww in parent._workers if w in ww})  # TODO: quadratic
    /*else*/ {
      { /* enter inner scope */
        __pyx_t_6 = PySet_New(NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6148, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (likely(PyList_CheckExact(__pyx_v_parent->_workers)) || PyTuple_CheckExact(__pyx_v_parent->_workers)) {
          __pyx_t_8 = __pyx_v_parent->_workers; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0;
          __pyx_t_10 = NULL;
        } else {
          __pyx_t_9 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_parent->_workers); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6148, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_10 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6148, __pyx_L9_error)
        }
        for (;;) {
          if (likely(!__pyx_t_10)) {
            if (likely(PyList_CheckExact(__pyx_t_8))) {
              if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 6148, __pyx_L9_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6148, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 6148, __pyx_L9_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6148, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_10(__pyx_t_8);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 6148, __pyx_L9_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_XDECREF_SET(__pyx_10genexpr134__pyx_v_ww, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_w, __pyx_10genexpr134__pyx_v_ww, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6148, __pyx_L9_error)
          __pyx_t_3 = (__pyx_t_2 != 0);
          if (__pyx_t_3) {
            if (unlikely(PySet_Add(__pyx_t_6, (PyObject*)__pyx_10genexpr134__pyx_v_ww))) __PYX_ERR(0, 6148, __pyx_L9_error)
          }
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_10genexpr134__pyx_v_ww); __pyx_10genexpr134__pyx_v_ww = 0;
        goto __pyx_L13_exit_scope;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_10genexpr134__pyx_v_ww); __pyx_10genexpr134__pyx_v_ww = 0;
        goto __pyx_L1_error;
        __pyx_L13_exit_scope:;
      } /* exit inner scope */
      __pyx_t_8 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PySet_Type_update, __pyx_v_out, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6148, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_L6:;
+6149:         return list(out)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySequence_List(__pyx_v_out); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6150: 
+6151:     def start_ipython(self, comm=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_194start_ipython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_193start_ipython[] = "Start an IPython kernel\n\n        Returns Jupyter connection info dictionary.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_194start_ipython = {"start_ipython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_194start_ipython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_193start_ipython};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_194start_ipython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start_ipython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start_ipython") < 0)) __PYX_ERR(0, 6151, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("start_ipython", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6151, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start_ipython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_193start_ipython(__pyx_self, __pyx_v_self, __pyx_v_comm);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_193start_ipython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm) {
  PyObject *__pyx_v_start_ipython = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("start_ipython", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.start_ipython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start_ipython);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_197generator20(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__373 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_start_ipython); if (unlikely(!__pyx_tuple__373)) __PYX_ERR(0, 6151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__373);
  __Pyx_GIVEREF(__pyx_tuple__373);
  __pyx_codeobj__374 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_start_ipython, 6151, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__374)) __PYX_ERR(0, 6151, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_194start_ipython, 0, __pyx_n_s_Scheduler_start_ipython, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__374)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__375);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_start_ipython, __pyx_t_2) < 0) __PYX_ERR(0, 6151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__375 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__375)) __PYX_ERR(0, 6151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__375);
  __Pyx_GIVEREF(__pyx_tuple__375);
 6152:         """Start an IPython kernel
 6153: 
 6154:         Returns Jupyter connection info dictionary.
 6155:         """
+6156:         from ._ipython_utils import start_ipython
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_start_ipython);
  __Pyx_GIVEREF(__pyx_n_s_start_ipython);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_start_ipython);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_ipython_utils, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_start_ipython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_start_ipython = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6157: 
+6158:         if self._ipython_kernel is None:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ipython_kernel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__pyx_t_2 == Py_None);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
/* … */
  }
+6159:             self._ipython_kernel = start_ipython(
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_start_ipython, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ipython_kernel, __pyx_t_1) < 0) __PYX_ERR(0, 6159, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6160:                 ip=self.ip, ns={"scheduler": self}, log=logger
    __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ip, __pyx_t_1) < 0) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_scheduler, __pyx_v_self) < 0) __PYX_ERR(0, 6160, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ns, __pyx_t_1) < 0) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_log, __pyx_t_1) < 0) __PYX_ERR(0, 6160, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6161:             )
+6162:         return self._ipython_kernel.get_connection_info()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ipython_kernel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_connection_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6163: 
+6164:     async def get_profile(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_196get_profile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_196get_profile = {"get_profile", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_196get_profile, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_196get_profile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_scheduler = 0;
  PyObject *__pyx_v_server = 0;
  PyObject *__pyx_v_merge_workers = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_stop = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,&__pyx_n_s_scheduler,&__pyx_n_s_server,&__pyx_n_s_merge_workers,&__pyx_n_s_start,&__pyx_n_s_stop,&__pyx_n_s_key,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_11get_profile_2generator43(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_195get_profile(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers, PyObject *__pyx_v_scheduler, PyObject *__pyx_v_server, PyObject *__pyx_v_merge_workers, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_key) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_48_get_profile(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_48_get_profile, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6164, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_scheduler = __pyx_v_scheduler;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_scheduler);
  __pyx_cur_scope->__pyx_v_server = __pyx_v_server;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_server);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_server);
  __pyx_cur_scope->__pyx_v_merge_workers = __pyx_v_merge_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_merge_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_merge_workers);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_stop = __pyx_v_stop;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_stop);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_stop);
  __pyx_cur_scope->__pyx_v_key = __pyx_v_key;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_key);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_key);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_197generator20, __pyx_codeobj__87, (PyObject *) __pyx_cur_scope, __pyx_n_s_get_profile, __pyx_n_s_Scheduler_get_profile, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6164, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_197generator20(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6164, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("get_profile", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_200generator21(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__376 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_scheduler, __pyx_n_s_server, __pyx_n_s_merge_workers, __pyx_n_s_start, __pyx_n_s_stop, __pyx_n_s_key, __pyx_n_s_parent, __pyx_n_s_results, __pyx_n_s_response, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_r); if (unlikely(!__pyx_tuple__376)) __PYX_ERR(0, 6164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__376);
  __Pyx_GIVEREF(__pyx_tuple__376);
  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(9, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__376, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_profile, 6164, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 6164, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_196get_profile, 0, __pyx_n_s_Scheduler_get_profile, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__377);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_profile, __pyx_t_2) < 0) __PYX_ERR(0, 6164, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__377 = PyTuple_Pack(8, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_False), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__377)) __PYX_ERR(0, 6164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__377);
  __Pyx_GIVEREF(__pyx_tuple__377);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_merge_workers;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_10genexpr136__pyx_v_r;
  PyObject *__pyx_v_response;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_scheduler;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_server;
  PyObject *__pyx_v_start;
  PyObject *__pyx_v_stop;
  PyObject *__pyx_v_workers;
};

 6165:         self,
+6166:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+6167:         workers=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+6168:         scheduler=False,
    values[3] = ((PyObject *)((PyObject *)Py_False));
+6169:         server=False,
    values[4] = ((PyObject *)((PyObject *)Py_False));
+6170:         merge_workers=True,
    values[5] = ((PyObject *)((PyObject *)Py_True));
+6171:         start=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+6172:         stop=None,
    values[7] = ((PyObject *)((PyObject *)Py_None));
+6173:         key=None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scheduler);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_server);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_merge_workers);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_profile") < 0)) __PYX_ERR(0, 6164, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
    __pyx_v_scheduler = values[3];
    __pyx_v_server = values[4];
    __pyx_v_merge_workers = values[5];
    __pyx_v_start = values[6];
    __pyx_v_stop = values[7];
    __pyx_v_key = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_profile", 0, 1, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6164, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_195get_profile(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers, __pyx_v_scheduler, __pyx_v_server, __pyx_v_merge_workers, __pyx_v_start, __pyx_v_stop, __pyx_v_key);
 6174:     ):
+6175:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6176:         if workers is None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_workers == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L4;
  }
+6177:             workers = parent._workers_dv
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
 6178:         else:
+6179:             workers = set(parent._workers_dv) & set(workers)
  /*else*/ {
    __pyx_t_1 = PySet_New(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySet_New(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyNumber_And(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
  }
  __pyx_L4:;
 6180: 
+6181:         if scheduler:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_scheduler); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6181, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+6182:             return profile.get_profile(self.io_loop.profile, start=start, stop=stop)
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_profile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get_profile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_io_loop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_profile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_start, __pyx_cur_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6182, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_stop, __pyx_cur_scope->__pyx_v_stop) < 0) __PYX_ERR(0, 6182, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L0;
 6183: 
+6184:         results = await asyncio.gather(
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gather); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6184, __pyx_L1_error)
    __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4);
  } else {
    __pyx_t_4 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_4) < 0) __PYX_ERR(0, 6184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_results = __pyx_t_4;
  __pyx_t_4 = 0;
 6185:             *(
+6186:                 self.rpc(w).profile(start=start, stop=stop, key=key, server=server)
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_11get_profile_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_49_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_49_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_49_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_49_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_49_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6186, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_11get_profile_2generator43, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_get_profile_locals_gen, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_11get_profile_2generator43(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6186, __pyx_L1_error)
/* … */
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 6186, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_cur_scope->__pyx_v_w) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_profile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_start)) { __Pyx_RaiseClosureNameError("start"); __PYX_ERR(0, 6186, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_start, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6186, __pyx_L1_error)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_stop)) { __Pyx_RaiseClosureNameError("stop"); __PYX_ERR(0, 6186, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_stop, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_stop) < 0) __PYX_ERR(0, 6186, __pyx_L1_error)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_key)) { __Pyx_RaiseClosureNameError("key"); __PYX_ERR(0, 6186, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_key, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_key) < 0) __PYX_ERR(0, 6186, __pyx_L1_error)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_server)) { __Pyx_RaiseClosureNameError("server"); __PYX_ERR(0, 6186, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_server, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_server) < 0) __PYX_ERR(0, 6186, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6186, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_6 = __pyx_pf_11distributed_9scheduler_9Scheduler_11get_profile_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_49_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_48_get_profile *__pyx_outer_scope;
  PyObject *__pyx_v_w;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+6187:                 for w in workers
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) { __Pyx_RaiseClosureNameError("workers"); __PYX_ERR(0, 6187, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6187, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 6187, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6187, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 6187, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6187, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 6187, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 6188:             ),
+6189:             return_exceptions=True,
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return_exceptions, Py_True) < 0) __PYX_ERR(0, 6189, __pyx_L1_error)
 6190:         )
 6191: 
+6192:         results = [r for r in results if not isinstance(r, Exception)]
  { /* enter inner scope */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_results)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_results)) {
      __pyx_t_6 = __pyx_cur_scope->__pyx_v_results; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_results); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6192, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6192, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6192, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6192, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6192, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6192, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_6);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6192, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr136__pyx_v_r);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr136__pyx_v_r, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_3 = __Pyx_PyException_Check(__pyx_cur_scope->__pyx_10genexpr136__pyx_v_r); 
      __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
      if (__pyx_t_2) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_cur_scope->__pyx_10genexpr136__pyx_v_r))) __PYX_ERR(0, 6192, __pyx_L1_error)
      }
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } /* exit inner scope */
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_results);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_results, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
 6193: 
+6194:         if merge_workers:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_merge_workers); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6194, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L10;
  }
+6195:             response = profile.merge(*results)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_profile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_merge); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_cur_scope->__pyx_v_results); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_cur_scope->__pyx_v_response = __pyx_t_5;
    __pyx_t_5 = 0;
 6196:         else:
+6197:             response = dict(zip(workers, results))
  /*else*/ {
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_workers);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_v_results);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_cur_scope->__pyx_v_response = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __pyx_L10:;
+6198:         return response
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_response);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 6199: 
+6200:     async def get_profile_metadata(
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_199get_profile_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_199get_profile_metadata = {"get_profile_metadata", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_199get_profile_metadata, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_199get_profile_metadata(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_workers = 0;
  CYTHON_UNUSED PyObject *__pyx_v_merge_workers = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_stop = 0;
  PyObject *__pyx_v_profile_cycle_interval = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile_metadata (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_workers,&__pyx_n_s_merge_workers,&__pyx_n_s_start,&__pyx_n_s_stop,&__pyx_n_s_profile_cycle_interval,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_20get_profile_metadata_2generator44(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_198get_profile_metadata(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_workers, CYTHON_UNUSED PyObject *__pyx_v_merge_workers, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_profile_cycle_interval) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile_metadata", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6200, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_merge_workers = __pyx_v_merge_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_merge_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_merge_workers);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_stop = __pyx_v_stop;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_stop);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_stop);
  __pyx_cur_scope->__pyx_v_profile_cycle_interval = __pyx_v_profile_cycle_interval;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_profile_cycle_interval);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_profile_cycle_interval);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_200generator21, __pyx_codeobj__88, (PyObject *) __pyx_cur_scope, __pyx_n_s_get_profile_metadata, __pyx_n_s_Scheduler_get_profile_metadata, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6200, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_200generator21(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_profile_metadata", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6200, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("get_profile_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_203generator22(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__378 = PyTuple_Pack(28, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_workers, __pyx_n_s_merge_workers, __pyx_n_s_start, __pyx_n_s_stop, __pyx_n_s_profile_cycle_interval, __pyx_n_s_parent, __pyx_n_s_dt, __pyx_n_s_results, __pyx_n_s_counts, __pyx_n_s_keys, __pyx_n_s_v, __pyx_n_s_t, __pyx_n_s_d, __pyx_n_s_k, __pyx_n_s_groups1, __pyx_n_s_groups2, __pyx_n_s_last, __pyx_n_s_tt, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_r, __pyx_n_s_v, __pyx_n_s_time, __pyx_n_s_group, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__378)) __PYX_ERR(0, 6200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__378);
  __Pyx_GIVEREF(__pyx_tuple__378);
  __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(7, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__378, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_profile_metadata, 6200, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(0, 6200, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_199get_profile_metadata, 0, __pyx_n_s_Scheduler_get_profile_metadata, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__379);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_profile_metadata, __pyx_t_2) < 0) __PYX_ERR(0, 6200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__379 = PyTuple_Pack(6, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__379)) __PYX_ERR(0, 6200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__379);
  __Pyx_GIVEREF(__pyx_tuple__379);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_counts;
  PyObject *__pyx_v_d;
  PyObject *__pyx_v_dt;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_10genexpr140__pyx_v_group;
  PyObject *__pyx_v_groups1;
  PyObject *__pyx_v_groups2;
  PyObject *__pyx_10genexpr141__pyx_v_k;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_keys;
  PyObject *__pyx_v_last;
  PyObject *__pyx_v_merge_workers;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_profile_cycle_interval;
  PyObject *__pyx_10genexpr138__pyx_v_r;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_start;
  PyObject *__pyx_v_stop;
  PyObject *__pyx_v_t;
  PyObject *__pyx_10genexpr140__pyx_v_time;
  PyObject *__pyx_v_tt;
  PyObject *__pyx_10genexpr139__pyx_v_v;
  PyObject *__pyx_10genexpr142__pyx_v_v;
  PyObject *__pyx_v_v;
  PyObject *__pyx_v_workers;
};

 6201:         self,
+6202:         comm=None,
    values[1] = ((PyObject *)((PyObject *)Py_None));
+6203:         workers=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+6204:         merge_workers=True,
    values[3] = ((PyObject *)((PyObject *)Py_True));
+6205:         start=None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+6206:         stop=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+6207:         profile_cycle_interval=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_merge_workers);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_profile_cycle_interval);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_profile_metadata") < 0)) __PYX_ERR(0, 6200, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_workers = values[2];
    __pyx_v_merge_workers = values[3];
    __pyx_v_start = values[4];
    __pyx_v_stop = values[5];
    __pyx_v_profile_cycle_interval = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_profile_metadata", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6200, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile_metadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_198get_profile_metadata(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_workers, __pyx_v_merge_workers, __pyx_v_start, __pyx_v_stop, __pyx_v_profile_cycle_interval);
 6208:     ):
+6209:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6210:         dt = profile_cycle_interval or dask.config.get(
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_profile_cycle_interval); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6210, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_profile_cycle_interval);
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_profile_cycle_interval;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_distributed_worker_profile_cycle) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_distributed_worker_profile_cycle);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L4_bool_binop_done:;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_dt = __pyx_t_1;
  __pyx_t_1 = 0;
 6211:             "distributed.worker.profile.cycle"
 6212:         )
+6213:         dt = parse_timedelta(dt, default="ms")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dt);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dt);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_dt);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_default, __pyx_n_u_ms) < 0) __PYX_ERR(0, 6213, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_dt);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_dt, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
 6214: 
+6215:         if workers is None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_workers == Py_None);
  __pyx_t_6 = (__pyx_t_2 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L6;
  }
+6216:             workers = parent._workers_dv
    __pyx_t_5 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
 6217:         else:
+6218:             workers = set(parent._workers_dv) & set(workers)
  /*else*/ {
    __pyx_t_5 = PySet_New(__pyx_cur_scope->__pyx_v_parent->_workers_dv); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PySet_New(__pyx_cur_scope->__pyx_v_workers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyNumber_And(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L6:;
+6219:         results = await asyncio.gather(
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gather); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L7_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6219, __pyx_L1_error)
    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
  } else {
    __pyx_t_1 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 6219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_results = __pyx_t_1;
  __pyx_t_1 = 0;
+6220:             *(self.rpc(w).profile_metadata(start=start, stop=stop) for w in workers),
static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_20get_profile_metadata_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_51_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_51_genexpr *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_51_genexpr(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_51_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_51_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6220, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_20get_profile_metadata_2generator44, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_Scheduler_get_profile_metadata_l, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile_metadata.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_20get_profile_metadata_2generator44(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6220, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) { __Pyx_RaiseClosureNameError("workers"); __PYX_ERR(0, 6220, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_workers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6220, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 6220, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6220, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 6220, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6220, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 6220, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_w, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 6220, __pyx_L1_error) }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s_rpc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_cur_scope->__pyx_v_w) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_w);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_profile_metadata); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_start)) { __Pyx_RaiseClosureNameError("start"); __PYX_ERR(0, 6220, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_start, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6220, __pyx_L1_error)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_stop)) { __Pyx_RaiseClosureNameError("stop"); __PYX_ERR(0, 6220, __pyx_L1_error) }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_stop, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_stop) < 0) __PYX_ERR(0, 6220, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6220, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_3 = __pyx_pf_11distributed_9scheduler_9Scheduler_20get_profile_metadata_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_51_genexpr {
  PyObject_HEAD
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *__pyx_outer_scope;
  PyObject *__pyx_v_w;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+6221:             return_exceptions=True,
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return_exceptions, Py_True) < 0) __PYX_ERR(0, 6221, __pyx_L1_error)
 6222:         )
 6223: 
+6224:         results = [r for r in results if not isinstance(r, Exception)]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_results)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_results)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_results; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_results); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6224, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6224, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6224, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6224, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6224, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6224, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_3);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6224, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr138__pyx_v_r);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr138__pyx_v_r, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_6 = __Pyx_PyException_Check(__pyx_cur_scope->__pyx_10genexpr138__pyx_v_r); 
      __pyx_t_2 = ((!(__pyx_t_6 != 0)) != 0);
      if (__pyx_t_2) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_10genexpr138__pyx_v_r))) __PYX_ERR(0, 6224, __pyx_L1_error)
      }
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } /* exit inner scope */
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_results);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_results, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+6225:         counts = [v["counts"] for v in results]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_results)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_results)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_results; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_results); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6225, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6225, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6225, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6225, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6225, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_3);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6225, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr139__pyx_v_v);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr139__pyx_v_v, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_10genexpr139__pyx_v_v, __pyx_n_u_counts); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 6225, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_counts = __pyx_t_1;
  __pyx_t_1 = 0;
+6226:         counts = itertools.groupby(merge_sorted(*counts), lambda t: t[0] // dt * dt)
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_20get_profile_metadata_3lambda24(PyObject *__pyx_self, PyObject *__pyx_v_t); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_20get_profile_metadata_3lambda24 = {"lambda24", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_20get_profile_metadata_3lambda24, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_20get_profile_metadata_3lambda24(PyObject *__pyx_self, PyObject *__pyx_v_t) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda24 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda24(__pyx_self, ((PyObject *)__pyx_v_t));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda24(PyObject *__pyx_self, PyObject *__pyx_v_t) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda24", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_50_get_profile_metadata *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_t, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(!__pyx_cur_scope->__pyx_v_dt)) { __Pyx_RaiseClosureNameError("dt"); __PYX_ERR(0, 6226, __pyx_L1_error) }
  __pyx_t_2 = PyNumber_FloorDivide(__pyx_t_1, __pyx_cur_scope->__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_dt)) { __Pyx_RaiseClosureNameError("dt"); __PYX_ERR(0, 6226, __pyx_L1_error) }
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_cur_scope->__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_profile_metadata.lambda24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_itertools); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_groupby); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_merge_sorted); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_cur_scope->__pyx_v_counts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_20get_profile_metadata_3lambda24, 0, __pyx_n_s_Scheduler_get_profile_metadata_l_2, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_9, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6226, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_9, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6226, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_4);
    __pyx_t_9 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_counts);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_counts, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+6227:         counts = [(time, sum(pluck(1, group))) for time, group in counts]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_counts)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_counts)) {
      __pyx_t_5 = __pyx_cur_scope->__pyx_v_counts; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_counts); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6227, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_11 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6227, __pyx_L1_error)
          #else
          __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6227, __pyx_L1_error)
          #else
          __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        }
      } else {
        __pyx_t_11 = __pyx_t_8(__pyx_t_5);
        if (unlikely(!__pyx_t_11)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6227, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_11);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
        PyObject* sequence = __pyx_t_11;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 6227, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_9);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_3 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_12(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_3); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_3), 2) < 0) __PYX_ERR(0, 6227, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L16_unpacking_done;
        __pyx_L15_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 6227, __pyx_L1_error)
        __pyx_L16_unpacking_done:;
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_time);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_time, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_group);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_group, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pluck); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_int_1, __pyx_cur_scope->__pyx_10genexpr140__pyx_v_group};
        __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_11);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_int_1, __pyx_cur_scope->__pyx_10genexpr140__pyx_v_group};
        __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_11);
      } else
      #endif
      {
        __pyx_t_3 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_10, __pyx_int_1);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_group);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_group);
        PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_10, __pyx_cur_scope->__pyx_10genexpr140__pyx_v_group);
        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_time);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_10genexpr140__pyx_v_time);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_10genexpr140__pyx_v_time);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
      __pyx_t_9 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 6227, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } /* exit inner scope */
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_counts);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_counts, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
 6228: 
+6229:         keys = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_keys = __pyx_t_1;
  __pyx_t_1 = 0;
+6230:         for v in results:
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_results; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
  for (;;) {
    if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6230, __pyx_L1_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6231:             for t, d in v["keys"]:
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_v, __pyx_n_u_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
      __pyx_t_11 = __pyx_t_5; __Pyx_INCREF(__pyx_t_11); __pyx_t_13 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_13 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6231, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6231, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_11))) {
          if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 6231, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6231, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 6231, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6231, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_11);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6231, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
        PyObject* sequence = __pyx_t_5;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 6231, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_3);
        #else
        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6231, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6231, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6231, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_4)->tp_iternext;
        index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L21_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        index = 1; __pyx_t_3 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L21_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_3);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_4), 2) < 0) __PYX_ERR(0, 6231, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L22_unpacking_done;
        __pyx_L21_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 6231, __pyx_L1_error)
        __pyx_L22_unpacking_done:;
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_d);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_d, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+6232:                 for k in d:
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_d)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_d)) {
        __pyx_t_5 = __pyx_cur_scope->__pyx_v_d; __Pyx_INCREF(__pyx_t_5); __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6232, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_15 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6232, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_15)) {
          if (likely(PyList_CheckExact(__pyx_t_5))) {
            if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 6232, __pyx_L1_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6232, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          } else {
            if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 6232, __pyx_L1_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6232, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          }
        } else {
          __pyx_t_3 = __pyx_t_15(__pyx_t_5);
          if (unlikely(!__pyx_t_3)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 6232, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        __pyx_t_3 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6233:                     keys.add(k)
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_keys, __pyx_n_s_add); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6233, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_4, __pyx_cur_scope->__pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_cur_scope->__pyx_v_k);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6233, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+6234:         keys = {k: [] for k in keys}
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_keys)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_keys)) {
      __pyx_t_11 = __pyx_cur_scope->__pyx_v_keys; __Pyx_INCREF(__pyx_t_11); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_keys); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6234, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_11))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6234, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6234, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6234, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6234, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_11);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6234, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr141__pyx_v_k);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr141__pyx_v_k, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_10genexpr141__pyx_v_k, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 6234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } /* exit inner scope */
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_keys);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_keys, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
 6235: 
+6236:         groups1 = [v["keys"] for v in results]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_results)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_results)) {
      __pyx_t_11 = __pyx_cur_scope->__pyx_v_results; __Pyx_INCREF(__pyx_t_11); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_results); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6236, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_11))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6236, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6236, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6236, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6236, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_11);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6236, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_10genexpr142__pyx_v_v);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr142__pyx_v_v, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_10genexpr142__pyx_v_v, __pyx_n_u_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 6236, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_groups1 = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6237:         groups2 = list(merge_sorted(*groups1, key=first))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_merge_sorted); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = PySequence_Tuple(__pyx_cur_scope->__pyx_v_groups1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_first); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_t_3) < 0) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PySequence_List(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_groups2 = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
 6238: 
+6239:         last = 0
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __pyx_cur_scope->__pyx_v_last = __pyx_int_0;
+6240:         for t, d in groups2:
  __pyx_t_5 = __pyx_cur_scope->__pyx_v_groups2; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
  for (;;) {
    if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6240, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6240, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_11 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_1);
      #else
      __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext;
      index = 0; __pyx_t_11 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L31_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L31_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_9), 2) < 0) __PYX_ERR(0, 6240, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L32_unpacking_done;
      __pyx_L31_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6240, __pyx_L1_error)
      __pyx_L32_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_d);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_d, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6241:             tt = t // dt * dt
    __pyx_t_3 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_t, __pyx_cur_scope->__pyx_v_dt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_cur_scope->__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_tt);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_tt, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
+6242:             if tt > last:
    __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_tt, __pyx_cur_scope->__pyx_v_last, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6242, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6242, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
    }
+6243:                 last = tt
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tt);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_last);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_last, __pyx_cur_scope->__pyx_v_tt);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tt);
+6244:                 for k, v in keys.items():
      __pyx_t_13 = 0;
      __pyx_t_3 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_keys, 1, __pyx_n_s_items, (&__pyx_t_14), (&__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6244, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
      while (1) {
        __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_13, &__pyx_t_3, &__pyx_t_11, NULL, __pyx_t_10);
        if (unlikely(__pyx_t_16 == 0)) break;
        if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 6244, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_11);
        __pyx_t_11 = 0;
+6245:                     v.append([tt, 0])
        __pyx_t_11 = PyList_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tt);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tt);
        PyList_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_v_tt);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyList_SET_ITEM(__pyx_t_11, 1, __pyx_int_0);
        __pyx_t_17 = __Pyx_PyObject_Append(__pyx_cur_scope->__pyx_v_v, __pyx_t_11); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 6245, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6246:             for k, v in d.items():
    __pyx_t_14 = 0;
    if (unlikely(__pyx_cur_scope->__pyx_v_d == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 6246, __pyx_L1_error)
    }
    __pyx_t_11 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_d, 0, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_11;
    __pyx_t_11 = 0;
    while (1) {
      __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_13, &__pyx_t_14, &__pyx_t_11, &__pyx_t_3, NULL, __pyx_t_10);
      if (unlikely(__pyx_t_16 == 0)) break;
      if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 6246, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_11);
      __pyx_t_11 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
+6247:                 keys[k][-1][1] += v
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_keys, __pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_18 = 1;
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_11, __pyx_t_18, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_cur_scope->__pyx_v_v); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(__Pyx_SetItemInt(__pyx_t_11, __pyx_t_18, __pyx_t_9, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(0, 6247, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6248: 
+6249:         return {"counts": counts, "keys": keys}
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_counts, __pyx_cur_scope->__pyx_v_counts) < 0) __PYX_ERR(0, 6249, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_keys, __pyx_cur_scope->__pyx_v_keys) < 0) __PYX_ERR(0, 6249, __pyx_L1_error)
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 6250: 
+6251:     async def performance_report(self, comm=None, start=None, code=""):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_202performance_report(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_202performance_report = {"performance_report", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_202performance_report, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_202performance_report(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_code = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("performance_report (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_start,&__pyx_n_s_code,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject*)__pyx_kp_u__50));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "performance_report") < 0)) __PYX_ERR(0, 6251, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_start = values[2];
    __pyx_v_code = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("performance_report", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6251, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.performance_report", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_201performance_report(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_start, __pyx_v_code);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_201performance_report(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_start, PyObject *__pyx_v_code) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("performance_report", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_52_performance_report(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_52_performance_report, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6251, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_code = __pyx_v_code;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_code);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_code);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_203generator22, __pyx_codeobj__89, (PyObject *) __pyx_cur_scope, __pyx_n_s_performance_report, __pyx_n_s_Scheduler_performance_report, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6251, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.performance_report", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_203generator22(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("performance_report", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6251, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("performance_report", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_206generator23(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__380 = PyTuple_Pack(45, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_start, __pyx_n_s_code, __pyx_n_s_parent, __pyx_n_s_stop, __pyx_n_s_compute, __pyx_n_s_scheduler, __pyx_n_s_workers, __pyx_n_s_profile, __pyx_n_s_profile_to_figure, __pyx_n_s_profile_to_figure, __pyx_n_s_task_stream, __pyx_n_s_total_tasks, __pyx_n_s_timespent, __pyx_n_s_d, __pyx_n_s_x, __pyx_n_s_tasks_timings, __pyx_n_s_k, __pyx_n_s_rectangles, __pyx_n_s_task_stream_figure, __pyx_n_s_rects, __pyx_n_s_source, __pyx_n_s_BandwidthWorkers, __pyx_n_s_BandwidthTypes, __pyx_n_s_bandwidth_workers, __pyx_n_s_bandwidth_types, __pyx_n_s_Panel, __pyx_n_s_Tabs, __pyx_n_s_Div, __pyx_n_s_distributed, __pyx_n_s_ws, __pyx_n_s_html_2, __pyx_n_s_tabs, __pyx_n_s_save, __pyx_n_s_output_file, __pyx_n_s_get_env, __pyx_n_s_fn, __pyx_n_s_template_directory, __pyx_n_s_template_environment, __pyx_n_s_template, __pyx_n_s_f, __pyx_n_s_data, __pyx_n_s_ws, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__380)) __PYX_ERR(0, 6251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__380);
  __Pyx_GIVEREF(__pyx_tuple__380);
  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(4, 0, 45, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__380, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_performance_report, 6251, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(0, 6251, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_202performance_report, 0, __pyx_n_s_Scheduler_performance_report, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__381);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_performance_report, __pyx_t_2) < 0) __PYX_ERR(0, 6251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__381 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject*)__pyx_kp_u__50)); if (unlikely(!__pyx_tuple__381)) __PYX_ERR(0, 6251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__381);
  __Pyx_GIVEREF(__pyx_tuple__381);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report {
  PyObject_HEAD
  PyObject *__pyx_v_BandwidthTypes;
  PyObject *__pyx_v_BandwidthWorkers;
  PyObject *__pyx_v_Div;
  PyObject *__pyx_v_Panel;
  PyObject *__pyx_v_Tabs;
  PyObject *__pyx_v_bandwidth_types;
  PyObject *__pyx_v_bandwidth_workers;
  PyObject *__pyx_v_code;
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_compute;
  PyObject *__pyx_v_d;
  PyObject *__pyx_v_data;
  PyObject *__pyx_v_distributed;
  PyObject *__pyx_v_f;
  PyObject *__pyx_v_fn;
  PyObject *__pyx_v_get_env;
  PyObject *__pyx_v_html;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_output_file;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_profile;
  PyObject *__pyx_v_profile_to_figure;
  PyObject *__pyx_v_rectangles;
  PyObject *__pyx_v_rects;
  PyObject *__pyx_v_save;
  PyObject *__pyx_v_scheduler;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_source;
  PyObject *__pyx_v_start;
  PyObject *__pyx_v_stop;
  PyObject *__pyx_v_tabs;
  PyObject *__pyx_v_task_stream;
  PyObject *__pyx_v_task_stream_figure;
  PyObject *__pyx_v_tasks_timings;
  PyObject *__pyx_v_template;
  PyObject *__pyx_v_template_directory;
  PyObject *__pyx_v_template_environment;
  PyObject *__pyx_v_timespent;
  Py_ssize_t __pyx_v_total_tasks;
  PyObject *__pyx_v_workers;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr143__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr144__pyx_v_ws;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_v_x;
};

+6252:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6253:         stop = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_stop = __pyx_t_1;
  __pyx_t_1 = 0;
 6254:         # Profiles
+6255:         compute, scheduler, workers = await asyncio.gather(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gather); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_6 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6255, __pyx_L1_error)
    __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
  } else {
    __pyx_t_3 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 6255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 6255, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 3) < 0) __PYX_ERR(0, 6255, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 6255, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_compute = __pyx_t_6;
  __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_scheduler = __pyx_t_2;
  __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_workers = __pyx_t_5;
  __pyx_t_5 = 0;
+6256:             *[
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_6);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
+6257:                 self.get_profile(start=start),
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_get_profile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_start, __pyx_cur_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6257, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+6258:                 self.get_profile(scheduler=True, start=start),
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_get_profile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scheduler, Py_True) < 0) __PYX_ERR(0, 6258, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_start, __pyx_cur_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6258, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6259:                 self.get_profile(server=True, start=start),
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_get_profile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_server, Py_True) < 0) __PYX_ERR(0, 6259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_start, __pyx_cur_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6259, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 6260:             ]
 6261:         )
+6262:         from . import profile
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_profile);
  __Pyx_GIVEREF(__pyx_n_s_profile);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_profile);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s__50, __pyx_t_3, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_profile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_profile = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 6263: 
+6264:         def profile_to_figure(state):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_18performance_report_1profile_to_figure(PyObject *__pyx_self, PyObject *__pyx_v_state); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_18performance_report_1profile_to_figure = {"profile_to_figure", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_18performance_report_1profile_to_figure, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_18performance_report_1profile_to_figure(PyObject *__pyx_self, PyObject *__pyx_v_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("profile_to_figure (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_18performance_report_profile_to_figure(__pyx_self, ((PyObject *)__pyx_v_state));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_18performance_report_profile_to_figure(PyObject *__pyx_self, PyObject *__pyx_v_state) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *__pyx_cur_scope;
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *__pyx_outer_scope;
  PyObject *__pyx_v_data = NULL;
  PyObject *__pyx_v_figure = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_source = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("profile_to_figure", 0);
  __pyx_outer_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_52_performance_report *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.performance_report.profile_to_figure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_XDECREF(__pyx_v_figure);
  __Pyx_XDECREF(__pyx_v_source);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__90 = PyTuple_Pack(4, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_figure, __pyx_n_s_source); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 6264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__90);
  __Pyx_GIVEREF(__pyx_tuple__90);
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_18performance_report_1profile_to_figure, 0, __pyx_n_s_Scheduler_performance_report_loc, ((PyObject*)__pyx_cur_scope), __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_profile_to_figure = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_profile_to_figure, 6264, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(0, 6264, __pyx_L1_error)
+6265:             data = profile.plot_data(state)
  if (unlikely(!__pyx_cur_scope->__pyx_v_profile)) { __Pyx_RaiseClosureNameError("profile"); __PYX_ERR(0, 6265, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_profile, __pyx_n_s_plot_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_state) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_state);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_data = __pyx_t_1;
  __pyx_t_1 = 0;
+6266:             figure, source = profile.plot_figure(data, sizing_mode="stretch_both")
  if (unlikely(!__pyx_cur_scope->__pyx_v_profile)) { __Pyx_RaiseClosureNameError("profile"); __PYX_ERR(0, 6266, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_profile, __pyx_n_s_plot_figure); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_data);
  __Pyx_GIVEREF(__pyx_v_data);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_data);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_sizing_mode, __pyx_n_u_stretch_both) < 0) __PYX_ERR(0, 6266, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 6266, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 6266, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 6266, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_figure = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_source = __pyx_t_2;
  __pyx_t_2 = 0;
+6267:             return figure
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_figure);
  __pyx_r = __pyx_v_figure;
  goto __pyx_L0;
 6268: 
+6269:         compute, scheduler, workers = map(
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_profile_to_figure);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_profile_to_figure);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_profile_to_figure);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 6269, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 2; __pyx_t_6 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 3) < 0) __PYX_ERR(0, 6269, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 6269, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_compute);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_compute, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_scheduler, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
+6270:             profile_to_figure, (compute, scheduler, workers)
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_compute);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_compute);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_compute);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_scheduler);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_cur_scope->__pyx_v_workers);
 6271:         )
 6272: 
 6273:         # Task stream
+6274:         task_stream = self.get_task_stream(start=start)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_get_task_stream); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_cur_scope->__pyx_v_start) < 0) __PYX_ERR(0, 6274, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_task_stream = __pyx_t_2;
  __pyx_t_2 = 0;
+6275:         total_tasks = len(task_stream)
  __pyx_t_8 = PyObject_Length(__pyx_cur_scope->__pyx_v_task_stream); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6275, __pyx_L1_error)
  __pyx_cur_scope->__pyx_v_total_tasks = __pyx_t_8;
+6276:         timespent = defaultdict(int)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_timespent = __pyx_t_2;
  __pyx_t_2 = 0;
+6277:         for d in task_stream:
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_task_stream)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_task_stream)) {
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_task_stream; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_task_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6277, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 6277, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6277, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 6277, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6277, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_9(__pyx_t_2);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 6277, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_d);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_d, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6278:             for x in d.get("startstops", []):
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_d, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_n_u_startstops, __pyx_t_3};
      __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6278, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_n_u_startstops, __pyx_t_3};
      __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6278, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_n_u_startstops);
      __Pyx_GIVEREF(__pyx_n_u_startstops);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_n_u_startstops);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
      __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
    } else {
      __pyx_t_11 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6278, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      if (likely(!__pyx_t_12)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 6278, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6278, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 6278, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6278, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_12(__pyx_t_5);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6278, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_x);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_x, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __pyx_t_6 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6279:                 timespent[x["action"]] += x["stop"] - x["start"]
      __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_x, __pyx_n_u_action); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_timespent, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_x, __pyx_n_u_stop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_x, __pyx_n_u_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = PyNumber_Subtract(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(PyObject_SetItem(__pyx_cur_scope->__pyx_v_timespent, __pyx_t_6, __pyx_t_4) < 0)) __PYX_ERR(0, 6279, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6280:         tasks_timings = ""
  __Pyx_INCREF(__pyx_kp_u__50);
  __Pyx_GIVEREF(__pyx_kp_u__50);
  __pyx_cur_scope->__pyx_v_tasks_timings = __pyx_kp_u__50;
+6281:         for k in sorted(timespent.keys()):
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_timespent, __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_14 = PyList_Sort(__pyx_t_2); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 6281, __pyx_L1_error)
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6281, __pyx_L1_error)
  }
  __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 6281, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6282:             tasks_timings += f"\n<li> {k} time: {format_time(timespent[k])} </li>"
    __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_11 = 0;
    __pyx_t_15 = 127;
    __Pyx_INCREF(__pyx_kp_u_li);
    __pyx_t_11 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_li);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_li);
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_k, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_15;
    __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u_time_2);
    __pyx_t_11 += 7;
    __Pyx_GIVEREF(__pyx_kp_u_time_2);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_time_2);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_format_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_timespent, __pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_15;
    __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_kp_u_li_2);
    __pyx_t_11 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_li_2);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_li_2);
    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_11, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_cur_scope->__pyx_v_tasks_timings, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_tasks_timings);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_tasks_timings, ((PyObject*)__pyx_t_2));
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
 6283: 
+6284:         from .diagnostics.task_stream import rectangles
  __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_rectangles);
  __Pyx_GIVEREF(__pyx_n_s_rectangles);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_rectangles);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_diagnostics_task_stream, __pyx_t_6, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_rectangles); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_rectangles = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6285:         from .dashboard.components.scheduler import task_stream_figure
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_task_stream_figure);
  __Pyx_GIVEREF(__pyx_n_s_task_stream_figure);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_task_stream_figure);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_dashboard_components_scheduler, __pyx_t_2, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_task_stream_figure); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_task_stream_figure = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6286: 
+6287:         rects = rectangles(task_stream)
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_rectangles);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_rectangles; __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_cur_scope->__pyx_v_task_stream) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_task_stream);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_rects = __pyx_t_6;
  __pyx_t_6 = 0;
+6288:         source, task_stream = task_stream_figure(sizing_mode="stretch_both")
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_sizing_mode, __pyx_n_u_stretch_both) < 0) __PYX_ERR(0, 6288, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_task_stream_figure, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 6288, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_6)) goto __pyx_L15_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(0, 6288, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L16_unpacking_done;
    __pyx_L15_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 6288, __pyx_L1_error)
    __pyx_L16_unpacking_done:;
  }
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_source = __pyx_t_6;
  __pyx_t_6 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_task_stream);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_task_stream, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
+6289:         source.data.update(rects)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_source, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_cur_scope->__pyx_v_rects) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_cur_scope->__pyx_v_rects);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6290: 
+6291:         from distributed.dashboard.components.scheduler import (
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_distributed_dashboard_components, __pyx_t_2, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_BandwidthWorkers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_BandwidthWorkers = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_BandwidthTypes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_BandwidthTypes = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6292:             BandwidthWorkers,
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_BandwidthWorkers);
  __Pyx_GIVEREF(__pyx_n_s_BandwidthWorkers);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_BandwidthWorkers);
  __Pyx_INCREF(__pyx_n_s_BandwidthTypes);
  __Pyx_GIVEREF(__pyx_n_s_BandwidthTypes);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_BandwidthTypes);
 6293:             BandwidthTypes,
 6294:         )
 6295: 
+6296:         bandwidth_workers = BandwidthWorkers(self, sizing_mode="stretch_both")
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_self);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sizing_mode, __pyx_n_u_stretch_both) < 0) __PYX_ERR(0, 6296, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_BandwidthWorkers, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_bandwidth_workers = __pyx_t_4;
  __pyx_t_4 = 0;
+6297:         bandwidth_workers.update()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bandwidth_workers, __pyx_n_s_update); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6298:         bandwidth_types = BandwidthTypes(self, sizing_mode="stretch_both")
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_self);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sizing_mode, __pyx_n_u_stretch_both) < 0) __PYX_ERR(0, 6298, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_BandwidthTypes, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_bandwidth_types = __pyx_t_6;
  __pyx_t_6 = 0;
+6299:         bandwidth_types.update()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bandwidth_types, __pyx_n_s_update); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6300: 
+6301:         from bokeh.models import Panel, Tabs, Div
  __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_Panel);
  __Pyx_GIVEREF(__pyx_n_s_Panel);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_Panel);
  __Pyx_INCREF(__pyx_n_s_Tabs);
  __Pyx_GIVEREF(__pyx_n_s_Tabs);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_Tabs);
  __Pyx_INCREF(__pyx_n_s_Div);
  __Pyx_GIVEREF(__pyx_n_s_Div);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_n_s_Div);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_bokeh_models, __pyx_t_6, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Panel); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_Panel = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Tabs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_Tabs = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Div); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_Div = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6302:         import distributed
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_distributed, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_distributed = __pyx_t_2;
  __pyx_t_2 = 0;
 6303: 
 6304:         # HTML
 6305:         ws: WorkerState
 6306:         html = """
 6307:         <h1> Dask Performance Report </h1>
 6308: 
 6309:         <i> Select different tabs on the top for additional information </i>
 6310: 
 6311:         <h2> Duration: {time} </h2>
 6312:         <h2> Tasks Information </h2>
 6313:         <ul>
 6314:          <li> number of tasks: {ntasks} </li>
 6315:          {tasks_timings}
 6316:         </ul>
 6317: 
 6318:         <h2> Scheduler Information </h2>
 6319:         <ul>
 6320:           <li> Address: {address} </li>
 6321:           <li> Workers: {nworkers} </li>
 6322:           <li> Threads: {threads} </li>
 6323:           <li> Memory: {memory} </li>
 6324:           <li> Dask Version: {dask_version} </li>
 6325:           <li> Dask.Distributed Version: {distributed_version} </li>
 6326:         </ul>
 6327: 
 6328:         <h2> Calling Code </h2>
 6329:         <pre>
 6330: {code}
 6331:         </pre>
+6332:         """.format(
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_h1_Dask_Performance_Report_h1_i, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_html = __pyx_t_4;
  __pyx_t_4 = 0;
+6333:             time=format_time(stop - start),
  __pyx_t_6 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_format_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_13 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_stop, __pyx_cur_scope->__pyx_v_start); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_13);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_time, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6334:             ntasks=total_tasks,
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_total_tasks); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_ntasks, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6335:             tasks_timings=tasks_timings,
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_tasks_timings, __pyx_cur_scope->__pyx_v_tasks_timings) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
+6336:             address=self.address,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_address, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6337:             nworkers=len(parent._workers_dv),
  __pyx_t_4 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
  __Pyx_INCREF(__pyx_t_4);
  if (unlikely(__pyx_t_4 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 6337, __pyx_L1_error)
  }
  __pyx_t_8 = PyDict_Size(__pyx_t_4); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6337, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_nworkers, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6338:             threads=sum([ws._nthreads for ws in parent._workers_dv.values()]),
  { /* enter inner scope */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = 0;
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 6338, __pyx_L1_error)
    }
    __pyx_t_13 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_10)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_13;
    __pyx_t_13 = 0;
    while (1) {
      __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_11, &__pyx_t_8, NULL, &__pyx_t_13, NULL, __pyx_t_10);
      if (unlikely(__pyx_t_16 == 0)) break;
      if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 6338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6338, __pyx_L1_error)
      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr143__pyx_v_ws));
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr143__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_13));
      __Pyx_GIVEREF(__pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_13 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_10genexpr143__pyx_v_ws->_nthreads); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_13))) __PYX_ERR(0, 6338, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } /* exit inner scope */
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_threads, __pyx_t_5) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6339:             memory=format_bytes(
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_format_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+6340:                 sum([ws._memory_limit for ws in parent._workers_dv.values()])
  { /* enter inner scope */
    __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6340, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_11 = 0;
    if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 6340, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6340, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_8, &__pyx_t_11, NULL, &__pyx_t_3, NULL, __pyx_t_10);
      if (unlikely(__pyx_t_16 == 0)) break;
      if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 6340, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6340, __pyx_L1_error)
      __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_10genexpr144__pyx_v_ws));
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_10genexpr144__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_3));
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_10genexpr144__pyx_v_ws->_memory_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6340, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_13, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 6340, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } /* exit inner scope */
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_memory_2, __pyx_t_5) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 6341:             ),
+6342:             code=code,
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_code, __pyx_cur_scope->__pyx_v_code) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
+6343:             dask_version=dask.__version__,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dask); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_version); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dask_version, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6344:             distributed_version=distributed.__version__,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_distributed, __pyx_n_s_version); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_distributed_version, __pyx_t_4) < 0) __PYX_ERR(0, 6333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 6345:         )
+6346:         html = Div(text=html)
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_text, __pyx_cur_scope->__pyx_v_html) < 0) __PYX_ERR(0, 6346, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Div, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_html);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_html, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
 6347: 
+6348:         html = Panel(child=html, title="Summary")
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_child, __pyx_cur_scope->__pyx_v_html) < 0) __PYX_ERR(0, 6348, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_title, __pyx_n_u_Summary) < 0) __PYX_ERR(0, 6348, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_html);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_html, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
+6349:         compute = Panel(child=compute, title="Worker Profile (compute)")
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_child, __pyx_cur_scope->__pyx_v_compute) < 0) __PYX_ERR(0, 6349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_title, __pyx_kp_u_Worker_Profile_compute) < 0) __PYX_ERR(0, 6349, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_compute);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_compute, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
+6350:         workers = Panel(child=workers, title="Worker Profile (administrative)")
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_child, __pyx_cur_scope->__pyx_v_workers) < 0) __PYX_ERR(0, 6350, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_title, __pyx_kp_u_Worker_Profile_administrative) < 0) __PYX_ERR(0, 6350, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_workers, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
+6351:         scheduler = Panel(child=scheduler, title="Scheduler Profile (administrative)")
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_child, __pyx_cur_scope->__pyx_v_scheduler) < 0) __PYX_ERR(0, 6351, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_title, __pyx_kp_u_Scheduler_Profile_administrative) < 0) __PYX_ERR(0, 6351, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_scheduler, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
+6352:         task_stream = Panel(child=task_stream, title="Task Stream")
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_child, __pyx_cur_scope->__pyx_v_task_stream) < 0) __PYX_ERR(0, 6352, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_title, __pyx_kp_u_Task_Stream) < 0) __PYX_ERR(0, 6352, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_task_stream);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_task_stream, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
+6353:         bandwidth_workers = Panel(
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_bandwidth_workers);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_bandwidth_workers, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
+6354:             child=bandwidth_workers.fig, title="Bandwidth (Workers)"
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bandwidth_workers, __pyx_n_s_fig); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_child, __pyx_t_6) < 0) __PYX_ERR(0, 6354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_title, __pyx_kp_u_Bandwidth_Workers) < 0) __PYX_ERR(0, 6354, __pyx_L1_error)
 6355:         )
+6356:         bandwidth_types = Panel(child=bandwidth_types.fig, title="Bandwidth (Types)")
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_bandwidth_types, __pyx_n_s_fig); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_child, __pyx_t_4) < 0) __PYX_ERR(0, 6356, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_title, __pyx_kp_u_Bandwidth_Types) < 0) __PYX_ERR(0, 6356, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Panel, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_bandwidth_types);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_bandwidth_types, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
 6357: 
+6358:         tabs = Tabs(
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_Tabs, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_tabs = __pyx_t_6;
  __pyx_t_6 = 0;
+6359:             tabs=[
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_6 = PyList_New(7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_html);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_html);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_html);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_task_stream);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_task_stream);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_cur_scope->__pyx_v_task_stream);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_compute);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_compute);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_cur_scope->__pyx_v_compute);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  PyList_SET_ITEM(__pyx_t_6, 3, __pyx_cur_scope->__pyx_v_workers);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_scheduler);
  PyList_SET_ITEM(__pyx_t_6, 4, __pyx_cur_scope->__pyx_v_scheduler);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_bandwidth_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_bandwidth_workers);
  PyList_SET_ITEM(__pyx_t_6, 5, __pyx_cur_scope->__pyx_v_bandwidth_workers);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_bandwidth_types);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_bandwidth_types);
  PyList_SET_ITEM(__pyx_t_6, 6, __pyx_cur_scope->__pyx_v_bandwidth_types);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tabs, __pyx_t_6) < 0) __PYX_ERR(0, 6359, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6360:                 html,
 6361:                 task_stream,
 6362:                 compute,
 6363:                 workers,
 6364:                 scheduler,
 6365:                 bandwidth_workers,
 6366:                 bandwidth_types,
 6367:             ]
 6368:         )
 6369: 
+6370:         from bokeh.plotting import save, output_file
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_save);
  __Pyx_GIVEREF(__pyx_n_s_save);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_save);
  __Pyx_INCREF(__pyx_n_s_output_file);
  __Pyx_GIVEREF(__pyx_n_s_output_file);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_output_file);
  __pyx_t_4 = __Pyx_Import(__pyx_n_s_bokeh_plotting, __pyx_t_6, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_save); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_save = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_output_file); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_cur_scope->__pyx_v_output_file = __pyx_t_6;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6371:         from bokeh.core.templates import get_env
  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_n_s_get_env);
  __Pyx_GIVEREF(__pyx_n_s_get_env);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_get_env);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_bokeh_core_templates, __pyx_t_4, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_get_env); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_get_env = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6372: 
+6373:         with tmpfile(extension=".html") as fn:
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_tmpfile); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_extension, __pyx_kp_u_html) < 0) __PYX_ERR(0, 6373, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_17 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6373, __pyx_L21_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6373, __pyx_L21_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_cur_scope->__pyx_v_fn = __pyx_t_6;
          __pyx_t_6 = 0;
/* … */
        }
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        goto __pyx_L30_try_end;
        __pyx_L25_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("distributed.scheduler.Scheduler.performance_report", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 6373, __pyx_L27_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6373, __pyx_L27_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_4, NULL);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 6373, __pyx_L27_except_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_28 = __Pyx_PyObject_IsTrue(__pyx_t_22);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          if (__pyx_t_28 < 0) __PYX_ERR(0, 6373, __pyx_L27_except_error)
          __pyx_t_27 = ((!(__pyx_t_28 != 0)) != 0);
          if (__pyx_t_27) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_1, __pyx_t_6);
            __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(0, 6373, __pyx_L27_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L26_exception_handled;
        }
        __pyx_L27_except_error:;
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        goto __pyx_L1_error;
        __pyx_L26_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        __pyx_L30_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_17) {
          __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__12, NULL);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6373, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        }
        goto __pyx_L24;
      }
      __pyx_L24:;
    }
    goto __pyx_L48;
    __pyx_L21_error:;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    goto __pyx_L1_error;
    __pyx_L48:;
  }
+6374:             output_file(filename=fn, title="Dask Performance Report")
          __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6374, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_filename, __pyx_cur_scope->__pyx_v_fn) < 0) __PYX_ERR(0, 6374, __pyx_L25_error)
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_title, __pyx_kp_u_Dask_Performance_Report) < 0) __PYX_ERR(0, 6374, __pyx_L25_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_output_file, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6374, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6375:             template_directory = os.path.join(
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6375, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6375, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_join); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6375, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6376:                 os.path.dirname(os.path.abspath(__file__)), "dashboard", "templates"
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_os); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dirname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_os); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_abspath); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_file); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_21 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_21)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_21);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
            }
          }
          __pyx_t_1 = (__pyx_t_21) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_21, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_3);
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_13 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_13)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_4 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6376, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = NULL;
          __pyx_t_10 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
              __pyx_t_10 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_6)) {
            PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_4, __pyx_n_u_dashboard, __pyx_n_u_templates};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6375, __pyx_L25_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
            PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_4, __pyx_n_u_dashboard, __pyx_n_u_templates};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6375, __pyx_L25_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else
          #endif
          {
            __pyx_t_1 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6375, __pyx_L25_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (__pyx_t_5) {
              __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_t_4);
            __Pyx_INCREF(__pyx_n_u_dashboard);
            __Pyx_GIVEREF(__pyx_n_u_dashboard);
            PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_n_u_dashboard);
            __Pyx_INCREF(__pyx_n_u_templates);
            __Pyx_GIVEREF(__pyx_n_u_templates);
            PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_10, __pyx_n_u_templates);
            __pyx_t_4 = 0;
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6375, __pyx_L25_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_v_template_directory = __pyx_t_2;
          __pyx_t_2 = 0;
 6377:             )
+6378:             template_environment = get_env()
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_get_env);
          __pyx_t_6 = __pyx_cur_scope->__pyx_v_get_env; __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
            }
          }
          __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6378, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_v_template_environment = __pyx_t_2;
          __pyx_t_2 = 0;
+6379:             template_environment.loader.searchpath.append(template_directory)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_template_environment, __pyx_n_s_loader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6379, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_searchpath); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6379, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_6, __pyx_cur_scope->__pyx_v_template_directory); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 6379, __pyx_L25_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6380:             template = template_environment.get_template("performance_report.html")
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_template_environment, __pyx_n_s_get_template); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6380, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_kp_u_performance_report_html) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_performance_report_html);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6380, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_cur_scope->__pyx_v_template = __pyx_t_6;
          __pyx_t_6 = 0;
+6381:             save(tabs, filename=fn, template=template)
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6381, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tabs);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tabs);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_tabs);
          __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6381, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_filename, __pyx_cur_scope->__pyx_v_fn) < 0) __PYX_ERR(0, 6381, __pyx_L25_error)
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_template, __pyx_cur_scope->__pyx_v_template) < 0) __PYX_ERR(0, 6381, __pyx_L25_error)
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_save, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6381, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6382: 
+6383:             with open(fn) as f:
          /*with:*/ {
            __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_open, __pyx_cur_scope->__pyx_v_fn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6383, __pyx_L25_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_22 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 6383, __pyx_L25_error)
            __Pyx_GOTREF(__pyx_t_22);
            __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6383, __pyx_L31_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_4 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
              if (likely(__pyx_t_4)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
                __Pyx_INCREF(__pyx_t_4);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_6, function);
              }
            }
            __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6383, __pyx_L31_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = __pyx_t_2;
            __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            /*try:*/ {
              {
                /*try:*/ {
                  __Pyx_GIVEREF(__pyx_t_6);
                  __pyx_cur_scope->__pyx_v_f = __pyx_t_6;
                  __pyx_t_6 = 0;
/* … */
                }
                __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                goto __pyx_L40_try_end;
                __pyx_L35_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("distributed.scheduler.Scheduler.performance_report", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 6383, __pyx_L37_except_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_4 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6383, __pyx_L37_except_error)
                  __Pyx_GOTREF(__pyx_t_4);
                  __pyx_t_26 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_t_4, NULL);
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                  if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 6383, __pyx_L37_except_error)
                  __Pyx_GOTREF(__pyx_t_26);
                  __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_26);
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  if (__pyx_t_27 < 0) __PYX_ERR(0, 6383, __pyx_L37_except_error)
                  __pyx_t_28 = ((!(__pyx_t_27 != 0)) != 0);
                  if (__pyx_t_28) {
                    __Pyx_GIVEREF(__pyx_t_6);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __Pyx_XGIVEREF(__pyx_t_2);
                    __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_1, __pyx_t_2);
                    __pyx_t_6 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; 
                    __PYX_ERR(0, 6383, __pyx_L37_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  goto __pyx_L36_exception_handled;
                }
                __pyx_L37_except_error:;
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                goto __pyx_L25_error;
                __pyx_L36_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                __pyx_L40_try_end:;
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_22) {
                  __pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_tuple__12, NULL);
                  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                  if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 6383, __pyx_L25_error)
                  __Pyx_GOTREF(__pyx_t_25);
                  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                }
                goto __pyx_L34;
              }
              __pyx_L34:;
            }
            goto __pyx_L44;
            __pyx_L31_error:;
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            goto __pyx_L25_error;
            __pyx_L44:;
          }
+6384:                 data = f.read()
                  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6384, __pyx_L35_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __pyx_t_2 = NULL;
                  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
                    if (likely(__pyx_t_2)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_1, function);
                    }
                  }
                  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6384, __pyx_L35_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_GIVEREF(__pyx_t_6);
                  __pyx_cur_scope->__pyx_v_data = __pyx_t_6;
                  __pyx_t_6 = 0;
 6385: 
+6386:         return data
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_data)) { __Pyx_RaiseUnboundLocalError("data"); __PYX_ERR(0, 6386, __pyx_L1_error) }
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_data);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 6387: 
+6388:     async def get_worker_logs(self, comm=None, n=None, workers=None, nanny=False):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_205get_worker_logs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_205get_worker_logs = {"get_worker_logs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_205get_worker_logs, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_205get_worker_logs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_nanny = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_worker_logs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_n,&__pyx_n_s_workers,&__pyx_n_s_nanny,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nanny);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_worker_logs") < 0)) __PYX_ERR(0, 6388, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_n = values[2];
    __pyx_v_workers = values[3];
    __pyx_v_nanny = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_worker_logs", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6388, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_worker_logs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_204get_worker_logs(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_n, __pyx_v_workers, __pyx_v_nanny);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_204get_worker_logs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_n, PyObject *__pyx_v_workers, PyObject *__pyx_v_nanny) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_worker_logs", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6388, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_comm = __pyx_v_comm;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_comm);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_comm);
  __pyx_cur_scope->__pyx_v_n = __pyx_v_n;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_n);
  __pyx_cur_scope->__pyx_v_workers = __pyx_v_workers;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_workers);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_workers);
  __pyx_cur_scope->__pyx_v_nanny = __pyx_v_nanny;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nanny);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_nanny);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_206generator23, __pyx_codeobj__92, (PyObject *) __pyx_cur_scope, __pyx_n_s_get_worker_logs, __pyx_n_s_Scheduler_get_worker_logs, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6388, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_worker_logs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_206generator23(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_worker_logs", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6388, __pyx_L1_error)
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("get_worker_logs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__382 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_n, __pyx_n_s_workers, __pyx_n_s_nanny, __pyx_n_s_results); if (unlikely(!__pyx_tuple__382)) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__382);
  __Pyx_GIVEREF(__pyx_tuple__382);
  __pyx_codeobj__92 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__382, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_worker_logs, 6388, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__92)) __PYX_ERR(0, 6388, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_205get_worker_logs, 0, __pyx_n_s_Scheduler_get_worker_logs, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__92)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__383);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_worker_logs, __pyx_t_2) < 0) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__383 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__383)) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__383);
  __Pyx_GIVEREF(__pyx_tuple__383);
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_53_get_worker_logs {
  PyObject_HEAD
  PyObject *__pyx_v_comm;
  PyObject *__pyx_v_n;
  PyObject *__pyx_v_nanny;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_workers;
};

+6389:         results = await self.broadcast(
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_broadcast); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, awaiting value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_await:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6389, __pyx_L1_error)
    __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
  } else {
    __pyx_t_3 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 6389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_results = __pyx_t_3;
  __pyx_t_3 = 0;
+6390:             msg={"op": "get_logs", "n": n}, workers=workers, nanny=nanny
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_n_u_get_logs) < 0) __PYX_ERR(0, 6390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_n, __pyx_cur_scope->__pyx_v_n) < 0) __PYX_ERR(0, 6390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_msg, __pyx_t_3) < 0) __PYX_ERR(0, 6390, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_workers, __pyx_cur_scope->__pyx_v_workers) < 0) __PYX_ERR(0, 6390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nanny, __pyx_cur_scope->__pyx_v_nanny) < 0) __PYX_ERR(0, 6390, __pyx_L1_error)
 6391:         )
+6392:         return results
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_results);
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 6393: 
+6394:     def log_event(self, name, msg):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_208log_event(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_208log_event = {"log_event", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_208log_event, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_208log_event(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("log_event (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_name,&__pyx_n_s_msg,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("log_event", 1, 3, 3, 1); __PYX_ERR(0, 6394, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msg)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("log_event", 1, 3, 3, 2); __PYX_ERR(0, 6394, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "log_event") < 0)) __PYX_ERR(0, 6394, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_name = values[1];
    __pyx_v_msg = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("log_event", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.log_event", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_207log_event(__pyx_self, __pyx_v_self, __pyx_v_name, __pyx_v_msg);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_207log_event(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_msg) {
  PyObject *__pyx_v_event = NULL;
  PyObject *__pyx_v_n = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("log_event", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.log_event", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_event);
  __Pyx_XDECREF(__pyx_v_n);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__384 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_name, __pyx_n_s_msg, __pyx_n_s_event, __pyx_n_s_n); if (unlikely(!__pyx_tuple__384)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__384);
  __Pyx_GIVEREF(__pyx_tuple__384);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_208log_event, 0, __pyx_n_s_Scheduler_log_event, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__385)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_log_event_2, __pyx_t_2) < 0) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__385 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__384, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_log_event_2, 6394, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__385)) __PYX_ERR(0, 6394, __pyx_L1_error)
+6395:         event = (time(), msg)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_v_event = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+6396:         if isinstance(name, list):
  __pyx_t_4 = PyList_Check(__pyx_v_name); 
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+6397:             for n in name:
    if (likely(PyList_CheckExact(__pyx_v_name)) || PyTuple_CheckExact(__pyx_v_name)) {
      __pyx_t_2 = __pyx_v_name; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6397, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 6397, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6397, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 6397, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6397, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_7(__pyx_t_2);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 6397, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6398:                 self.events[n].append(event)
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_v_event); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6398, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+6399:                 self.event_counts[n] += 1
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_event_counts); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_n);
      __pyx_t_1 = __pyx_v_n;
      __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_t_1, __pyx_t_10) < 0)) __PYX_ERR(0, 6399, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 6400:         else:
+6401:             self.events[name].append(event)
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_v_event); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6401, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+6402:             self.event_counts[name] += 1
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_event_counts); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_name);
    __pyx_t_2 = __pyx_v_name;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_t_2, __pyx_t_10) < 0)) __PYX_ERR(0, 6402, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;
 6403: 
+6404:     def get_events(self, comm=None, topic=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_210get_events(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_210get_events = {"get_events", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_210get_events, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_210get_events(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_topic = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_events (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_topic,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_topic);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_events") < 0)) __PYX_ERR(0, 6404, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_topic = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_events", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6404, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_events", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_209get_events(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_topic);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_209get_events(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_topic) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_events", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.get_events", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__386 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_topic); if (unlikely(!__pyx_tuple__386)) __PYX_ERR(0, 6404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__386);
  __Pyx_GIVEREF(__pyx_tuple__386);
  __pyx_codeobj__387 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__386, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_get_events, 6404, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__387)) __PYX_ERR(0, 6404, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_210get_events, 0, __pyx_n_s_Scheduler_get_events, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__387)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__388);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_get_events, __pyx_t_2) < 0) __PYX_ERR(0, 6404, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__388 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__388)) __PYX_ERR(0, 6404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__388);
  __Pyx_GIVEREF(__pyx_tuple__388);
+6405:         if topic is not None:
  __pyx_t_1 = (__pyx_v_topic != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+6406:             return tuple(self.events[topic])
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_topic); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 6407:         else:
+6408:             return valmap(tuple, self.events)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_valmap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_events); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, ((PyObject *)(&PyTuple_Type)), __pyx_t_5};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6408, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, ((PyObject *)(&PyTuple_Type)), __pyx_t_5};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6408, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(((PyObject *)(&PyTuple_Type)));
      __Pyx_GIVEREF(((PyObject *)(&PyTuple_Type)));
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, ((PyObject *)(&PyTuple_Type)));
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 6409: 
 6410:     ###########
 6411:     # Cleanup #
 6412:     ###########
 6413: 
+6414:     def reevaluate_occupancy(self, worker_index: Py_ssize_t = 0):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_212reevaluate_occupancy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_211reevaluate_occupancy[] = "Periodically reassess task duration time\n\n        The expected duration of a task can change over time.  Unfortunately we\n        don't have a good constant-time way to propagate the effects of these\n        changes out to the summaries that they affect, like the total expected\n        runtime of each of the workers, or what tasks are stealable.\n\n        In this coroutine we walk through all of the workers and re-align their\n        estimates with the current state of tasks.  We do this periodically\n        rather than at every transition, and we only do it if the scheduler\n        process isn't under load (using psutil.Process.cpu_percent()).  This\n        lets us avoid this fringe optimization when we have better things to\n        think about.\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_212reevaluate_occupancy = {"reevaluate_occupancy", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_212reevaluate_occupancy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_211reevaluate_occupancy};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_212reevaluate_occupancy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  Py_ssize_t __pyx_v_worker_index;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reevaluate_occupancy (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker_index,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker_index);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reevaluate_occupancy") < 0)) __PYX_ERR(0, 6414, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    if (values[1]) {
      __pyx_v_worker_index = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_worker_index == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6414, __pyx_L3_error)
    } else {
      __pyx_v_worker_index = ((Py_ssize_t)((Py_ssize_t)0));
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reevaluate_occupancy", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6414, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.reevaluate_occupancy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_211reevaluate_occupancy(__pyx_self, __pyx_v_self, __pyx_v_worker_index);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_211reevaluate_occupancy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, Py_ssize_t __pyx_v_worker_index) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_last = NULL;
  PyObject *__pyx_v_next_time = NULL;
  PyObject *__pyx_v_workers = 0;
  Py_ssize_t __pyx_v_nworkers;
  CYTHON_UNUSED Py_ssize_t __pyx_v_i;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_duration = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reevaluate_occupancy", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.reevaluate_occupancy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_last);
  __Pyx_XDECREF(__pyx_v_next_time);
  __Pyx_XDECREF(__pyx_v_workers);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_215generator24(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__389 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_worker_index, __pyx_n_s_parent, __pyx_n_s_last, __pyx_n_s_next_time, __pyx_n_s_workers, __pyx_n_s_nworkers, __pyx_n_s_i, __pyx_n_s_ws, __pyx_n_s_duration); if (unlikely(!__pyx_tuple__389)) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__389);
  __Pyx_GIVEREF(__pyx_tuple__389);
/* … */
  __pyx_t_2 = PyInt_FromSsize_t(((Py_ssize_t)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_worker_index, __pyx_n_u_Py_ssize_t) < 0) __PYX_ERR(0, 6414, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_212reevaluate_occupancy, 0, __pyx_n_s_Scheduler_reevaluate_occupancy, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__390)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_t_12);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_reevaluate_occupancy, __pyx_t_9) < 0) __PYX_ERR(0, 6414, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_codeobj__390 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__389, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_reevaluate_occupancy, 6414, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__390)) __PYX_ERR(0, 6414, __pyx_L1_error)
 6415:         """Periodically reassess task duration time
 6416: 
 6417:         The expected duration of a task can change over time.  Unfortunately we
 6418:         don't have a good constant-time way to propagate the effects of these
 6419:         changes out to the summaries that they affect, like the total expected
 6420:         runtime of each of the workers, or what tasks are stealable.
 6421: 
 6422:         In this coroutine we walk through all of the workers and re-align their
 6423:         estimates with the current state of tasks.  We do this periodically
 6424:         rather than at every transition, and we only do it if the scheduler
 6425:         process isn't under load (using psutil.Process.cpu_percent()).  This
 6426:         lets us avoid this fringe optimization when we have better things to
 6427:         think about.
 6428:         """
+6429:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6430:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }
+6431:             if self.status == Status.closed:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6431, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6431, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_closed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6431, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6431, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 6431, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_7) {
/* … */
      }
+6432:                 return
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L7_try_return;
 6433: 
+6434:             last = time()
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6434, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6434, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_last = __pyx_t_5;
      __pyx_t_5 = 0;
+6435:             next_time = timedelta(seconds=0.1)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6435, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6435, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_seconds, __pyx_float_0_1) < 0) __PYX_ERR(0, 6435, __pyx_L3_error)
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6435, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_next_time = __pyx_t_1;
      __pyx_t_1 = 0;
 6436: 
+6437:             if self.proc.cpu_percent() < 50:
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_proc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6437, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_cpu_percent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6437, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6437, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_int_50, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6437, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 6437, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_7) {
/* … */
      }
+6438:                 workers: list = list(parent._workers.values())
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_parent->_workers, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6438, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6438, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6438, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_v_workers = ((PyObject*)__pyx_t_1);
        __pyx_t_1 = 0;
+6439:                 nworkers: Py_ssize_t = len(workers)
        __pyx_t_8 = PyList_GET_SIZE(__pyx_v_workers); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6439, __pyx_L3_error)
        __pyx_v_nworkers = __pyx_t_8;
 6440:                 i: Py_ssize_t
+6441:                 for i in range(nworkers):
        __pyx_t_8 = __pyx_v_nworkers;
        __pyx_t_9 = __pyx_t_8;
        for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
          __pyx_v_i = __pyx_t_10;
+6442:                     ws: WorkerState = workers[worker_index % nworkers]
          if (unlikely(__pyx_v_nworkers == 0)) {
            PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
            __PYX_ERR(0, 6442, __pyx_L3_error)
          }
          __pyx_t_11 = __Pyx_mod_Py_ssize_t(__pyx_v_worker_index, __pyx_v_nworkers);
          __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_workers, __pyx_t_11, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6442, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6442, __pyx_L3_error)
          __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
          __pyx_t_1 = 0;
+6443:                     worker_index += 1
          __pyx_v_worker_index = (__pyx_v_worker_index + 1);
+6444:                     try:
          /*try:*/ {
+6445:                         if ws is None or not ws._processing:
            __pyx_t_12 = (((PyObject *)__pyx_v_ws) == Py_None);
            __pyx_t_13 = (__pyx_t_12 != 0);
            if (!__pyx_t_13) {
            } else {
              __pyx_t_7 = __pyx_t_13;
              goto __pyx_L19_bool_binop_done;
            }
            __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_v_ws->_processing); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 6445, __pyx_L16_error)
            __pyx_t_12 = ((!__pyx_t_13) != 0);
            __pyx_t_7 = __pyx_t_12;
            __pyx_L19_bool_binop_done:;
            if (__pyx_t_7) {
/* … */
            }
+6446:                             continue
              goto __pyx_L13_continue;
+6447:                         _reevaluate_occupancy_worker(parent, ws)
            __pyx_t_1 = __pyx_f_11distributed_9scheduler__reevaluate_occupancy_worker(__pyx_v_parent, __pyx_v_ws); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6447, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
 6448:                     finally:
+6449:                         del ws  # lose ref
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_DECREF(((PyObject *)__pyx_v_ws));
              __pyx_v_ws = NULL;
              goto __pyx_L17;
            }
            __pyx_L16_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
              if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_20);
              __Pyx_XGOTREF(__pyx_t_21);
              __Pyx_XGOTREF(__pyx_t_22);
              __pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
              {
                __Pyx_DECREF(((PyObject *)__pyx_v_ws));
                __pyx_v_ws = NULL;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_20);
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
              }
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
              __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
              goto __pyx_L3_error;
            }
            __pyx_L13_continue: {
              __Pyx_DECREF(((PyObject *)__pyx_v_ws));
              __pyx_v_ws = NULL;
              goto __pyx_L11_continue;
            }
            __pyx_L17:;
          }
 6450: 
+6451:                     duration = time() - last
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6451, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_6)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_6);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6451, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Subtract(__pyx_t_1, __pyx_v_last); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6451, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF_SET(__pyx_v_duration, __pyx_t_5);
          __pyx_t_5 = 0;
+6452:                     if duration > 0.005:  # 5ms since last release
          __pyx_t_5 = PyObject_RichCompare(__pyx_v_duration, __pyx_float_0_005, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6452, __pyx_L3_error)
          __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 6452, __pyx_L3_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (__pyx_t_7) {
/* … */
          }
          __pyx_L11_continue:;
        }
        __pyx_L12_break:;
+6453:                         next_time = timedelta(seconds=duration * 5)  # 25ms gap
            __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6453, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6453, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_6 = PyNumber_Multiply(__pyx_v_duration, __pyx_int_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6453, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_6);
            if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_seconds, __pyx_t_6) < 0) __PYX_ERR(0, 6453, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6453, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF_SET(__pyx_v_next_time, __pyx_t_6);
            __pyx_t_6 = 0;
+6454:                         break
            goto __pyx_L12_break;
 6455: 
+6456:             self.loop.add_timeout(
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_add_timeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_next_time);
      __Pyx_GIVEREF(__pyx_v_next_time);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_next_time);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
      __pyx_t_6 = 0;
/* … */
      __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 6456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_23);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
+6457:                 next_time, self.reevaluate_occupancy, worker_index=worker_index
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reevaluate_occupancy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6457, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
/* … */
      __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6457, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_23 = PyInt_FromSsize_t(__pyx_v_worker_index); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 6457, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_23);
      if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_worker_index, __pyx_t_23) < 0) __PYX_ERR(0, 6457, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
 6458:             )
 6459: 
+6460:         except Exception:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_15) {
      __Pyx_AddTraceback("distributed.scheduler.Scheduler.reevaluate_occupancy", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 6460, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_23);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);
+6461:             logger.error("Error in reevaluate occupancy", exc_info=True)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6461, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_error); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 6461, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_24);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6461, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_exc_info, Py_True) < 0) __PYX_ERR(0, 6461, __pyx_L5_except_error)
      __pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_24, __pyx_tuple__93, __pyx_t_1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 6461, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
/* … */
  __pyx_tuple__93 = PyTuple_Pack(1, __pyx_kp_u_Error_in_reevaluate_occupancy); if (unlikely(!__pyx_tuple__93)) __PYX_ERR(0, 6461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__93);
  __Pyx_GIVEREF(__pyx_tuple__93);
+6462:             raise
      __Pyx_GIVEREF(__pyx_t_23);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_6, __pyx_t_5);
      __pyx_t_23 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; 
      __PYX_ERR(0, 6462, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 6463: 
+6464:     async def check_worker_ttl(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_214check_worker_ttl(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_214check_worker_ttl = {"check_worker_ttl", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_214check_worker_ttl, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_214check_worker_ttl(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_worker_ttl (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_213check_worker_ttl(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_213check_worker_ttl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_worker_ttl", 0);
  __pyx_cur_scope = (struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl *)__pyx_tp_new_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl(__pyx_ptype_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6464, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11distributed_9scheduler_9Scheduler_215generator24, __pyx_codeobj__94, (PyObject *) __pyx_cur_scope, __pyx_n_s_check_worker_ttl, __pyx_n_s_Scheduler_check_worker_ttl, __pyx_n_s_distributed_scheduler); if (unlikely(!gen)) __PYX_ERR(0, 6464, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.check_worker_ttl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11distributed_9scheduler_9Scheduler_215generator24(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_worker_ttl", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6464, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("check_worker_ttl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__391 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_now); if (unlikely(!__pyx_tuple__391)) __PYX_ERR(0, 6464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__391);
  __Pyx_GIVEREF(__pyx_tuple__391);
/* … */
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_214check_worker_ttl, 0, __pyx_n_s_Scheduler_check_worker_ttl, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__94)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_check_worker_ttl, __pyx_t_9) < 0) __PYX_ERR(0, 6464, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_codeobj__94 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__391, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_check_worker_ttl, 6464, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__94)) __PYX_ERR(0, 6464, __pyx_L1_error)
/* … */
struct __pyx_obj_11distributed_9scheduler___pyx_scope_struct_54_check_worker_ttl {
  PyObject_HEAD
  PyObject *__pyx_v_now;
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent;
  PyObject *__pyx_v_self;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};


+6465:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 6466:         ws: WorkerState
+6467:         now = time()
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_now = __pyx_t_1;
  __pyx_t_1 = 0;
+6468:         for ws in parent._workers_dv.values():
  __pyx_t_4 = 0;
  if (unlikely(__pyx_cur_scope->__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 6468, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_4, NULL, &__pyx_t_2, NULL, __pyx_t_6);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6468, __pyx_L1_error)
    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2));
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
+6469:             if (ws._last_seen < now - self.worker_ttl) and (
    __pyx_t_2 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_ws->_last_seen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_ttl); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_now, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_9, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6469, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 6469, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_10) {
    } else {
      __pyx_t_8 = __pyx_t_10;
      goto __pyx_L7_bool_binop_done;
    }
/* … */
    if (__pyx_t_8) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+6470:                 ws._last_seen < now - 10 * heartbeat_interval(len(parent._workers_dv))
    __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_ws->_last_seen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_heartbeat_interval_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_11 = __pyx_cur_scope->__pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_11);
    if (unlikely(__pyx_t_11 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 6470, __pyx_L1_error)
    }
    __pyx_t_12 = PyDict_Size(__pyx_t_11); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_9 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_13, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Multiply(__pyx_int_10, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_now, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_9, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 6470, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __pyx_t_10;
    __pyx_L7_bool_binop_done:;
 6471:             ):
+6472:                 logger.warning(
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_logger); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6472, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_warning); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6472, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 6473:                     "Worker failed to heartbeat within %s seconds. Closing: %s",
+6474:                     self.worker_ttl,
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_worker_ttl); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6474, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+6475:                     ws,
      __pyx_t_11 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_kp_u_Worker_failed_to_heartbeat_withi, __pyx_t_9, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6472, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_kp_u_Worker_failed_to_heartbeat_withi, __pyx_t_9, ((PyObject *)__pyx_cur_scope->__pyx_v_ws)};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6472, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      {
        __pyx_t_13 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (__pyx_t_11) {
          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u_Worker_failed_to_heartbeat_withi);
        __Pyx_GIVEREF(__pyx_kp_u_Worker_failed_to_heartbeat_withi);
        PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_kp_u_Worker_failed_to_heartbeat_withi);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_t_9);
        __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
        __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_ws));
        PyTuple_SET_ITEM(__pyx_t_13, 2+__pyx_t_7, ((PyObject *)__pyx_cur_scope->__pyx_v_ws));
        __pyx_t_9 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6476:                 )
+6477:                 await self.remove_worker(address=ws._address)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_remove_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6477, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6477, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_address, __pyx_cur_scope->__pyx_v_ws->_address) < 0) __PYX_ERR(0, 6477, __pyx_L1_error)
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6477, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_13);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XGOTREF(__pyx_r);
      if (likely(__pyx_r)) {
        __Pyx_XGIVEREF(__pyx_t_1);
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
        __pyx_cur_scope->__pyx_t_3 = __pyx_t_6;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, awaiting value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L9_resume_from_await:;
        __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
        __pyx_cur_scope->__pyx_t_0 = 0;
        __Pyx_XGOTREF(__pyx_t_1);
        __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
        __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
        __pyx_t_6 = __pyx_cur_scope->__pyx_t_3;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6477, __pyx_L1_error)
      } else {
        PyObject* exc_type = __Pyx_PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
          else __PYX_ERR(0, 6477, __pyx_L1_error)
        }
      }
 6478: 
+6479:     def check_idle(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_217check_idle(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_217check_idle = {"check_idle", (PyCFunction)__pyx_pw_11distributed_9scheduler_9Scheduler_217check_idle, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_217check_idle(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_idle (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_216check_idle(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_216check_idle(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr145__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_idle", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.check_idle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr145__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__392 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent, __pyx_n_s_ws, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__392)) __PYX_ERR(0, 6479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__392);
  __Pyx_GIVEREF(__pyx_tuple__392);
/* … */
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_217check_idle, 0, __pyx_n_s_Scheduler_check_idle, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__393)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_check_idle, __pyx_t_9) < 0) __PYX_ERR(0, 6479, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_codeobj__393 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__392, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_check_idle, 6479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__393)) __PYX_ERR(0, 6479, __pyx_L1_error)
+6480:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
 6481:         ws: WorkerState
+6482:         if (
  if (__pyx_t_2) {
/* … */
  }
+6483:             any([ws._processing for ws in parent._workers_dv.values()])
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6483, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 6483, __pyx_L8_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6483, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, NULL, &__pyx_t_7, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_8 == 0)) break;
      if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 6483, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6483, __pyx_L8_error)
      __Pyx_XDECREF_SET(__pyx_10genexpr145__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_7));
      __pyx_t_7 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_10genexpr145__pyx_v_ws->_processing))) __PYX_ERR(0, 6483, __pyx_L8_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr145__pyx_v_ws); __pyx_10genexpr145__pyx_v_ws = 0;
    goto __pyx_L11_exit_scope;
    __pyx_L8_error:;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr145__pyx_v_ws); __pyx_10genexpr145__pyx_v_ws = 0;
    goto __pyx_L1_error;
    __pyx_L11_exit_scope:;
  } /* exit inner scope */
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 6483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_9) {
  } else {
    __pyx_t_2 = __pyx_t_9;
    goto __pyx_L4_bool_binop_done;
  }
+6484:             or parent._unrunnable
  __pyx_t_9 = (__pyx_v_parent->_unrunnable != Py_None)&&(PySet_GET_SIZE(__pyx_v_parent->_unrunnable) != 0);
  __pyx_t_2 = __pyx_t_9;
  __pyx_L4_bool_binop_done:;
 6485:         ):
+6486:             self.idle_since = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_idle_since, Py_None) < 0) __PYX_ERR(0, 6486, __pyx_L1_error)
+6487:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+6488:         elif not self.idle_since:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_since); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6488, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = ((!__pyx_t_2) != 0);
  if (__pyx_t_9) {
/* … */
  }
+6489:             self.idle_since = time()
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_idle_since, __pyx_t_3) < 0) __PYX_ERR(0, 6489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 6490: 
+6491:         if time() > self.idle_since + self.idle_timeout:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_since); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_10 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_10, Py_GT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 6491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_9) {
/* … */
  }
+6492:             logger.info(
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_logger); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 6493:                 "Scheduler closing after being idle for %s",
+6494:                 format_time(self.idle_timeout),
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_format_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_idle_timeout); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Scheduler_closing_after_being_id, __pyx_t_10};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6492, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u_Scheduler_closing_after_being_id, __pyx_t_10};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6492, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_kp_u_Scheduler_closing_after_being_id);
      __Pyx_GIVEREF(__pyx_kp_u_Scheduler_closing_after_being_id);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_6, __pyx_kp_u_Scheduler_closing_after_being_id);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_6, __pyx_t_10);
      __pyx_t_10 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 6495:             )
+6496:             self.loop.add_callback(self.close)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_loop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add_callback); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 6497: 
+6498:     def adaptive_target(self, comm=None, target_duration=None):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_219adaptive_target(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_9Scheduler_218adaptive_target[] = "Desired number of workers based on the current workload\n\n        This looks at the current running tasks and memory use, and returns a\n        number of desired workers.  This is often used by adaptive scheduling.\n\n        Parameters\n        ----------\n        target_duration : str\n            A desired duration of time for computations to take.  This affects\n            how rapidly the scheduler will ask to scale.\n\n        See Also\n        --------\n        distributed.deploy.Adaptive\n        ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_9Scheduler_219adaptive_target = {"adaptive_target", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_9Scheduler_219adaptive_target, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_9Scheduler_218adaptive_target};
static PyObject *__pyx_pw_11distributed_9scheduler_9Scheduler_219adaptive_target(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_target_duration = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("adaptive_target (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_comm,&__pyx_n_s_target_duration,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_duration);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adaptive_target") < 0)) __PYX_ERR(0, 6498, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_comm = values[1];
    __pyx_v_target_duration = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("adaptive_target", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6498, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.adaptive_target", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_9Scheduler_218adaptive_target(__pyx_self, __pyx_v_self, __pyx_v_comm, __pyx_v_target_duration);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_9Scheduler_218adaptive_target(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_comm, PyObject *__pyx_v_target_duration) {
  struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_parent = 0;
  PyObject *__pyx_v_cpu = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_tasks_processing = NULL;
  PyObject *__pyx_v_limit_bytes = NULL;
  PyObject *__pyx_v_worker_bytes = NULL;
  PyObject *__pyx_v_limit = NULL;
  PyObject *__pyx_v_total = NULL;
  Py_ssize_t __pyx_v_memory;
  PyObject *__pyx_v_target = NULL;
  PyObject *__pyx_v_to_close = NULL;
  PyObject *__pyx_10genexpr146__pyx_v_addr = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr146__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr147__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("adaptive_target", 0);
  __Pyx_INCREF(__pyx_v_target_duration);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("distributed.scheduler.Scheduler.adaptive_target", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_parent);
  __Pyx_XDECREF(__pyx_v_cpu);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_tasks_processing);
  __Pyx_XDECREF(__pyx_v_limit_bytes);
  __Pyx_XDECREF(__pyx_v_worker_bytes);
  __Pyx_XDECREF(__pyx_v_limit);
  __Pyx_XDECREF(__pyx_v_total);
  __Pyx_XDECREF(__pyx_v_target);
  __Pyx_XDECREF(__pyx_v_to_close);
  __Pyx_XDECREF(__pyx_10genexpr146__pyx_v_addr);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr146__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr147__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_target_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__394 = PyTuple_Pack(17, __pyx_n_s_self, __pyx_n_s_comm, __pyx_n_s_target_duration, __pyx_n_s_parent, __pyx_n_s_cpu, __pyx_n_s_ws, __pyx_n_s_tasks_processing, __pyx_n_s_limit_bytes, __pyx_n_s_worker_bytes, __pyx_n_s_limit, __pyx_n_s_total, __pyx_n_s_memory_2, __pyx_n_s_target, __pyx_n_s_to_close, __pyx_n_s_addr, __pyx_n_s_ws, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__394)) __PYX_ERR(0, 6498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__394);
  __Pyx_GIVEREF(__pyx_tuple__394);
  __pyx_codeobj__395 = (PyObject*)__Pyx_PyCode_New(3, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__394, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_adaptive_target, 6498, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__395)) __PYX_ERR(0, 6498, __pyx_L1_error)
/* … */
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_9Scheduler_219adaptive_target, 0, __pyx_n_s_Scheduler_adaptive_target, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__395)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_tuple__396);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_adaptive_target, __pyx_t_9) < 0) __PYX_ERR(0, 6498, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_tuple__396 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__396)) __PYX_ERR(0, 6498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__396);
  __Pyx_GIVEREF(__pyx_tuple__396);
 6499:         """Desired number of workers based on the current workload
 6500: 
 6501:         This looks at the current running tasks and memory use, and returns a
 6502:         number of desired workers.  This is often used by adaptive scheduling.
 6503: 
 6504:         Parameters
 6505:         ----------
 6506:         target_duration : str
 6507:             A desired duration of time for computations to take.  This affects
 6508:             how rapidly the scheduler will ask to scale.
 6509: 
 6510:         See Also
 6511:         --------
 6512:         distributed.deploy.Adaptive
 6513:         """
+6514:         parent: SchedulerState = cast(SchedulerState, self)
  __pyx_t_1 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_parent = ((struct __pyx_obj_11distributed_9scheduler_SchedulerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6515:         if target_duration is None:
  __pyx_t_2 = (__pyx_v_target_duration == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6516:             target_duration = dask.config.get("distributed.adaptive.target-duration")
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_distributed_adaptive_target_dura) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_distributed_adaptive_target_dura);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_target_duration, __pyx_t_1);
    __pyx_t_1 = 0;
+6517:         target_duration = parse_timedelta(target_duration)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_parse_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_target_duration) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_target_duration);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF_SET(__pyx_v_target_duration, __pyx_t_1);
  __pyx_t_1 = 0;
 6518: 
 6519:         # CPU
+6520:         cpu = math.ceil(
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_math); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ceil); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6521:             parent._total_occupancy / target_duration
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_parent->_total_occupancy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_target_duration); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_cpu = __pyx_t_1;
  __pyx_t_1 = 0;
 6522:         )  # TODO: threads per worker
 6523: 
 6524:         # Avoid a few long tasks from asking for many cores
 6525:         ws: WorkerState
+6526:         tasks_processing = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_tasks_processing = __pyx_int_0;
+6527:         for ws in parent._workers_dv.values():
  __pyx_t_7 = 0;
  if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 6527, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_8, &__pyx_t_7, NULL, &__pyx_t_5, NULL, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6527, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6527, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6528:             tasks_processing += len(ws._processing)
    __pyx_t_5 = __pyx_v_ws->_processing;
    __Pyx_INCREF(__pyx_t_5);
    if (unlikely(__pyx_t_5 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 6528, __pyx_L1_error)
    }
    __pyx_t_11 = PyDict_Size(__pyx_t_5); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6528, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_tasks_processing, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_tasks_processing, __pyx_t_6);
    __pyx_t_6 = 0;
 6529: 
+6530:             if tasks_processing > cpu:
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_tasks_processing, __pyx_v_cpu, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6530, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6530, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_3) {
/* … */
    }
  }
+6531:                 break
      goto __pyx_L5_break;
 6532:         else:
+6533:             cpu = min(tasks_processing, cpu)
  /*else*/ {
    __Pyx_INCREF(__pyx_v_cpu);
    __pyx_t_6 = __pyx_v_cpu;
    __Pyx_INCREF(__pyx_v_tasks_processing);
    __pyx_t_5 = __pyx_v_tasks_processing;
    __pyx_t_12 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6533, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6533, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (__pyx_t_3) {
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_4 = __pyx_t_6;
    } else {
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_4 = __pyx_t_5;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_cpu, __pyx_t_6);
    __pyx_t_6 = 0;
  }
  __pyx_L5_break:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6534: 
+6535:         if parent._unrunnable and not parent._workers_dv:
  __pyx_t_2 = (__pyx_v_parent->_unrunnable != Py_None)&&(PySet_GET_SIZE(__pyx_v_parent->_unrunnable) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_parent->_workers_dv); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6535, __pyx_L1_error)
  __pyx_t_13 = ((!__pyx_t_2) != 0);
  __pyx_t_3 = __pyx_t_13;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+6536:             cpu = max(1, cpu)
    __Pyx_INCREF(__pyx_v_cpu);
    __pyx_t_1 = __pyx_v_cpu;
    __pyx_t_14 = 1;
    __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6536, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6536, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_3) {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_6 = __pyx_t_1;
    } else {
      __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6536, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __pyx_t_5;
      __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_cpu, __pyx_t_1);
    __pyx_t_1 = 0;
 6537: 
 6538:         # Memory
+6539:         limit_bytes = {
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6539, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_1);
+6540:             addr: ws._memory_limit for addr, ws in parent._workers_dv.items()
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 6540, __pyx_L12_error)
    }
    __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6540, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_5, &__pyx_t_4, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6540, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6540, __pyx_L12_error)
      __Pyx_XDECREF_SET(__pyx_10genexpr146__pyx_v_addr, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_10genexpr146__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_10genexpr146__pyx_v_ws->_memory_limit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6540, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_10genexpr146__pyx_v_addr, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 6540, __pyx_L12_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_10genexpr146__pyx_v_addr); __pyx_10genexpr146__pyx_v_addr = 0;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr146__pyx_v_ws); __pyx_10genexpr146__pyx_v_ws = 0;
    goto __pyx_L15_exit_scope;
    __pyx_L12_error:;
    __Pyx_XDECREF(__pyx_10genexpr146__pyx_v_addr); __pyx_10genexpr146__pyx_v_addr = 0;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr146__pyx_v_ws); __pyx_10genexpr146__pyx_v_ws = 0;
    goto __pyx_L1_error;
    __pyx_L15_exit_scope:;
  } /* exit inner scope */
  __pyx_v_limit_bytes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 6541:         }
+6542:         worker_bytes = [ws._nbytes for ws in parent._workers_dv.values()]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6542, __pyx_L18_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = 0;
    if (unlikely(__pyx_v_parent->_workers_dv == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
      __PYX_ERR(0, 6542, __pyx_L18_error)
    }
    __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_parent->_workers_dv, 1, __pyx_n_s_values, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6542, __pyx_L18_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_6);
    __pyx_t_6 = __pyx_t_4;
    __pyx_t_4 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, NULL, &__pyx_t_4, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6542, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6542, __pyx_L18_error)
      __Pyx_XDECREF_SET(__pyx_10genexpr147__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_10genexpr147__pyx_v_ws->_nbytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6542, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 6542, __pyx_L18_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr147__pyx_v_ws); __pyx_10genexpr147__pyx_v_ws = 0;
    goto __pyx_L21_exit_scope;
    __pyx_L18_error:;
    __Pyx_XDECREF((PyObject *)__pyx_10genexpr147__pyx_v_ws); __pyx_10genexpr147__pyx_v_ws = 0;
    goto __pyx_L1_error;
    __pyx_L21_exit_scope:;
  } /* exit inner scope */
  __pyx_v_worker_bytes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6543:         limit = sum(limit_bytes.values())
  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_limit_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_limit = __pyx_t_6;
  __pyx_t_6 = 0;
+6544:         total = sum(worker_bytes)
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_v_worker_bytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_total = __pyx_t_6;
  __pyx_t_6 = 0;
+6545:         if total > 0.6 * limit:
  __pyx_t_6 = PyNumber_Multiply(__pyx_float_0_6, __pyx_v_limit); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_total, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6545, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6545, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L22;
  }
+6546:             memory = 2 * len(parent._workers_dv)
    __pyx_t_1 = __pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 6546, __pyx_L1_error)
    }
    __pyx_t_8 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6546, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_memory = (2 * __pyx_t_8);
 6547:         else:
+6548:             memory = 0
  /*else*/ {
    __pyx_v_memory = 0;
  }
  __pyx_L22:;
 6549: 
+6550:         target = max(memory, cpu)
  __Pyx_INCREF(__pyx_v_cpu);
  __pyx_t_1 = __pyx_v_cpu;
  __pyx_t_8 = __pyx_v_memory;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6550, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6550, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_3) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_6 = __pyx_t_1;
  } else {
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_6;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_target = __pyx_t_1;
  __pyx_t_1 = 0;
+6551:         if target >= len(parent._workers_dv):
  __pyx_t_1 = __pyx_v_parent->_workers_dv;
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 6551, __pyx_L1_error)
  }
  __pyx_t_8 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6551, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_target, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6551, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6551, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_3) {
/* … */
  }
+6552:             return target
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_target);
    __pyx_r = __pyx_v_target;
    goto __pyx_L0;
 6553:         else:  # Scale down?
+6554:             to_close = self.workers_to_close()
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_workers_to_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_to_close = __pyx_t_6;
    __pyx_t_6 = 0;
+6555:             return len(parent._workers_dv) - len(to_close)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_v_parent->_workers_dv;
    __Pyx_INCREF(__pyx_t_6);
    if (unlikely(__pyx_t_6 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 6555, __pyx_L1_error)
    }
    __pyx_t_8 = PyDict_Size(__pyx_t_6); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6555, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = PyObject_Length(__pyx_v_to_close); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6555, __pyx_L1_error)
    __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_8 - __pyx_t_7)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }
 6556: 
 6557: 
 6558: @cfunc
 6559: @exceptval(check=False)
+6560: def _remove_from_processing(state: SchedulerState, ts: TaskState) -> str:
static PyObject *__pyx_f_11distributed_9scheduler__remove_from_processing(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_w = 0;
  PyObject *__pyx_v_duration = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_remove_from_processing", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("distributed.scheduler._remove_from_processing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6561:     """
 6562:     Remove *ts* from the set of processing tasks.
 6563:     """
+6564:     ws: WorkerState = ts._processing_on
  __pyx_t_1 = ((PyObject *)__pyx_v_ts->_processing_on);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
  __pyx_t_1 = 0;
+6565:     ts._processing_on = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_ts->_processing_on);
  __Pyx_DECREF(((PyObject *)__pyx_v_ts->_processing_on));
  __pyx_v_ts->_processing_on = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None);
+6566:     w: str = ws._address
  __pyx_t_1 = __pyx_v_ws->_address;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_w = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6567:     if w in state._workers_dv:  # may have been removed
  if (unlikely(__pyx_v_state->_workers_dv == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6567, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_w, __pyx_v_state->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6567, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6568:         duration = ws._processing.pop(ts)
    if (unlikely(__pyx_v_ws->_processing == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
      __PYX_ERR(0, 6568, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_Pop(__pyx_v_ws->_processing, ((PyObject *)__pyx_v_ts), ((PyObject *)NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_duration = __pyx_t_1;
    __pyx_t_1 = 0;
+6569:         if not ws._processing:
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ws->_processing); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6569, __pyx_L1_error)
    __pyx_t_2 = ((!__pyx_t_3) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+6570:             state._total_occupancy -= ws._occupancy
      __pyx_v_state->_total_occupancy = (__pyx_v_state->_total_occupancy - __pyx_v_ws->_occupancy);
+6571:             ws._occupancy = 0
      __pyx_v_ws->_occupancy = 0.0;
 6572:         else:
+6573:             state._total_occupancy -= duration
    /*else*/ {
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_state->_total_occupancy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6573, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PyNumber_InPlaceSubtract(__pyx_t_1, __pyx_v_duration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6573, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6573, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_state->_total_occupancy = __pyx_t_5;
+6574:             ws._occupancy -= duration
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_ws->_occupancy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6574, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyNumber_InPlaceSubtract(__pyx_t_4, __pyx_v_duration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6574, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6574, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_ws->_occupancy = __pyx_t_5;
    }
    __pyx_L4:;
+6575:         state.check_idle_saturated(ws)
    __pyx_t_1 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_state->__pyx_vtab)->check_idle_saturated(__pyx_v_state, __pyx_v_ws, 0, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6576:         state.release_resources(ts, ws)
    __pyx_t_1 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_state->__pyx_vtab)->release_resources(__pyx_v_state, __pyx_v_ts, __pyx_v_ws, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6577:         return w
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_w);
    __pyx_r = __pyx_v_w;
    goto __pyx_L0;
 6578:     else:
+6579:         return None
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }
 6580: 
 6581: 
 6582: @cfunc
 6583: @exceptval(check=False)
+6584: def _add_to_memory(
static PyObject *__pyx_f_11distributed_9scheduler__add_to_memory(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws, PyObject *__pyx_v_recommendations, PyObject *__pyx_v_client_msgs, struct __pyx_opt_args_11distributed_9scheduler__add_to_memory *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler._add_to_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_11distributed_9scheduler__add_to_memory {
  int __pyx_n;
  PyObject *type;
  PyObject *typename;
};
 6585:     state: SchedulerState,
 6586:     ts: TaskState,
 6587:     ws: WorkerState,
 6588:     recommendations: dict,
 6589:     client_msgs: dict,
+6590:     type=None,
  PyObject *__pyx_v_type = ((PyObject *)Py_None);
+6591:     typename: str = None,
  PyObject *__pyx_v_typename = ((PyObject*)Py_None);
  PyObject *__pyx_v_deps = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_s = 0;
  PyObject *__pyx_v_report_msg = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_add_to_memory", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_type = __pyx_optional_args->type;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_typename = __pyx_optional_args->typename;
      }
    }
  }
 6592: ):
 6593:     """
 6594:     Add *ts* to the set of in-memory tasks.
 6595:     """
+6596:     if state._validate:
  __pyx_t_1 = (__pyx_v_state->_validate != 0);
  if (__pyx_t_1) {
/* … */
  }
+6597:         assert ts not in ws._has_what
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 6597, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_has_what, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6597, __pyx_L1_error)
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6597, __pyx_L1_error)
      }
    }
    #endif
 6598: 
+6599:     ts._who_has.add(ws)
  if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 6599, __pyx_L1_error)
  }
  __pyx_t_2 = PySet_Add(__pyx_v_ts->_who_has, ((PyObject *)__pyx_v_ws)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6599, __pyx_L1_error)
+6600:     ws._has_what.add(ts)
  if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 6600, __pyx_L1_error)
  }
  __pyx_t_2 = PySet_Add(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6600, __pyx_L1_error)
+6601:     ws._nbytes += ts.get_nbytes()
  __pyx_t_3 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 6601, __pyx_L1_error)
  __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes + __pyx_t_3);
 6602: 
+6603:     deps: list = list(ts._dependents)
  __pyx_t_4 = PySequence_List(__pyx_v_ts->_dependents); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_deps = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+6604:     if len(deps) > 1:
  __pyx_t_3 = PyList_GET_SIZE(__pyx_v_deps); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6604, __pyx_L1_error)
  __pyx_t_1 = ((__pyx_t_3 > 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+6605:         deps.sort(key=operator.attrgetter("priority"), reverse=True)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_deps, __pyx_n_s_sort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_operator); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_n_u_priority) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_n_u_priority);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_t_6) < 0) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_reverse, Py_True) < 0) __PYX_ERR(0, 6605, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6606: 
 6607:     dts: TaskState
 6608:     s: set
+6609:     for dts in deps:
  __pyx_t_6 = __pyx_v_deps; __Pyx_INCREF(__pyx_t_6); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_6)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 6609, __pyx_L1_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6609, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6610:         s = dts._waiting_on
    __pyx_t_5 = __pyx_v_dts->_waiting_on;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+6611:         if ts in s:
    if (unlikely(__pyx_v_s == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 6611, __pyx_L1_error)
    }
    __pyx_t_1 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_s, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6611, __pyx_L1_error)
    __pyx_t_9 = (__pyx_t_1 != 0);
    if (__pyx_t_9) {
/* … */
    }
+6612:             s.discard(ts)
      if (unlikely(__pyx_v_s == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
        __PYX_ERR(0, 6612, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6612, __pyx_L1_error)
+6613:             if not s:  # new task ready to run
      __pyx_t_9 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
      __pyx_t_1 = ((!__pyx_t_9) != 0);
      if (__pyx_t_1) {
/* … */
      }
+6614:                 recommendations[dts._key] = "processing"
        if (unlikely(__pyx_v_recommendations == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 6614, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_processing_2) < 0)) __PYX_ERR(0, 6614, __pyx_L1_error)
 6615: 
+6616:     for dts in ts._dependencies:
  __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_10, &__pyx_t_3, &__pyx_t_5, __pyx_t_11);
    if (unlikely(__pyx_t_12 == 0)) break;
    if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 6616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6616, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6617:         s = dts._waiters
    __pyx_t_5 = __pyx_v_dts->_waiters;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+6618:         s.discard(ts)
    if (unlikely(__pyx_v_s == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
      __PYX_ERR(0, 6618, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6618, __pyx_L1_error)
+6619:         if not s and not dts._who_wants:
    __pyx_t_9 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
    __pyx_t_13 = ((!__pyx_t_9) != 0);
    if (__pyx_t_13) {
    } else {
      __pyx_t_1 = __pyx_t_13;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_13 = (__pyx_v_dts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_wants) != 0);
    __pyx_t_9 = ((!__pyx_t_13) != 0);
    __pyx_t_1 = __pyx_t_9;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6620:             recommendations[dts._key] = "released"
      if (unlikely(__pyx_v_recommendations == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6620, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 6620, __pyx_L1_error)
 6621: 
+6622:     report_msg: dict = {}
  __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_report_msg = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
 6623:     cs: ClientState
+6624:     if not ts._waiters and not ts._who_wants:
  __pyx_t_9 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
  __pyx_t_13 = ((!__pyx_t_9) != 0);
  if (__pyx_t_13) {
  } else {
    __pyx_t_1 = __pyx_t_13;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_13 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
  __pyx_t_9 = ((!__pyx_t_13) != 0);
  __pyx_t_1 = __pyx_t_9;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L14;
  }
+6625:         recommendations[ts._key] = "released"
    if (unlikely(__pyx_v_recommendations == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 6625, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 6625, __pyx_L1_error)
 6626:     else:
+6627:         report_msg["op"] = "key-in-memory"
  /*else*/ {
    if (unlikely(PyDict_SetItem(__pyx_v_report_msg, __pyx_n_u_op, __pyx_kp_u_key_in_memory) < 0)) __PYX_ERR(0, 6627, __pyx_L1_error)
+6628:         report_msg["key"] = ts._key
    __pyx_t_6 = __pyx_v_ts->_key;
    __Pyx_INCREF(__pyx_t_6);
    if (unlikely(PyDict_SetItem(__pyx_v_report_msg, __pyx_n_u_key, __pyx_t_6) < 0)) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6629:         if type is not None:
    __pyx_t_1 = (__pyx_v_type != Py_None);
    __pyx_t_9 = (__pyx_t_1 != 0);
    if (__pyx_t_9) {
/* … */
    }
+6630:             report_msg["type"] = type
      if (unlikely(PyDict_SetItem(__pyx_v_report_msg, __pyx_n_u_type, __pyx_v_type) < 0)) __PYX_ERR(0, 6630, __pyx_L1_error)
 6631: 
+6632:         for cs in ts._who_wants:
    __pyx_t_10 = 0;
    __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_3), (&__pyx_t_11)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
    while (1) {
      __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_10, &__pyx_t_5, __pyx_t_11);
      if (unlikely(__pyx_t_12 == 0)) break;
      if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 6632, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 6632, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_5));
      __pyx_t_5 = 0;
+6633:             client_msgs[cs._client_key] = [report_msg]
      __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_report_msg);
      __Pyx_GIVEREF(__pyx_v_report_msg);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_report_msg);
      if (unlikely(__pyx_v_client_msgs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6633, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_cs->_client_key, __pyx_t_5) < 0)) __PYX_ERR(0, 6633, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __pyx_L14:;
 6634: 
+6635:     ts.state = "memory"
  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_memory_2) < 0) __PYX_ERR(0, 6635, __pyx_L1_error)
+6636:     ts._type = typename
  __Pyx_INCREF(__pyx_v_typename);
  __Pyx_GIVEREF(__pyx_v_typename);
  __Pyx_GOTREF(__pyx_v_ts->_type);
  __Pyx_DECREF(__pyx_v_ts->_type);
  __pyx_v_ts->_type = __pyx_v_typename;
+6637:     ts._group._types.add(typename)
  if (unlikely(__pyx_v_ts->_group->_types == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
    __PYX_ERR(0, 6637, __pyx_L1_error)
  }
  __pyx_t_2 = PySet_Add(__pyx_v_ts->_group->_types, __pyx_v_typename); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6637, __pyx_L1_error)
 6638: 
+6639:     cs = state._clients["fire-and-forget"]
  if (unlikely(__pyx_v_state->_clients == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 6639, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_state->_clients, __pyx_kp_u_fire_and_forget); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 6639, __pyx_L1_error)
  __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_6));
  __pyx_t_6 = 0;
+6640:     if ts in cs._wants_what:
  if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6640, __pyx_L1_error)
  }
  __pyx_t_9 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_cs->_wants_what, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 6640, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_9 != 0);
  if (__pyx_t_1) {
/* … */
  }
+6641:         _client_releases_keys(
    __pyx_t_4 = __pyx_f_11distributed_9scheduler__client_releases_keys(__pyx_v_state, ((PyObject*)__pyx_t_5), __pyx_v_cs, __pyx_v_recommendations); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    (void)(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 6642:             state,
 6643:             cs=cs,
+6644:             keys=[ts._key],
    __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_ts->_key);
    __Pyx_GIVEREF(__pyx_v_ts->_key);
    PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_ts->_key);
/* … */
    __pyx_t_5 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_5);
 6645:             recommendations=recommendations,
 6646:         )
 6647: 
 6648: 
 6649: @cfunc
 6650: @exceptval(check=False)
+6651: def _propagate_forgotten(
static PyObject *__pyx_f_11distributed_9scheduler__propagate_forgotten(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, PyObject *__pyx_v_recommendations, PyObject *__pyx_v_worker_msgs) {
  PyObject *__pyx_v_key = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  PyObject *__pyx_v_s = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_w = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_propagate_forgotten", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(((PyObject *)__pyx_t_12));
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler._propagate_forgotten", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6652:     state: SchedulerState, ts: TaskState, recommendations: dict, worker_msgs: dict
 6653: ):
+6654:     ts.state = "forgotten"
  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ts), __pyx_n_s_state, __pyx_n_u_forgotten) < 0) __PYX_ERR(0, 6654, __pyx_L1_error)
+6655:     key: str = ts._key
  __pyx_t_1 = __pyx_v_ts->_key;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_key = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 6656:     dts: TaskState
+6657:     for dts in ts._dependents:
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 6657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6657, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6658:         dts._has_lost_dependencies = True
    __pyx_v_dts->_has_lost_dependencies = 1;
+6659:         dts._dependencies.remove(ts)
    if (unlikely(__pyx_v_dts->_dependencies == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 6659, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PySet_Remove(__pyx_v_dts->_dependencies, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6659, __pyx_L1_error)
+6660:         dts._waiting_on.discard(ts)
    if (unlikely(__pyx_v_dts->_waiting_on == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
      __PYX_ERR(0, 6660, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PySet_Discard(__pyx_v_dts->_waiting_on, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6660, __pyx_L1_error)
+6661:         if dts._state not in ("memory", "erred"):
    __Pyx_INCREF(__pyx_v_dts->_state);
    __pyx_t_8 = __pyx_v_dts->_state;
    __pyx_t_10 = (__Pyx_PyUnicode_Equals(__pyx_t_8, __pyx_n_u_memory_2, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 6661, __pyx_L1_error)
    __pyx_t_11 = (__pyx_t_10 != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_9 = __pyx_t_11;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_11 = (__Pyx_PyUnicode_Equals(__pyx_t_8, __pyx_n_u_erred, Py_NE)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 6661, __pyx_L1_error)
    __pyx_t_10 = (__pyx_t_11 != 0);
    __pyx_t_9 = __pyx_t_10;
    __pyx_L6_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = (__pyx_t_9 != 0);
    if (__pyx_t_10) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6662:             # Cannot compute task anymore
+6663:             recommendations[dts._key] = "forgotten"
      if (unlikely(__pyx_v_recommendations == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6663, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 6663, __pyx_L1_error)
+6664:     ts._dependents.clear()
  if (unlikely(__pyx_v_ts->_dependents == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 6664, __pyx_L1_error)
  }
  __pyx_t_7 = PySet_Clear(__pyx_v_ts->_dependents); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6664, __pyx_L1_error)
+6665:     ts._waiters.clear()
  if (unlikely(__pyx_v_ts->_waiters == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 6665, __pyx_L1_error)
  }
  __pyx_t_7 = PySet_Clear(__pyx_v_ts->_waiters); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6665, __pyx_L1_error)
 6666: 
+6667:     for dts in ts._dependencies:
  __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6667, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 6667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6667, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6668:         dts._dependents.remove(ts)
    if (unlikely(__pyx_v_dts->_dependents == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 6668, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PySet_Remove(__pyx_v_dts->_dependents, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6668, __pyx_L1_error)
+6669:         s: set = dts._waiters
    __pyx_t_5 = __pyx_v_dts->_waiters;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+6670:         s.discard(ts)
    if (unlikely(__pyx_v_s == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard");
      __PYX_ERR(0, 6670, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PySet_Discard(__pyx_v_s, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6670, __pyx_L1_error)
+6671:         if not dts._dependents and not dts._who_wants:
    __pyx_t_9 = (__pyx_v_dts->_dependents != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_dependents) != 0);
    __pyx_t_11 = ((!__pyx_t_9) != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_10 = __pyx_t_11;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_11 = (__pyx_v_dts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_wants) != 0);
    __pyx_t_9 = ((!__pyx_t_11) != 0);
    __pyx_t_10 = __pyx_t_9;
    __pyx_L11_bool_binop_done:;
    if (__pyx_t_10) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6672:             # Task not needed anymore
+6673:             assert dts is not ts
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_10 = (__pyx_v_dts != __pyx_v_ts);
        if (unlikely(!(__pyx_t_10 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6673, __pyx_L1_error)
        }
      }
      #endif
+6674:             recommendations[dts._key] = "forgotten"
      if (unlikely(__pyx_v_recommendations == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6674, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_dts->_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 6674, __pyx_L1_error)
+6675:     ts._dependencies.clear()
  if (unlikely(__pyx_v_ts->_dependencies == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 6675, __pyx_L1_error)
  }
  __pyx_t_7 = PySet_Clear(__pyx_v_ts->_dependencies); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6675, __pyx_L1_error)
+6676:     ts._waiting_on.clear()
  if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 6676, __pyx_L1_error)
  }
  __pyx_t_7 = PySet_Clear(__pyx_v_ts->_waiting_on); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6676, __pyx_L1_error)
 6677: 
+6678:     if ts._who_has:
  __pyx_t_10 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
  if (__pyx_t_10) {
/* … */
  }
+6679:         ts._group._nbytes_in_memory -= ts.get_nbytes()
    __Pyx_INCREF(((PyObject *)__pyx_v_ts->_group));
    __pyx_t_12 = __pyx_v_ts->_group;
    __pyx_t_2 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 6679, __pyx_L1_error)
    __pyx_t_12->_nbytes_in_memory = (__pyx_t_12->_nbytes_in_memory - __pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
 6680: 
 6681:     ws: WorkerState
+6682:     for ws in ts._who_has:
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 6682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6682, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6683:         ws._has_what.remove(ts)
    if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
      __PYX_ERR(0, 6683, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PySet_Remove(__pyx_v_ws->_has_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6683, __pyx_L1_error)
+6684:         ws._nbytes -= ts.get_nbytes()
    __pyx_t_13 = __pyx_f_11distributed_9scheduler_9TaskState_get_nbytes(__pyx_v_ts, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 6684, __pyx_L1_error)
    __pyx_v_ws->_nbytes = (__pyx_v_ws->_nbytes - __pyx_t_13);
+6685:         w: str = ws._address
    __pyx_t_5 = __pyx_v_ws->_address;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_w, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+6686:         if w in state._workers_dv:  # in case worker has died
    if (unlikely(__pyx_v_state->_workers_dv == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 6686, __pyx_L1_error)
    }
    __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_v_w, __pyx_v_state->_workers_dv, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 6686, __pyx_L1_error)
    __pyx_t_9 = (__pyx_t_10 != 0);
    if (__pyx_t_9) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6687:             worker_msgs[w] = [{"op": "delete-data", "keys": [key], "report": False}]
      __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_op, __pyx_kp_u_delete_data) < 0) __PYX_ERR(0, 6687, __pyx_L1_error)
      __pyx_t_14 = PyList_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyList_SET_ITEM(__pyx_t_14, 0, __pyx_v_key);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_keys, __pyx_t_14) < 0) __PYX_ERR(0, 6687, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_u_report, Py_False) < 0) __PYX_ERR(0, 6687, __pyx_L1_error)
      __pyx_t_14 = PyList_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_14, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      if (unlikely(__pyx_v_worker_msgs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6687, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_worker_msgs, __pyx_v_w, __pyx_t_14) < 0)) __PYX_ERR(0, 6687, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+6688:     ts._who_has.clear()
  if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
    __PYX_ERR(0, 6688, __pyx_L1_error)
  }
  __pyx_t_7 = PySet_Clear(__pyx_v_ts->_who_has); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 6688, __pyx_L1_error)
 6689: 
 6690: 
 6691: @cfunc
 6692: @exceptval(check=False)
+6693: def _client_releases_keys(
static PyObject *__pyx_f_11distributed_9scheduler__client_releases_keys(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, PyObject *__pyx_v_keys, struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs, PyObject *__pyx_v_recommendations) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_v_tasks2 = 0;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_s = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_client_releases_keys", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler._client_releases_keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_tasks2);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6694:     state: SchedulerState, keys: list, cs: ClientState, recommendations: dict
 6695: ):
 6696:     """ Remove keys from client desired list """
+6697:     logger.debug("Client %s releases keys: %s", cs._client_key, keys)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Client_s_releases_keys_s, __pyx_v_cs->_client_key, __pyx_v_keys};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6697, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_Client_s_releases_keys_s, __pyx_v_cs->_client_key, __pyx_v_keys};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6697, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u_Client_s_releases_keys_s);
    __Pyx_GIVEREF(__pyx_kp_u_Client_s_releases_keys_s);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Client_s_releases_keys_s);
    __Pyx_INCREF(__pyx_v_cs->_client_key);
    __Pyx_GIVEREF(__pyx_v_cs->_client_key);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_cs->_client_key);
    __Pyx_INCREF(__pyx_v_keys);
    __Pyx_GIVEREF(__pyx_v_keys);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_keys);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6698:     ts: TaskState
+6699:     tasks2: set = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tasks2 = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6700:     for key in keys:
  if (unlikely(__pyx_v_keys == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6700, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 6700, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6701:         ts = state._tasks.get(key)
    if (unlikely(__pyx_v_state->_tasks == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 6701, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_state->_tasks, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6701, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
+6702:         if ts is not None and ts in cs._wants_what:
    __pyx_t_8 = (((PyObject *)__pyx_v_ts) != Py_None);
    __pyx_t_9 = (__pyx_t_8 != 0);
    if (__pyx_t_9) {
    } else {
      __pyx_t_7 = __pyx_t_9;
      goto __pyx_L6_bool_binop_done;
    }
    if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 6702, __pyx_L1_error)
    }
    __pyx_t_9 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_cs->_wants_what, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 6702, __pyx_L1_error)
    __pyx_t_8 = (__pyx_t_9 != 0);
    __pyx_t_7 = __pyx_t_8;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+6703:             cs._wants_what.remove(ts)
      if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 6703, __pyx_L1_error)
      }
      __pyx_t_10 = __Pyx_PySet_Remove(__pyx_v_cs->_wants_what, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6703, __pyx_L1_error)
+6704:             s: set = ts._who_wants
      __pyx_t_3 = __pyx_v_ts->_who_wants;
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_s, ((PyObject*)__pyx_t_3));
      __pyx_t_3 = 0;
+6705:             s.remove(cs)
      if (unlikely(__pyx_v_s == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "remove");
        __PYX_ERR(0, 6705, __pyx_L1_error)
      }
      __pyx_t_10 = __Pyx_PySet_Remove(__pyx_v_s, ((PyObject *)__pyx_v_cs)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6705, __pyx_L1_error)
+6706:             if not s:
      __pyx_t_7 = (__pyx_v_s != Py_None)&&(PySet_GET_SIZE(__pyx_v_s) != 0);
      __pyx_t_8 = ((!__pyx_t_7) != 0);
      if (__pyx_t_8) {
/* … */
      }
+6707:                 tasks2.add(ts)
        __pyx_t_10 = PySet_Add(__pyx_v_tasks2, ((PyObject *)__pyx_v_ts)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6707, __pyx_L1_error)
 6708: 
+6709:     for ts in tasks2:
  __pyx_t_6 = 0;
  __pyx_t_3 = __Pyx_set_iterator(__pyx_v_tasks2, 1, (&__pyx_t_11), (&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_3 = 0;
  while (1) {
    __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_6, &__pyx_t_3, __pyx_t_4);
    if (unlikely(__pyx_t_12 == 0)) break;
    if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 6709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6709, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3));
    __pyx_t_3 = 0;
+6710:         if not ts._dependents:
    __pyx_t_8 = (__pyx_v_ts->_dependents != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_dependents) != 0);
    __pyx_t_7 = ((!__pyx_t_8) != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L11;
    }
 6711:             # No live dependents, can forget
+6712:             recommendations[ts._key] = "forgotten"
      if (unlikely(__pyx_v_recommendations == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6712, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_forgotten) < 0)) __PYX_ERR(0, 6712, __pyx_L1_error)
+6713:         elif ts._state != "erred" and not ts._waiters:
    __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_erred, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 6713, __pyx_L1_error)
    __pyx_t_9 = (__pyx_t_8 != 0);
    if (__pyx_t_9) {
    } else {
      __pyx_t_7 = __pyx_t_9;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_9 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
    __pyx_t_8 = ((!__pyx_t_9) != 0);
    __pyx_t_7 = __pyx_t_8;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
    __pyx_L11:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6714:             recommendations[ts._key] = "released"
      if (unlikely(__pyx_v_recommendations == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 6714, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_recommendations, __pyx_v_ts->_key, __pyx_n_u_released) < 0)) __PYX_ERR(0, 6714, __pyx_L1_error)
 6715: 
 6716: 
 6717: @cfunc
 6718: @exceptval(check=False)
+6719: def _task_to_msg(state: SchedulerState, ts: TaskState, duration=None) -> dict:
static PyObject *__pyx_f_11distributed_9scheduler__task_to_msg(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, struct __pyx_opt_args_11distributed_9scheduler__task_to_msg *__pyx_optional_args) {
  PyObject *__pyx_v_duration = ((PyObject *)Py_None);
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_deps = 0;
  PyObject *__pyx_v_task = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr148__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr149__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr150__pyx_v_dts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_task_to_msg", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_duration = __pyx_optional_args->duration;
    }
  }
  __Pyx_INCREF(__pyx_v_duration);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler._task_to_msg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XDECREF(__pyx_v_task);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr148__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr149__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr150__pyx_v_dts);
  __Pyx_XDECREF(__pyx_v_duration);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_11distributed_9scheduler__task_to_msg {
  int __pyx_n;
  PyObject *duration;
};
 6720:     """ Convert a single computational task to a message """
 6721:     ws: WorkerState
 6722:     dts: TaskState
 6723: 
+6724:     if duration is None:
  __pyx_t_1 = (__pyx_v_duration == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+6725:         duration = state.get_task_duration(ts)
    __pyx_t_3 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_state->__pyx_vtab)->get_task_duration(__pyx_v_state, __pyx_v_ts, 0, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 6725, __pyx_L1_error)
    __pyx_t_4 = PyFloat_FromDouble(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6725, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_duration, __pyx_t_4);
    __pyx_t_4 = 0;
 6726: 
 6727:     msg: dict = {
+6728:         "op": "compute-task",
  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_op, __pyx_kp_u_compute_task) < 0) __PYX_ERR(0, 6728, __pyx_L1_error)
+6729:         "key": ts._key,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_key, __pyx_v_ts->_key) < 0) __PYX_ERR(0, 6728, __pyx_L1_error)
+6730:         "priority": ts._priority,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_priority, __pyx_v_ts->_priority) < 0) __PYX_ERR(0, 6728, __pyx_L1_error)
+6731:         "duration": duration,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_duration, __pyx_v_duration) < 0) __PYX_ERR(0, 6728, __pyx_L1_error)
  __pyx_v_msg = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 6732:     }
+6733:     if ts._resource_restrictions:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_resource_restrictions); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6733, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+6734:         msg["resource_restrictions"] = ts._resource_restrictions
    __pyx_t_4 = __pyx_v_ts->_resource_restrictions;
    __Pyx_INCREF(__pyx_t_4);
    if (unlikely(PyDict_SetItem(__pyx_v_msg, __pyx_n_u_resource_restrictions, __pyx_t_4) < 0)) __PYX_ERR(0, 6734, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6735:     if ts._actor:
  __pyx_t_2 = (__pyx_v_ts->_actor != 0);
  if (__pyx_t_2) {
/* … */
  }
+6736:         msg["actor"] = True
    if (unlikely(PyDict_SetItem(__pyx_v_msg, __pyx_n_u_actor, Py_True) < 0)) __PYX_ERR(0, 6736, __pyx_L1_error)
 6737: 
+6738:     deps: set = ts._dependencies
  __pyx_t_4 = __pyx_v_ts->_dependencies;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_v_deps = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+6739:     if deps:
  __pyx_t_2 = (__pyx_v_deps != Py_None)&&(PySet_GET_SIZE(__pyx_v_deps) != 0);
  if (__pyx_t_2) {
/* … */
  }
+6740:         msg["who_has"] = {
    { /* enter inner scope */
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6740, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_4);
/* … */
    if (unlikely(PyDict_SetItem(__pyx_v_msg, __pyx_n_u_who_has, __pyx_t_4) < 0)) __PYX_ERR(0, 6740, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+6741:             dts._key: [ws._address for ws in dts._who_has] for dts in deps
      __pyx_t_6 = 0;
      __pyx_t_9 = __Pyx_set_iterator(__pyx_v_deps, 1, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6741, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5);
      __pyx_t_5 = __pyx_t_9;
      __pyx_t_9 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_7, &__pyx_t_6, &__pyx_t_9, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6741, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6741, __pyx_L9_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr148__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
        __pyx_t_9 = 0;
        { /* enter inner scope */
          __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6741, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_12 = 0;
          __pyx_t_14 = __Pyx_set_iterator(__pyx_10genexpr148__pyx_v_dts->_who_has, 1, (&__pyx_t_13), (&__pyx_t_10)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6741, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_XDECREF(__pyx_t_11);
          __pyx_t_11 = __pyx_t_14;
          __pyx_t_14 = 0;
          while (1) {
            __pyx_t_15 = __Pyx_set_iter_next(__pyx_t_11, __pyx_t_13, &__pyx_t_12, &__pyx_t_14, __pyx_t_10);
            if (unlikely(__pyx_t_15 == 0)) break;
            if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 6741, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_14);
            if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6741, __pyx_L14_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr149__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_14));
            __pyx_t_14 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_10genexpr149__pyx_v_ws->_address))) __PYX_ERR(0, 6741, __pyx_L14_error)
          }
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr149__pyx_v_ws); __pyx_10genexpr149__pyx_v_ws = 0;
          goto __pyx_L17_exit_scope;
          __pyx_L14_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr149__pyx_v_ws); __pyx_10genexpr149__pyx_v_ws = 0;
          goto __pyx_L9_error;
          __pyx_L17_exit_scope:;
        } /* exit inner scope */
        if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_10genexpr148__pyx_v_dts->_key, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 6741, __pyx_L9_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr148__pyx_v_dts); __pyx_10genexpr148__pyx_v_dts = 0;
      goto __pyx_L18_exit_scope;
      __pyx_L9_error:;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr148__pyx_v_dts); __pyx_10genexpr148__pyx_v_dts = 0;
      goto __pyx_L1_error;
      __pyx_L18_exit_scope:;
    } /* exit inner scope */
 6742:         }
+6743:         msg["nbytes"] = {dts._key: dts._nbytes for dts in deps}
    { /* enter inner scope */
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6743, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = 0;
      __pyx_t_9 = __Pyx_set_iterator(__pyx_v_deps, 1, (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6743, __pyx_L21_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5);
      __pyx_t_5 = __pyx_t_9;
      __pyx_t_9 = 0;
      while (1) {
        __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_6, &__pyx_t_7, &__pyx_t_9, __pyx_t_8);
        if (unlikely(__pyx_t_10 == 0)) break;
        if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6743, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6743, __pyx_L21_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr150__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
        __pyx_t_9 = 0;
        __pyx_t_9 = PyInt_FromSsize_t(__pyx_10genexpr150__pyx_v_dts->_nbytes); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6743, __pyx_L21_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_10genexpr150__pyx_v_dts->_key, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 6743, __pyx_L21_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr150__pyx_v_dts); __pyx_10genexpr150__pyx_v_dts = 0;
      goto __pyx_L24_exit_scope;
      __pyx_L21_error:;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr150__pyx_v_dts); __pyx_10genexpr150__pyx_v_dts = 0;
      goto __pyx_L1_error;
      __pyx_L24_exit_scope:;
    } /* exit inner scope */
    if (unlikely(PyDict_SetItem(__pyx_v_msg, __pyx_n_u_nbytes, __pyx_t_4) < 0)) __PYX_ERR(0, 6743, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 6744: 
+6745:         if state._validate:
    __pyx_t_2 = (__pyx_v_state->_validate != 0);
    if (__pyx_t_2) {
/* … */
    }
+6746:             assert all(msg["who_has"].values())
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_msg, __pyx_n_u_who_has); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_values); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6746, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6746, __pyx_L1_error)
        }
      }
      #endif
 6747: 
+6748:     task = ts._run_spec
  __pyx_t_9 = __pyx_v_ts->_run_spec;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_v_task = __pyx_t_9;
  __pyx_t_9 = 0;
+6749:     if type(task) is dict:
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_task)) == ((PyObject *)(&PyDict_Type)));
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L26;
  }
+6750:         msg.update(task)
    __pyx_t_9 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_msg, __pyx_v_task); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 6751:     else:
+6752:         msg["task"] = task
  /*else*/ {
    if (unlikely(PyDict_SetItem(__pyx_v_msg, __pyx_n_u_task, __pyx_v_task) < 0)) __PYX_ERR(0, 6752, __pyx_L1_error)
  }
  __pyx_L26:;
 6753: 
+6754:     return msg
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_msg);
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;
 6755: 
 6756: 
 6757: @cfunc
 6758: @exceptval(check=False)
+6759: def _task_to_report_msg(state: SchedulerState, ts: TaskState) -> dict:
static PyObject *__pyx_f_11distributed_9scheduler__task_to_report_msg(CYTHON_UNUSED struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_failing_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_task_to_report_msg", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler._task_to_report_msg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_failing_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+6760:     if ts is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+6761:         return {"op": "cancelled-key", "key": ts._key}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_kp_u_cancelled_key) < 0) __PYX_ERR(0, 6761, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_key, __pyx_v_ts->_key) < 0) __PYX_ERR(0, 6761, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+6762:     elif ts._state == "forgotten":
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6762, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
  }
+6763:         return {"op": "cancelled-key", "key": ts._key}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_kp_u_cancelled_key) < 0) __PYX_ERR(0, 6763, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_key, __pyx_v_ts->_key) < 0) __PYX_ERR(0, 6763, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+6764:     elif ts._state == "memory":
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6764, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+6765:         return {"op": "key-in-memory", "key": ts._key}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_kp_u_key_in_memory) < 0) __PYX_ERR(0, 6765, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_key, __pyx_v_ts->_key) < 0) __PYX_ERR(0, 6765, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+6766:     elif ts._state == "erred":
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6766, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
  }
+6767:         failing_ts: TaskState = ts._exception_blame
    if (!(likely(((__pyx_v_ts->_exception_blame) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts->_exception_blame, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6767, __pyx_L1_error)
    __pyx_t_3 = __pyx_v_ts->_exception_blame;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_failing_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3);
    __pyx_t_3 = 0;
+6768:         return {
    __Pyx_XDECREF(__pyx_r);
+6769:             "op": "task-erred",
    __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_op, __pyx_kp_u_task_erred) < 0) __PYX_ERR(0, 6769, __pyx_L1_error)
+6770:             "key": ts._key,
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_key, __pyx_v_ts->_key) < 0) __PYX_ERR(0, 6769, __pyx_L1_error)
+6771:             "exception": failing_ts._exception,
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_exception, __pyx_v_failing_ts->_exception) < 0) __PYX_ERR(0, 6769, __pyx_L1_error)
+6772:             "traceback": failing_ts._traceback,
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_traceback, __pyx_v_failing_ts->_traceback) < 0) __PYX_ERR(0, 6769, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
 6773:         }
 6774:     else:
+6775:         return None
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }
 6776: 
 6777: 
 6778: @cfunc
 6779: @exceptval(check=False)
+6780: def _task_to_client_msgs(state: SchedulerState, ts: TaskState) -> dict:
static PyObject *__pyx_f_11distributed_9scheduler__task_to_client_msgs(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  PyObject *__pyx_v_client_keys = 0;
  PyObject *__pyx_v_report_msg = 0;
  PyObject *__pyx_v_client_msgs = 0;
  PyObject *__pyx_v_k = NULL;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_10genexpr151__pyx_v_cs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_task_to_client_msgs", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("distributed.scheduler._task_to_client_msgs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_client_keys);
  __Pyx_XDECREF(__pyx_v_report_msg);
  __Pyx_XDECREF(__pyx_v_client_msgs);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr151__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6781:     cs: ClientState
 6782:     client_keys: list
+6783:     if ts is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_ts) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
 6784:         # Notify all clients
+6785:         client_keys = list(state._clients)
    __pyx_t_3 = PySequence_List(__pyx_v_state->_clients); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_client_keys = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
 6786:     else:
 6787:         # Notify clients interested in key
+6788:         client_keys = [cs._client_key for cs in ts._who_wants]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6788, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = 0;
      __pyx_t_8 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6788, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
      while (1) {
        __pyx_t_9 = __Pyx_set_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, __pyx_t_7);
        if (unlikely(__pyx_t_9 == 0)) break;
        if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 6788, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 6788, __pyx_L6_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr151__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_8));
        __pyx_t_8 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_10genexpr151__pyx_v_cs->_client_key))) __PYX_ERR(0, 6788, __pyx_L6_error)
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr151__pyx_v_cs); __pyx_10genexpr151__pyx_v_cs = 0;
      goto __pyx_L9_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr151__pyx_v_cs); __pyx_10genexpr151__pyx_v_cs = 0;
      goto __pyx_L1_error;
      __pyx_L9_exit_scope:;
    } /* exit inner scope */
    __pyx_v_client_keys = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
 6789: 
+6790:     report_msg: dict = _task_to_report_msg(state, ts)
  __pyx_t_3 = __pyx_f_11distributed_9scheduler__task_to_report_msg(__pyx_v_state, __pyx_v_ts); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_report_msg = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 6791: 
+6792:     client_msgs: dict = {}
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_client_msgs = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+6793:     for k in client_keys:
  __pyx_t_3 = __pyx_v_client_keys; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 6793, __pyx_L1_error)
    #else
    __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+6794:         client_msgs[k] = [report_msg]
    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_report_msg);
    __Pyx_GIVEREF(__pyx_v_report_msg);
    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_report_msg);
    if (unlikely(PyDict_SetItem(__pyx_v_client_msgs, __pyx_v_k, __pyx_t_4) < 0)) __PYX_ERR(0, 6794, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 6795: 
+6796:     return client_msgs
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_client_msgs);
  __pyx_r = __pyx_v_client_msgs;
  goto __pyx_L0;
 6797: 
 6798: 
 6799: @cfunc
 6800: @exceptval(check=False)
+6801: def _reevaluate_occupancy_worker(state: SchedulerState, ws: WorkerState):
static PyObject *__pyx_f_11distributed_9scheduler__reevaluate_occupancy_worker(struct __pyx_obj_11distributed_9scheduler_SchedulerState *__pyx_v_state, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  double __pyx_v_old;
  double __pyx_v_new;
  double __pyx_v_diff;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  double __pyx_v_est;
  PyObject *__pyx_v_steal = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_reevaluate_occupancy_worker", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler._reevaluate_occupancy_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF(__pyx_v_steal);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6802:     """ See reevaluate_occupancy """
+6803:     old: double = ws._occupancy
  __pyx_t_1 = __pyx_v_ws->_occupancy;
  __pyx_v_old = __pyx_t_1;
+6804:     new: double = 0
  __pyx_v_new = 0.0;
 6805:     diff: double
 6806:     ts: TaskState
 6807:     est: double
+6808:     for ts in ws._processing:
  __pyx_t_3 = 0;
  if (unlikely(__pyx_v_ws->_processing == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 6808, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_ws->_processing, 1, ((PyObject *)NULL), (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, NULL, NULL, __pyx_t_5);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6808, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
    __pyx_t_6 = 0;
+6809:         est = state.set_duration_estimate(ts, ws)
    __pyx_t_1 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_state->__pyx_vtab)->set_duration_estimate(__pyx_v_state, __pyx_v_ts, __pyx_v_ws, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 6809, __pyx_L1_error)
    __pyx_v_est = __pyx_t_1;
+6810:         new += est
    __pyx_v_new = (__pyx_v_new + __pyx_v_est);
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6811: 
+6812:     ws._occupancy = new
  __pyx_v_ws->_occupancy = __pyx_v_new;
+6813:     diff = new - old
  __pyx_v_diff = (__pyx_v_new - __pyx_v_old);
+6814:     state._total_occupancy += diff
  __pyx_v_state->_total_occupancy = (__pyx_v_state->_total_occupancy + __pyx_v_diff);
+6815:     state.check_idle_saturated(ws)
  __pyx_t_2 = ((struct __pyx_vtabstruct_11distributed_9scheduler_SchedulerState *)__pyx_v_state->__pyx_vtab)->check_idle_saturated(__pyx_v_state, __pyx_v_ws, 0, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6816: 
 6817:     # significant increase in duration
+6818:     if new > old * 1.3:
  __pyx_t_8 = ((__pyx_v_new > (__pyx_v_old * 1.3)) != 0);
  if (__pyx_t_8) {
/* … */
  }
+6819:         steal = state._extensions.get("stealing")
    if (unlikely(__pyx_v_state->_extensions == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 6819, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_state->_extensions, __pyx_n_u_stealing, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_steal = __pyx_t_2;
    __pyx_t_2 = 0;
+6820:         if steal is not None:
    __pyx_t_8 = (__pyx_v_steal != Py_None);
    __pyx_t_9 = (__pyx_t_8 != 0);
    if (__pyx_t_9) {
/* … */
    }
+6821:             for ts in ws._processing:
      __pyx_t_4 = 0;
      if (unlikely(__pyx_v_ws->_processing == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 6821, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_ws->_processing, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6821, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_3, &__pyx_t_4, &__pyx_t_6, NULL, NULL, __pyx_t_5);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6821, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6821, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
+6822:                 steal.remove_key_from_stealable(ts)
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_steal, __pyx_n_s_remove_key_from_stealable); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6822, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_ts));
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6822, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6823:                 steal.put_key_in_stealable(ts)
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_steal, __pyx_n_s_put_key_in_stealable); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6823, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_ts));
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6823, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6824: 
 6825: 
 6826: @cfunc
 6827: @exceptval(check=False)
+6828: def decide_worker(
static struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_f_11distributed_9scheduler_decide_worker(struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts, PyObject *__pyx_v_all_workers, PyObject *__pyx_v_valid_workers, PyObject *__pyx_v_objective) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  PyObject *__pyx_v_deps = 0;
  PyObject *__pyx_v_candidates = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr152__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr153__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr153__pyx_v_ws = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decide_worker", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.decide_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr152__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_ws);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6829:     ts: TaskState, all_workers, valid_workers: set, objective
 6830: ) -> WorkerState:
 6831:     """
 6832:     Decide which worker should take task *ts*.
 6833: 
 6834:     We choose the worker that has the data on which *ts* depends.
 6835: 
 6836:     If several workers have dependencies then we choose the less-busy worker.
 6837: 
 6838:     Optionally provide *valid_workers* of where jobs are allowed to occur
 6839:     (if all workers are allowed to take the task, pass None instead).
 6840: 
 6841:     If the task requires data communication because no eligible worker has
 6842:     all the dependencies already, then we choose to minimize the number
 6843:     of bytes sent between workers.  This is determined by calling the
 6844:     *objective* function.
 6845:     """
 6846:     ws: WorkerState
 6847:     dts: TaskState
+6848:     deps: set = ts._dependencies
  __pyx_t_1 = __pyx_v_ts->_dependencies;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_deps = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 6849:     candidates: set
+6850:     assert all([dts._who_has for dts in deps])
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6850, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_deps, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6850, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, __pyx_t_5);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6850, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6850, __pyx_L5_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr152__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_10genexpr152__pyx_v_dts->_who_has))) __PYX_ERR(0, 6850, __pyx_L5_error)
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr152__pyx_v_dts); __pyx_10genexpr152__pyx_v_dts = 0;
      goto __pyx_L8_exit_scope;
      __pyx_L5_error:;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr152__pyx_v_dts); __pyx_10genexpr152__pyx_v_dts = 0;
      goto __pyx_L1_error;
      __pyx_L8_exit_scope:;
    } /* exit inner scope */
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6850, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 6850, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_8)) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 6850, __pyx_L1_error)
    }
  }
  #endif
+6851:     if ts._actor:
  __pyx_t_8 = (__pyx_v_ts->_actor != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L9;
  }
+6852:         candidates = set(all_workers)
    __pyx_t_2 = PySet_New(__pyx_v_all_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6852, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_candidates = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 6853:     else:
+6854:         candidates = {ws for dts in deps for ws in dts._who_has}
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_2 = PySet_New(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6854, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_set_iterator(__pyx_v_deps, 1, (&__pyx_t_3), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6854, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_4, &__pyx_t_6, __pyx_t_5);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6854, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6854, __pyx_L12_error)
        __Pyx_XDECREF_SET(__pyx_10genexpr153__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_6));
        __pyx_t_6 = 0;
        __pyx_t_9 = 0;
        __pyx_t_11 = __Pyx_set_iterator(__pyx_10genexpr153__pyx_v_dts->_who_has, 1, (&__pyx_t_10), (&__pyx_t_7)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6854, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_6);
        __pyx_t_6 = __pyx_t_11;
        __pyx_t_11 = 0;
        while (1) {
          __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_10, &__pyx_t_9, &__pyx_t_11, __pyx_t_7);
          if (unlikely(__pyx_t_12 == 0)) break;
          if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 6854, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6854, __pyx_L12_error)
          __Pyx_XDECREF_SET(__pyx_10genexpr153__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
          __pyx_t_11 = 0;
          if (unlikely(PySet_Add(__pyx_t_2, (PyObject*)__pyx_10genexpr153__pyx_v_ws))) __PYX_ERR(0, 6854, __pyx_L12_error)
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_dts); __pyx_10genexpr153__pyx_v_dts = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_ws); __pyx_10genexpr153__pyx_v_ws = 0;
      goto __pyx_L17_exit_scope;
      __pyx_L12_error:;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_dts); __pyx_10genexpr153__pyx_v_dts = 0;
      __Pyx_XDECREF((PyObject *)__pyx_10genexpr153__pyx_v_ws); __pyx_10genexpr153__pyx_v_ws = 0;
      goto __pyx_L1_error;
      __pyx_L17_exit_scope:;
    } /* exit inner scope */
    __pyx_v_candidates = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L9:;
+6855:     if valid_workers is None:
  __pyx_t_8 = (__pyx_v_valid_workers == ((PyObject*)Py_None));
  __pyx_t_13 = (__pyx_t_8 != 0);
  if (__pyx_t_13) {
/* … */
    goto __pyx_L18;
  }
+6856:         if not candidates:
    __pyx_t_13 = (PySet_GET_SIZE(__pyx_v_candidates) != 0);
    __pyx_t_8 = ((!__pyx_t_13) != 0);
    if (__pyx_t_8) {
/* … */
    }
+6857:             candidates = set(all_workers)
      __pyx_t_2 = PySet_New(__pyx_v_all_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6857, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_candidates, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
 6858:     else:
+6859:         candidates &= valid_workers
  /*else*/ {
    __pyx_t_2 = PyNumber_InPlaceAnd(__pyx_v_candidates, __pyx_v_valid_workers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_candidates, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+6860:         if not candidates:
    __pyx_t_8 = (PySet_GET_SIZE(__pyx_v_candidates) != 0);
    __pyx_t_13 = ((!__pyx_t_8) != 0);
    if (__pyx_t_13) {
/* … */
    }
  }
  __pyx_L18:;
+6861:             candidates = valid_workers
      __Pyx_INCREF(__pyx_v_valid_workers);
      __Pyx_DECREF_SET(__pyx_v_candidates, __pyx_v_valid_workers);
+6862:             if not candidates:
      __pyx_t_13 = (__pyx_v_candidates != Py_None)&&(PySet_GET_SIZE(__pyx_v_candidates) != 0);
      __pyx_t_8 = ((!__pyx_t_13) != 0);
      if (__pyx_t_8) {
/* … */
      }
+6863:                 if ts._loose_restrictions:
        __pyx_t_8 = (__pyx_v_ts->_loose_restrictions != 0);
        if (__pyx_t_8) {
/* … */
        }
+6864:                     return decide_worker(ts, all_workers, None, objective)
          __Pyx_XDECREF(((PyObject *)__pyx_r));
          __pyx_t_2 = ((PyObject *)__pyx_f_11distributed_9scheduler_decide_worker(__pyx_v_ts, __pyx_v_all_workers, ((PyObject*)Py_None), __pyx_v_objective)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6864, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_r = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_2);
          __pyx_t_2 = 0;
          goto __pyx_L0;
 6865:                 else:
+6866:                     return None
        /*else*/ {
          __Pyx_XDECREF(((PyObject *)__pyx_r));
          __pyx_r = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None); __Pyx_INCREF(Py_None);
          goto __pyx_L0;
        }
+6867:     if not candidates:
  __pyx_t_8 = (__pyx_v_candidates != Py_None)&&(PySet_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_13 = ((!__pyx_t_8) != 0);
  if (__pyx_t_13) {
/* … */
  }
+6868:         return None
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __pyx_r = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 6869: 
+6870:     if len(candidates) == 1:
  if (unlikely(__pyx_v_candidates == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 6870, __pyx_L1_error)
  }
  __pyx_t_3 = PySet_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6870, __pyx_L1_error)
  __pyx_t_13 = ((__pyx_t_3 == 1) != 0);
  if (__pyx_t_13) {
/* … */
    goto __pyx_L24;
  }
+6871:         for ws in candidates:
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_set_iterator(__pyx_v_candidates, 1, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_7 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_1, __pyx_t_5);
      if (unlikely(__pyx_t_7 == 0)) break;
      if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 6871, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6871, __pyx_L1_error)
      __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_1);
      __pyx_t_1 = 0;
+6872:             break
      goto __pyx_L26_break;
    }
    __pyx_L26_break:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 6873:     else:
+6874:         ws = min(candidates, key=objective)
  /*else*/ {
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_candidates);
    __Pyx_GIVEREF(__pyx_v_candidates);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_candidates);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_key, __pyx_v_objective) < 0) __PYX_ERR(0, 6874, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6874, __pyx_L1_error)
    __pyx_v_ws = ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_6);
    __pyx_t_6 = 0;
  }
  __pyx_L24:;
+6875:     return ws
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  if (unlikely(!__pyx_v_ws)) { __Pyx_RaiseUnboundLocalError("ws"); __PYX_ERR(0, 6875, __pyx_L1_error) }
  __Pyx_INCREF(((PyObject *)__pyx_v_ws));
  __pyx_r = __pyx_v_ws;
  goto __pyx_L0;
 6876: 
 6877: 
+6878: def validate_task_state(ts: TaskState):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_29validate_task_state(PyObject *__pyx_self, PyObject *__pyx_v_ts); /*proto*/
static char __pyx_doc_11distributed_9scheduler_28validate_task_state[] = "\n    Validate the given TaskState.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_29validate_task_state = {"validate_task_state", (PyCFunction)__pyx_pw_11distributed_9scheduler_29validate_task_state, METH_O, __pyx_doc_11distributed_9scheduler_28validate_task_state};
static PyObject *__pyx_pw_11distributed_9scheduler_29validate_task_state(PyObject *__pyx_self, PyObject *__pyx_v_ts) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_task_state (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ts), __pyx_ptype_11distributed_9scheduler_TaskState, 1, "ts", 0))) __PYX_ERR(0, 6878, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_28validate_task_state(__pyx_self, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_v_ts));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_28validate_task_state(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts) {
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_dts = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr154__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_10genexpr155__pyx_v_dts = NULL;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_10genexpr156__pyx_v_ws = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_task_state", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("distributed.scheduler.validate_task_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr154__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr155__pyx_v_dts);
  __Pyx_XDECREF((PyObject *)__pyx_10genexpr156__pyx_v_ws);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__397 = PyTuple_Pack(7, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_dts, __pyx_n_s_cs, __pyx_n_s_dts, __pyx_n_s_dts, __pyx_n_s_ws); if (unlikely(!__pyx_tuple__397)) __PYX_ERR(0, 6878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__397);
  __Pyx_GIVEREF(__pyx_tuple__397);
/* … */
  __pyx_t_16 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_29validate_task_state, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_task_state, __pyx_t_16) < 0) __PYX_ERR(0, 6878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_codeobj__398 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__397, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_task_state, 6878, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__398)) __PYX_ERR(0, 6878, __pyx_L1_error)
 6879:     """
 6880:     Validate the given TaskState.
 6881:     """
 6882:     ws: WorkerState
 6883:     dts: TaskState
 6884: 
+6885:     assert ts._state in ALL_TASK_STATES or ts._state == "forgotten", ts
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_11distributed_9scheduler_ALL_TASK_STATES == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 6885, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_v_ts->_state, __pyx_v_11distributed_9scheduler_ALL_TASK_STATES, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6885, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L3_bool_binop_done;
    }
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_forgotten, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6885, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_3 != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L3_bool_binop_done:;
    if (unlikely(!__pyx_t_1)) {
      __pyx_t_4 = PyTuple_Pack(1, ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6885, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 6885, __pyx_L1_error)
    }
  }
  #endif
 6886: 
+6887:     if ts._waiting_on:
  __pyx_t_1 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
  if (__pyx_t_1) {
/* … */
  }
+6888:         assert ts._waiting_on.issubset(ts._dependencies), (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts->_waiting_on, __pyx_n_s_issubset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6888, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_ts->_dependencies) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_ts->_dependencies);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6888, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6888, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) {
+6889:             "waiting not subset of dependencies",
        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6889, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_kp_u_waiting_not_subset_of_dependenci);
        __Pyx_GIVEREF(__pyx_kp_u_waiting_not_subset_of_dependenci);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_waiting_not_subset_of_dependenci);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = PyTuple_Pack(1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6889, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 6888, __pyx_L1_error)
      }
    }
    #endif
+6890:             str(ts._waiting_on),
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_waiting_on); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6890, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+6891:             str(ts._dependencies),
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_dependencies); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6891, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
 6892:         )
+6893:     if ts._waiters:
  __pyx_t_1 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
  if (__pyx_t_1) {
/* … */
  }
+6894:         assert ts._waiters.issubset(ts._dependents), (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_ts->_waiters, __pyx_n_s_issubset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_v_ts->_dependents) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_ts->_dependents);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) {
+6895:             "waiters not subset of dependents",
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6895, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_kp_u_waiters_not_subset_of_dependents);
        __Pyx_GIVEREF(__pyx_kp_u_waiters_not_subset_of_dependents);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_waiters_not_subset_of_dependents);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6);
        __pyx_t_5 = 0;
        __pyx_t_6 = 0;
        __pyx_t_6 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6895, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_6);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __PYX_ERR(0, 6894, __pyx_L1_error)
      }
    }
    #endif
+6896:             str(ts._waiters),
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_waiters); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6896, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
+6897:             str(ts._dependents),
        __pyx_t_6 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_dependents); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6897, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
 6898:         )
 6899: 
+6900:     for dts in ts._waiting_on:
  __pyx_t_7 = 0;
  __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_waiting_on, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_4;
  __pyx_t_4 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_4, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6900, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6900, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
    __pyx_t_4 = 0;
+6901:         assert not dts._who_has, ("waiting on in-memory dep", str(ts), str(dts))
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
      if (unlikely(!((!__pyx_t_1) != 0))) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6901, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6901, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6901, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_kp_u_waiting_on_in_memory_dep);
        __Pyx_GIVEREF(__pyx_kp_u_waiting_on_in_memory_dep);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_waiting_on_in_memory_dep);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_5);
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6901, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 6901, __pyx_L1_error)
      }
    }
    #endif
+6902:         assert dts._state != "released", ("waiting on released dep", str(ts), str(dts))
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_released, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6902, __pyx_L1_error)
      if (unlikely(!(__pyx_t_1 != 0))) {
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6902, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6902, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6902, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_kp_u_waiting_on_released_dep);
        __Pyx_GIVEREF(__pyx_kp_u_waiting_on_released_dep);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_waiting_on_released_dep);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_11);
        __pyx_t_5 = 0;
        __pyx_t_11 = 0;
        __pyx_t_11 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6902, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_11);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __PYX_ERR(0, 6902, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6903:     for dts in ts._dependencies:
  __pyx_t_8 = 0;
  __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_11;
  __pyx_t_11 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_11, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6903, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_11));
    __pyx_t_11 = 0;
+6904:         assert ts in dts._dependents, (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_dts->_dependents == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 6904, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_dts->_dependents, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6904, __pyx_L1_error)
      if (unlikely(!(__pyx_t_1 != 0))) {
+6905:             "not in dependency's dependents",
        __pyx_t_12 = PyTuple_New(4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_kp_u_not_in_dependency_s_dependents);
        __Pyx_GIVEREF(__pyx_kp_u_not_in_dependency_s_dependents);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u_not_in_dependency_s_dependents);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_5);
        __pyx_t_11 = 0;
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = PyTuple_Pack(1, __pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 6904, __pyx_L1_error)
      }
    }
    #endif
+6906:             str(ts),
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6906, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
+6907:             str(dts),
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6907, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+6908:             str(dts._dependents),
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_dts->_dependents); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6908, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
 6909:         )
+6910:         if ts._state in ("waiting", "processing"):
    __Pyx_INCREF(__pyx_v_ts->_state);
    __pyx_t_13 = __pyx_v_ts->_state;
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_13, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6910, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_13, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6910, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_3 != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L12_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
+6911:             assert dts in ts._waiting_on or dts._who_has, (
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_ts->_waiting_on == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 6911, __pyx_L1_error)
        }
        __pyx_t_1 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_dts), __pyx_v_ts->_waiting_on, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6911, __pyx_L1_error)
        __pyx_t_3 = (__pyx_t_1 != 0);
        if (!__pyx_t_3) {
        } else {
          __pyx_t_2 = __pyx_t_3;
          goto __pyx_L14_bool_binop_done;
        }
        __pyx_t_3 = (__pyx_v_dts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_dts->_who_has) != 0);
        __pyx_t_2 = __pyx_t_3;
        __pyx_L14_bool_binop_done:;
        if (unlikely(!__pyx_t_2)) {
+6912:                 "dep missing",
          __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6912, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_kp_u_dep_missing);
          __Pyx_GIVEREF(__pyx_kp_u_dep_missing);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_dep_missing);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_12);
          __pyx_t_5 = 0;
          __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6912, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __PYX_ERR(0, 6911, __pyx_L1_error)
        }
      }
      #endif
+6913:                 str(ts),
          __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6913, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
+6914:                 str(dts),
          __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6914, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
 6915:             )
+6916:         assert dts._state != "forgotten"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_forgotten, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6916, __pyx_L1_error)
      if (unlikely(!(__pyx_t_2 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6916, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6917: 
+6918:     for dts in ts._waiters:
  __pyx_t_7 = 0;
  __pyx_t_12 = __Pyx_set_iterator(__pyx_v_ts->_waiters, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_12;
  __pyx_t_12 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_12, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6918, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6918, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_12));
    __pyx_t_12 = 0;
+6919:         assert dts._state in ("waiting", "processing"), (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_INCREF(__pyx_v_dts->_state);
      __pyx_t_13 = __pyx_v_dts->_state;
      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_13, __pyx_n_u_waiting, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6919, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_13, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 6919, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L18_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!(__pyx_t_2 != 0))) {
+6920:             "waiter not in play",
        __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6920, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_kp_u_waiter_not_in_play);
        __Pyx_GIVEREF(__pyx_kp_u_waiter_not_in_play);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_waiter_not_in_play);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
        __pyx_t_12 = 0;
        __pyx_t_4 = 0;
        __pyx_t_4 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6920, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(0, 6919, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6921:             str(ts),
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6921, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
+6922:             str(dts),
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6922, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
 6923:         )
+6924:     for dts in ts._dependents:
  __pyx_t_8 = 0;
  __pyx_t_4 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_4;
  __pyx_t_4 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_4, __pyx_t_9);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6924, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_4));
    __pyx_t_4 = 0;
+6925:         assert ts in dts._dependencies, (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_dts->_dependencies == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 6925, __pyx_L1_error)
      }
      __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_dts->_dependencies, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6925, __pyx_L1_error)
      if (unlikely(!(__pyx_t_2 != 0))) {
+6926:             "not in dependent's dependencies",
        __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6926, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_kp_u_not_in_dependent_s_dependencies);
        __Pyx_GIVEREF(__pyx_kp_u_not_in_dependent_s_dependencies);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_not_in_dependent_s_dependencies);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_12);
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_12 = 0;
        __pyx_t_12 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6926, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(0, 6925, __pyx_L1_error)
      }
    }
    #endif
+6927:             str(ts),
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6927, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+6928:             str(dts),
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_dts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6928, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
+6929:             str(dts._dependencies),
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_dts->_dependencies); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6929, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
 6930:         )
+6931:         assert dts._state != "forgotten"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_dts->_state, __pyx_n_u_forgotten, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6931, __pyx_L1_error)
      if (unlikely(!(__pyx_t_2 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6931, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6932: 
+6933:     assert (ts._processing_on is not None) == (ts._state == "processing")
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (((PyObject *)__pyx_v_ts->_processing_on) != Py_None);
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6933, __pyx_L1_error)
    if (unlikely(!((__pyx_t_2 == __pyx_t_3) != 0))) {
      PyErr_SetNone(PyExc_AssertionError);
      __PYX_ERR(0, 6933, __pyx_L1_error)
    }
  }
  #endif
+6934:     assert (not not ts._who_has) == (ts._state == "memory"), (ts, ts._who_has)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6934, __pyx_L1_error)
    if (unlikely(!(((!((!__pyx_t_3) != 0)) == __pyx_t_2) != 0))) {
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6934, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(((PyObject *)__pyx_v_ts));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_ts));
      PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_ts));
      __Pyx_INCREF(__pyx_v_ts->_who_has);
      __Pyx_GIVEREF(__pyx_v_ts->_who_has);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_ts->_who_has);
      __pyx_t_12 = PyTuple_Pack(1, __pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6934, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __PYX_ERR(0, 6934, __pyx_L1_error)
    }
  }
  #endif
 6935: 
+6936:     if ts._state == "processing":
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6936, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6937:         assert all([dts._who_has for dts in ts._dependencies]), (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      { /* enter inner scope */
        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6937, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_7 = 0;
        __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_dependencies, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6937, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_6);
        __pyx_t_6 = __pyx_t_11;
        __pyx_t_11 = 0;
        while (1) {
          __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, __pyx_t_9);
          if (unlikely(__pyx_t_10 == 0)) break;
          if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6937, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6937, __pyx_L25_error)
          __Pyx_XDECREF_SET(__pyx_10genexpr154__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_11));
          __pyx_t_11 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_10genexpr154__pyx_v_dts->_who_has))) __PYX_ERR(0, 6937, __pyx_L25_error)
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF((PyObject *)__pyx_10genexpr154__pyx_v_dts); __pyx_10genexpr154__pyx_v_dts = 0;
        goto __pyx_L28_exit_scope;
        __pyx_L25_error:;
        __Pyx_XDECREF((PyObject *)__pyx_10genexpr154__pyx_v_dts); __pyx_10genexpr154__pyx_v_dts = 0;
        goto __pyx_L1_error;
        __pyx_L28_exit_scope:;
      } /* exit inner scope */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6937, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6937, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) {
+6938:             "task processing without all deps",
        __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_kp_u_task_processing_without_all_deps);
        __Pyx_GIVEREF(__pyx_kp_u_task_processing_without_all_deps);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_task_processing_without_all_deps);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_12);
        __pyx_t_6 = 0;
        __pyx_t_12 = 0;
        __pyx_t_12 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(0, 6937, __pyx_L1_error)
      }
    }
    #endif
+6939:             str(ts),
        __pyx_t_6 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6939, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
+6940:             str(ts._dependencies),
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_dependencies); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6940, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
 6941:         )
+6942:         assert not ts._waiting_on
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_3 = (__pyx_v_ts->_waiting_on != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiting_on) != 0);
      if (unlikely(!((!__pyx_t_3) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6942, __pyx_L1_error)
      }
    }
    #endif
 6943: 
+6944:     if ts._who_has:
  __pyx_t_3 = (__pyx_v_ts->_who_has != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_has) != 0);
  if (__pyx_t_3) {
/* … */
  }
+6945:         assert ts._waiters or ts._who_wants, (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (__pyx_v_ts->_waiters != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_waiters) != 0);
      if (!__pyx_t_2) {
      } else {
        __pyx_t_3 = __pyx_t_2;
        goto __pyx_L30_bool_binop_done;
      }
      __pyx_t_2 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
      __pyx_t_3 = __pyx_t_2;
      __pyx_L30_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
+6946:             "unneeded task in memory",
        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6946, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_kp_u_unneeded_task_in_memory);
        __Pyx_GIVEREF(__pyx_kp_u_unneeded_task_in_memory);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_unneeded_task_in_memory);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_11);
        __pyx_t_12 = 0;
        __pyx_t_11 = 0;
        __pyx_t_11 = PyTuple_Pack(1, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6946, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_11);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __PYX_ERR(0, 6945, __pyx_L1_error)
      }
    }
    #endif
+6947:             str(ts),
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6947, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
+6948:             str(ts._who_has),
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_who_has); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6948, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
 6949:         )
+6950:         if ts._run_spec:  # was computed
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ts->_run_spec); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6950, __pyx_L1_error)
    if (__pyx_t_3) {
/* … */
    }
+6951:             assert ts._type
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_3 = (__pyx_v_ts->_type != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_ts->_type) != 0);
        if (unlikely(!__pyx_t_3)) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6951, __pyx_L1_error)
        }
      }
      #endif
+6952:             assert isinstance(ts._type, str)
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_11 = __pyx_v_ts->_type;
        __Pyx_INCREF(__pyx_t_11);
        __pyx_t_3 = PyUnicode_Check(__pyx_t_11); 
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!(__pyx_t_3 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6952, __pyx_L1_error)
        }
      }
      #endif
+6953:         assert not any([ts in dts._waiting_on for dts in ts._dependents])
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      { /* enter inner scope */
        __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6953, __pyx_L35_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_8 = 0;
        __pyx_t_12 = __Pyx_set_iterator(__pyx_v_ts->_dependents, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6953, __pyx_L35_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_XDECREF(__pyx_t_6);
        __pyx_t_6 = __pyx_t_12;
        __pyx_t_12 = 0;
        while (1) {
          __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_12, __pyx_t_9);
          if (unlikely(__pyx_t_10 == 0)) break;
          if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6953, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6953, __pyx_L35_error)
          __Pyx_XDECREF_SET(__pyx_10genexpr155__pyx_v_dts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_12));
          __pyx_t_12 = 0;
          if (unlikely(__pyx_10genexpr155__pyx_v_dts->_waiting_on == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 6953, __pyx_L35_error)
          }
          __pyx_t_3 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_10genexpr155__pyx_v_dts->_waiting_on, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6953, __pyx_L35_error)
          __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6953, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 6953, __pyx_L35_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF((PyObject *)__pyx_10genexpr155__pyx_v_dts); __pyx_10genexpr155__pyx_v_dts = 0;
        goto __pyx_L38_exit_scope;
        __pyx_L35_error:;
        __Pyx_XDECREF((PyObject *)__pyx_10genexpr155__pyx_v_dts); __pyx_10genexpr155__pyx_v_dts = 0;
        goto __pyx_L1_error;
        __pyx_L38_exit_scope:;
      } /* exit inner scope */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6953, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6953, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!((!__pyx_t_3) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6953, __pyx_L1_error)
      }
    }
    #endif
+6954:         for ws in ts._who_has:
    __pyx_t_7 = 0;
    __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_6);
    __pyx_t_6 = __pyx_t_11;
    __pyx_t_11 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6954, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6954, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
      __pyx_t_11 = 0;
+6955:             assert ts in ws._has_what, (
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_ws->_has_what == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 6955, __pyx_L1_error)
        }
        __pyx_t_3 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_ws->_has_what, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6955, __pyx_L1_error)
        if (unlikely(!(__pyx_t_3 != 0))) {
+6956:                 "not in who_has' has_what",
          __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6956, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_kp_u_not_in_who_has_has_what);
          __Pyx_GIVEREF(__pyx_kp_u_not_in_who_has_has_what);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_not_in_who_has_has_what);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_5);
          __pyx_t_11 = 0;
          __pyx_t_12 = 0;
          __pyx_t_5 = 0;
          __pyx_t_5 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6956, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __PYX_ERR(0, 6955, __pyx_L1_error)
        }
      }
      #endif
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6957:                 str(ts),
          __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6957, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
+6958:                 str(ws),
          __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ws)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6958, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
+6959:                 str(ws._has_what),
          __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ws->_has_what); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6959, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
 6960:             )
 6961: 
+6962:     if ts._who_wants:
  __pyx_t_3 = (__pyx_v_ts->_who_wants != Py_None)&&(PySet_GET_SIZE(__pyx_v_ts->_who_wants) != 0);
  if (__pyx_t_3) {
/* … */
  }
 6963:         cs: ClientState
+6964:         for cs in ts._who_wants:
    __pyx_t_8 = 0;
    __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ts->_who_wants, 1, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_5, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6964, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 6964, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_5));
      __pyx_t_5 = 0;
+6965:             assert ts in cs._wants_what, (
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_cs->_wants_what == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 6965, __pyx_L1_error)
        }
        __pyx_t_3 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_v_cs->_wants_what, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6965, __pyx_L1_error)
        if (unlikely(!(__pyx_t_3 != 0))) {
+6966:                 "not in who_wants' wants_what",
          __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6966, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_INCREF(__pyx_kp_u_not_in_who_wants_wants_what);
          __Pyx_GIVEREF(__pyx_kp_u_not_in_who_wants_wants_what);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_not_in_who_wants_wants_what);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_12);
          __pyx_t_5 = 0;
          __pyx_t_4 = 0;
          __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_Pack(1, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6966, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __PYX_ERR(0, 6965, __pyx_L1_error)
        }
      }
      #endif
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6967:                 str(ts),
          __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
+6968:                 str(cs),
          __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_cs)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
+6969:                 str(cs._wants_what),
          __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_cs->_wants_what); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
 6970:             )
 6971: 
+6972:     if ts._actor:
  __pyx_t_3 = (__pyx_v_ts->_actor != 0);
  if (__pyx_t_3) {
/* … */
  }
+6973:         if ts._state == "memory":
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6973, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
+6974:             assert sum([ts in ws._actors for ws in ts._who_has]) == 1
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        { /* enter inner scope */
          __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6974, __pyx_L48_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = 0;
          __pyx_t_11 = __Pyx_set_iterator(__pyx_v_ts->_who_has, 1, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6974, __pyx_L48_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_12);
          __pyx_t_12 = __pyx_t_11;
          __pyx_t_11 = 0;
          while (1) {
            __pyx_t_10 = __Pyx_set_iter_next(__pyx_t_12, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, __pyx_t_9);
            if (unlikely(__pyx_t_10 == 0)) break;
            if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 6974, __pyx_L48_error)
            __Pyx_GOTREF(__pyx_t_11);
            if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 6974, __pyx_L48_error)
            __Pyx_XDECREF_SET(__pyx_10genexpr156__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_11));
            __pyx_t_11 = 0;
            if (unlikely(__pyx_10genexpr156__pyx_v_ws->_actors == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
              __PYX_ERR(0, 6974, __pyx_L48_error)
            }
            __pyx_t_2 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_10genexpr156__pyx_v_ws->_actors, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6974, __pyx_L48_error)
            __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6974, __pyx_L48_error)
            __Pyx_GOTREF(__pyx_t_11);
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 6974, __pyx_L48_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          }
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr156__pyx_v_ws); __pyx_10genexpr156__pyx_v_ws = 0;
          goto __pyx_L51_exit_scope;
          __pyx_L48_error:;
          __Pyx_XDECREF((PyObject *)__pyx_10genexpr156__pyx_v_ws); __pyx_10genexpr156__pyx_v_ws = 0;
          goto __pyx_L1_error;
          __pyx_L51_exit_scope:;
        } /* exit inner scope */
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6974, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_t_12, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6974, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6974, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6974, __pyx_L1_error)
        }
      }
      #endif
+6975:         if ts._state == "processing":
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ts->_state, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
/* … */
    }
+6976:             assert ts in ts._processing_on.actors
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ts->_processing_on), __pyx_n_s_actors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6976, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = (__Pyx_PySequence_ContainsTF(((PyObject *)__pyx_v_ts), __pyx_t_6, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6976, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!(__pyx_t_3 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 6976, __pyx_L1_error)
        }
      }
      #endif
 6977: 
 6978: 
+6979: def validate_worker_state(ws: WorkerState):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_31validate_worker_state(PyObject *__pyx_self, PyObject *__pyx_v_ws); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_31validate_worker_state = {"validate_worker_state", (PyCFunction)__pyx_pw_11distributed_9scheduler_31validate_worker_state, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_31validate_worker_state(PyObject *__pyx_self, PyObject *__pyx_v_ws) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_worker_state (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ws), __pyx_ptype_11distributed_9scheduler_WorkerState, 1, "ws", 0))) __PYX_ERR(0, 6979, __pyx_L1_error)
  __pyx_r = __pyx_pf_11distributed_9scheduler_30validate_worker_state(__pyx_self, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_v_ws));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_30validate_worker_state(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_worker_state", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("distributed.scheduler.validate_worker_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__399 = PyTuple_Pack(2, __pyx_n_s_ws, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__399)) __PYX_ERR(0, 6979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__399);
  __Pyx_GIVEREF(__pyx_tuple__399);
/* … */
  __pyx_t_16 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_31validate_worker_state, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_worker_state, __pyx_t_16) < 0) __PYX_ERR(0, 6979, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_codeobj__400 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__399, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_worker_state, 6979, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__400)) __PYX_ERR(0, 6979, __pyx_L1_error)
 6980:     ts: TaskState
+6981:     for ts in ws._has_what:
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_set_iterator(__pyx_v_ws->_has_what, 1, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 6981, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6981, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+6982:         assert ws in ts._who_has, (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(__pyx_v_ts->_who_has == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 6982, __pyx_L1_error)
      }
      __pyx_t_7 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_ws), __pyx_v_ts->_who_has, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 6982, __pyx_L1_error)
      if (unlikely(!(__pyx_t_7 != 0))) {
+6983:             "not in has_what' who_has",
        __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_INCREF(__pyx_kp_u_not_in_has_what_who_has);
        __Pyx_GIVEREF(__pyx_kp_u_not_in_has_what_who_has);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_not_in_has_what_who_has);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_9);
        __pyx_t_5 = 0;
        __pyx_t_8 = 0;
        __pyx_t_9 = 0;
        __pyx_t_9 = PyTuple_Pack(1, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(0, 6982, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6984:             str(ws),
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ws)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6984, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
+6985:             str(ts),
        __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6985, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
+6986:             str(ts._who_has),
        __pyx_t_9 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_who_has); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6986, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
 6987:         )
 6988: 
+6989:     for ts in ws._actors:
  __pyx_t_3 = 0;
  __pyx_t_9 = __Pyx_set_iterator(__pyx_v_ws->_actors, 1, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_9;
  __pyx_t_9 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, &__pyx_t_9, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 6989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 6989, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_9));
    __pyx_t_9 = 0;
+6990:         assert ts._state in ("memory", "processing")
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_INCREF(__pyx_v_ts->_state);
      __pyx_t_11 = __pyx_v_ts->_state;
      __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_t_11, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 6990, __pyx_L1_error)
      __pyx_t_13 = (__pyx_t_12 != 0);
      if (!__pyx_t_13) {
      } else {
        __pyx_t_7 = __pyx_t_13;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_t_11, __pyx_n_u_processing_2, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 6990, __pyx_L1_error)
      __pyx_t_12 = (__pyx_t_13 != 0);
      __pyx_t_7 = __pyx_t_12;
      __pyx_L7_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!(__pyx_t_7 != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6990, __pyx_L1_error)
      }
    }
    #endif
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6991: 
 6992: 
+6993: def validate_state(tasks, workers, clients):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_33validate_state(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11distributed_9scheduler_32validate_state[] = "\n    Validate a current runtime state\n\n    This performs a sequence of checks on the entire graph, running in about\n    linear time.  This raises assert errors if anything doesn't check out.\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_33validate_state = {"validate_state", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_33validate_state, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11distributed_9scheduler_32validate_state};
static PyObject *__pyx_pw_11distributed_9scheduler_33validate_state(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_tasks = 0;
  PyObject *__pyx_v_workers = 0;
  PyObject *__pyx_v_clients = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_state (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tasks,&__pyx_n_s_workers,&__pyx_n_s_clients,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tasks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_workers)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_state", 1, 3, 3, 1); __PYX_ERR(0, 6993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_clients)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("validate_state", 1, 3, 3, 2); __PYX_ERR(0, 6993, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "validate_state") < 0)) __PYX_ERR(0, 6993, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_tasks = values[0];
    __pyx_v_workers = values[1];
    __pyx_v_clients = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_state", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6993, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.validate_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_32validate_state(__pyx_self, __pyx_v_tasks, __pyx_v_workers, __pyx_v_clients);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_32validate_state(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tasks, PyObject *__pyx_v_workers, PyObject *__pyx_v_clients) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  struct __pyx_obj_11distributed_9scheduler_WorkerState *__pyx_v_ws = 0;
  struct __pyx_obj_11distributed_9scheduler_ClientState *__pyx_v_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_state", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("distributed.scheduler.validate_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ws);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__401 = PyTuple_Pack(6, __pyx_n_s_tasks, __pyx_n_s_workers, __pyx_n_s_clients, __pyx_n_s_ts, __pyx_n_s_ws, __pyx_n_s_cs); if (unlikely(!__pyx_tuple__401)) __PYX_ERR(0, 6993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__401);
  __Pyx_GIVEREF(__pyx_tuple__401);
/* … */
  __pyx_t_16 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_33validate_state, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_state, __pyx_t_16) < 0) __PYX_ERR(0, 6993, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_codeobj__402 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__401, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_validate_state, 6993, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__402)) __PYX_ERR(0, 6993, __pyx_L1_error)
 6994:     """
 6995:     Validate a current runtime state
 6996: 
 6997:     This performs a sequence of checks on the entire graph, running in about
 6998:     linear time.  This raises assert errors if anything doesn't check out.
 6999:     """
 7000:     ts: TaskState
+7001:     for ts in tasks.values():
  __pyx_t_2 = 0;
  if (unlikely(__pyx_v_tasks == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 7001, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_tasks, 0, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 7001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 7001, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_5));
    __pyx_t_5 = 0;
+7002:         validate_task_state(ts)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_validate_task_state); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, ((PyObject *)__pyx_v_ts)) : __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_ts));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 7003: 
 7004:     ws: WorkerState
+7005:     for ws in workers.values():
  __pyx_t_3 = 0;
  if (unlikely(__pyx_v_workers == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 7005, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_workers, 0, __pyx_n_s_values, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, NULL, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 7005, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_WorkerState))))) __PYX_ERR(0, 7005, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_ws, ((struct __pyx_obj_11distributed_9scheduler_WorkerState *)__pyx_t_5));
    __pyx_t_5 = 0;
+7006:         validate_worker_state(ws)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_validate_worker_state); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, ((PyObject *)__pyx_v_ws)) : __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_ws));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 7007: 
 7008:     cs: ClientState
+7009:     for cs in clients.values():
  __pyx_t_2 = 0;
  if (unlikely(__pyx_v_clients == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 7009, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_clients, 0, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_5, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_6 == 0)) break;
    if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 7009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_11distributed_9scheduler_ClientState))))) __PYX_ERR(0, 7009, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_cs, ((struct __pyx_obj_11distributed_9scheduler_ClientState *)__pyx_t_5));
    __pyx_t_5 = 0;
+7010:         for ts in cs._wants_what:
    __pyx_t_9 = 0;
    __pyx_t_7 = __Pyx_set_iterator(__pyx_v_cs->_wants_what, 1, (&__pyx_t_10), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_11 = __Pyx_set_iter_next(__pyx_t_5, __pyx_t_10, &__pyx_t_9, &__pyx_t_7, __pyx_t_6);
      if (unlikely(__pyx_t_11 == 0)) break;
      if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 7010, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 7010, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_ts, ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_7));
      __pyx_t_7 = 0;
+7011:             assert cs in ts._who_wants, (
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(__pyx_v_ts->_who_wants == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 7011, __pyx_L1_error)
        }
        __pyx_t_12 = (__Pyx_PySet_ContainsTF(((PyObject *)__pyx_v_cs), __pyx_v_ts->_who_wants, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 7011, __pyx_L1_error)
        if (unlikely(!(__pyx_t_12 != 0))) {
+7012:                 "not in wants_what' who_wants",
          __pyx_t_14 = PyTuple_New(4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7012, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_INCREF(__pyx_kp_u_not_in_wants_what_who_wants);
          __Pyx_GIVEREF(__pyx_kp_u_not_in_wants_what_who_wants);
          PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_kp_u_not_in_wants_what_who_wants);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_8);
          PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_t_13);
          __pyx_t_7 = 0;
          __pyx_t_8 = 0;
          __pyx_t_13 = 0;
          __pyx_t_13 = PyTuple_Pack(1, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7012, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __PYX_ERR(0, 7011, __pyx_L1_error)
        }
      }
      #endif
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7013:                 str(cs),
          __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_cs)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7013, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
+7014:                 str(ts),
          __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_ts)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7014, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
+7015:                 str(ts._who_wants),
          __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_ts->_who_wants); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7015, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
 7016:             )
 7017: 
 7018: 
+7019: _round_robin = [0]
  __pyx_t_16 = PyList_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_16, 0, __pyx_int_0);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_round_robin, __pyx_t_16) < 0) __PYX_ERR(0, 7019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 7020: 
 7021: 
+7022: def heartbeat_interval(n):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_35heartbeat_interval(PyObject *__pyx_self, PyObject *__pyx_v_n); /*proto*/
static char __pyx_doc_11distributed_9scheduler_34heartbeat_interval[] = "\n    Interval in seconds that we desire heartbeats based on number of workers\n    ";
static PyMethodDef __pyx_mdef_11distributed_9scheduler_35heartbeat_interval = {"heartbeat_interval", (PyCFunction)__pyx_pw_11distributed_9scheduler_35heartbeat_interval, METH_O, __pyx_doc_11distributed_9scheduler_34heartbeat_interval};
static PyObject *__pyx_pw_11distributed_9scheduler_35heartbeat_interval(PyObject *__pyx_self, PyObject *__pyx_v_n) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heartbeat_interval (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_34heartbeat_interval(__pyx_self, ((PyObject *)__pyx_v_n));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_34heartbeat_interval(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heartbeat_interval", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.heartbeat_interval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__403 = PyTuple_Pack(1, __pyx_n_s_n); if (unlikely(!__pyx_tuple__403)) __PYX_ERR(0, 7022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__403);
  __Pyx_GIVEREF(__pyx_tuple__403);
/* … */
  __pyx_t_16 = PyCFunction_NewEx(&__pyx_mdef_11distributed_9scheduler_35heartbeat_interval, NULL, __pyx_n_s_distributed_scheduler); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_heartbeat_interval_2, __pyx_t_16) < 0) __PYX_ERR(0, 7022, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_codeobj__404 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__403, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_heartbeat_interval_2, 7022, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__404)) __PYX_ERR(0, 7022, __pyx_L1_error)
 7023:     """
 7024:     Interval in seconds that we desire heartbeats based on number of workers
 7025:     """
+7026:     if n <= 10:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_n, __pyx_int_10, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7026, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 7026, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+7027:         return 0.5
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_float_0_5);
    __pyx_r = __pyx_float_0_5;
    goto __pyx_L0;
+7028:     elif n < 50:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_n, __pyx_int_50, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7028, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 7028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+7029:         return 1
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_1);
    __pyx_r = __pyx_int_1;
    goto __pyx_L0;
+7030:     elif n < 200:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_n, __pyx_int_200, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7030, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 7030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+7031:         return 2
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_2);
    __pyx_r = __pyx_int_2;
    goto __pyx_L0;
 7032:     else:
 7033:         # no more than 200 hearbeats a second scaled by workers
+7034:         return n / 200 + 1
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_TrueDivideObjC(__pyx_v_n, __pyx_int_200, 0xC8, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 7035: 
 7036: 
+7037: class KilledWorker(Exception):
  __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  __Pyx_GIVEREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  __pyx_t_15 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_16, __pyx_n_s_KilledWorker, __pyx_n_s_KilledWorker, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, (PyObject *) NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_KilledWorker, __pyx_t_16, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_CyFunction_InitClassCell(__pyx_t_9, __pyx_t_13) < 0) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KilledWorker, __pyx_t_13) < 0) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+7038:     def __init__(self, task, last_worker):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_12KilledWorker_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_12KilledWorker_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_12KilledWorker_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_12KilledWorker_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_task = 0;
  PyObject *__pyx_v_last_worker = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_task,&__pyx_n_s_last_worker,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_task)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 7038, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_last_worker)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 7038, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 7038, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_task = values[1];
    __pyx_v_last_worker = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7038, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.KilledWorker.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_12KilledWorker___init__(__pyx_self, __pyx_v_self, __pyx_v_task, __pyx_v_last_worker);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_12KilledWorker___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_task, PyObject *__pyx_v_last_worker) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.KilledWorker.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__405 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_task, __pyx_n_s_last_worker); if (unlikely(!__pyx_tuple__405)) __PYX_ERR(0, 7038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__405);
  __Pyx_GIVEREF(__pyx_tuple__405);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_12KilledWorker_1__init__, 0, __pyx_n_s_KilledWorker___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__406)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_INCREF(__pyx_t_13);
  PyList_Append(__pyx_t_9, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_13) < 0) __PYX_ERR(0, 7038, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__406 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__405, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 7038, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__406)) __PYX_ERR(0, 7038, __pyx_L1_error)
+7039:         super().__init__(task, last_worker)
  __pyx_t_2 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_2) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 7039, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_task, __pyx_v_last_worker};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7039, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_task, __pyx_v_last_worker};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7039, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_task);
    __Pyx_GIVEREF(__pyx_v_task);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_task);
    __Pyx_INCREF(__pyx_v_last_worker);
    __Pyx_GIVEREF(__pyx_v_last_worker);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_last_worker);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7040:         self.task = task
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_task, __pyx_v_task) < 0) __PYX_ERR(0, 7040, __pyx_L1_error)
+7041:         self.last_worker = last_worker
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_last_worker, __pyx_v_last_worker) < 0) __PYX_ERR(0, 7041, __pyx_L1_error)
 7042: 
 7043: 
+7044: class WorkerStatusPlugin(SchedulerPlugin):
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_SchedulerPlugin); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_16);
  __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_15, __pyx_n_s_WorkerStatusPlugin, __pyx_n_s_WorkerStatusPlugin, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, __pyx_kp_s_An_plugin_to_share_worker_statu); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_n_s_WorkerStatusPlugin, __pyx_t_15, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WorkerStatusPlugin, __pyx_t_13) < 0) __PYX_ERR(0, 7044, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 7045:     """
 7046:     An plugin to share worker status with a remote observer
 7047: 
 7048:     This is used in cluster managers to keep updated about the status of the
 7049:     scheduler.
 7050:     """
 7051: 
+7052:     def __init__(self, scheduler, comm):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_scheduler = 0;
  PyObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_scheduler,&__pyx_n_s_comm,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scheduler)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 7052, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 7052, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 7052, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_scheduler = values[1];
    __pyx_v_comm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7052, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin___init__(__pyx_self, __pyx_v_self, __pyx_v_scheduler, __pyx_v_comm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_scheduler, PyObject *__pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__407 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_scheduler, __pyx_n_s_comm); if (unlikely(!__pyx_tuple__407)) __PYX_ERR(0, 7052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__407);
  __Pyx_GIVEREF(__pyx_tuple__407);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_1__init__, 0, __pyx_n_s_WorkerStatusPlugin___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__408)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_13) < 0) __PYX_ERR(0, 7052, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__408 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__407, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 7052, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__408)) __PYX_ERR(0, 7052, __pyx_L1_error)
+7053:         self.bcomm = BatchedSend(interval="5ms")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BatchedSend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_interval, __pyx_kp_u_5ms) < 0) __PYX_ERR(0, 7053, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bcomm, __pyx_t_3) < 0) __PYX_ERR(0, 7053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+7054:         self.bcomm.start(comm)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bcomm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_comm) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_comm);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 7055: 
+7056:         self.scheduler = scheduler
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scheduler, __pyx_v_scheduler) < 0) __PYX_ERR(0, 7056, __pyx_L1_error)
+7057:         self.scheduler.add_plugin(self)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_add_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_self);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 7058: 
+7059:     def add_worker(self, worker=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_3add_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_3add_worker = {"add_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_3add_worker, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_3add_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_worker (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "add_worker") < 0)) __PYX_ERR(0, 7059, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_worker", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7059, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_2add_worker(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_2add_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_ident = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_worker", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ident);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__409 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_kwargs, __pyx_n_s_ident); if (unlikely(!__pyx_tuple__409)) __PYX_ERR(0, 7059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__409);
  __Pyx_GIVEREF(__pyx_tuple__409);
  __pyx_codeobj__410 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__409, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_add_worker, 7059, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__410)) __PYX_ERR(0, 7059, __pyx_L1_error)
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_3add_worker, 0, __pyx_n_s_WorkerStatusPlugin_add_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__410)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_13, __pyx_tuple__411);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_add_worker, __pyx_t_13) < 0) __PYX_ERR(0, 7059, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_tuple__411 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__411)) __PYX_ERR(0, 7059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__411);
  __Pyx_GIVEREF(__pyx_tuple__411);
+7060:         ident = self.scheduler.workers[worker].identity()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_workers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_worker); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_identity); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_ident = __pyx_t_1;
  __pyx_t_1 = 0;
+7061:         del ident["metrics"]
  if (unlikely(PyObject_DelItem(__pyx_v_ident, __pyx_n_u_metrics) < 0)) __PYX_ERR(0, 7061, __pyx_L1_error)
+7062:         del ident["last_seen"]
  if (unlikely(PyObject_DelItem(__pyx_v_ident, __pyx_n_u_last_seen) < 0)) __PYX_ERR(0, 7062, __pyx_L1_error)
+7063:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L8_try_end:;
  }
+7064:             self.bcomm.send(["add", {"workers": {worker: ident}}])
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bcomm); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_send); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_v_worker, __pyx_v_ident) < 0) __PYX_ERR(0, 7064, __pyx_L3_error)
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_workers, __pyx_t_7) < 0) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_n_u_add);
      __Pyx_GIVEREF(__pyx_n_u_add);
      PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_u_add);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7064, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7065:         except CommClosedError:
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7065, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_7 = 0;
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.add_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(0, 7065, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
+7066:             self.scheduler.remove_plugin(self)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7066, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_remove_plugin); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7066, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_self);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7066, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 7067: 
+7068:     def remove_worker(self, worker=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_5remove_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_5remove_worker = {"remove_worker", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_5remove_worker, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_5remove_worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_worker = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_worker,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_worker);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "remove_worker") < 0)) __PYX_ERR(0, 7068, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_worker = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_worker", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7068, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_4remove_worker(__pyx_self, __pyx_v_self, __pyx_v_worker, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_4remove_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_worker, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_worker", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__412 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_worker, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__412)) __PYX_ERR(0, 7068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__412);
  __Pyx_GIVEREF(__pyx_tuple__412);
  __pyx_codeobj__413 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__412, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_remove_worker, 7068, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__413)) __PYX_ERR(0, 7068, __pyx_L1_error)
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_5remove_worker, 0, __pyx_n_s_WorkerStatusPlugin_remove_worker, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__413)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_13, __pyx_tuple__414);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_remove_worker, __pyx_t_13) < 0) __PYX_ERR(0, 7068, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_tuple__414 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__414)) __PYX_ERR(0, 7068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__414);
  __Pyx_GIVEREF(__pyx_tuple__414);
+7069:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+7070:             self.bcomm.send(["remove", worker])
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bcomm); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7070, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_send); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7070, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7070, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_n_u_remove);
      __Pyx_GIVEREF(__pyx_n_u_remove);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_u_remove);
      __Pyx_INCREF(__pyx_v_worker);
      __Pyx_GIVEREF(__pyx_v_worker);
      PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_worker);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7070, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7071:         except CommClosedError:
    __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CommClosedError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7071, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_ErrRestore(__pyx_t_4, __pyx_t_6, __pyx_t_5);
    __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0;
    if (__pyx_t_8) {
      __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.remove_worker", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 7071, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_4);
+7072:             self.scheduler.remove_plugin(self)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7072, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_remove_plugin); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7072, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_7 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_self);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7072, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 7073: 
+7074:     def teardown(self):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_7teardown(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_7teardown = {"teardown", (PyCFunction)__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_7teardown, METH_O, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_18WorkerStatusPlugin_7teardown(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("teardown (wrapper)", 0);
  __pyx_r = __pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_6teardown(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_18WorkerStatusPlugin_6teardown(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("teardown", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.WorkerStatusPlugin.teardown", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__415 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__415)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__415);
  __Pyx_GIVEREF(__pyx_tuple__415);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_18WorkerStatusPlugin_7teardown, 0, __pyx_n_s_WorkerStatusPlugin_teardown, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__416)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_teardown, __pyx_t_13) < 0) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__416 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__415, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_teardown, 7074, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__416)) __PYX_ERR(0, 7074, __pyx_L1_error)
+7075:         self.bcomm.close()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_bcomm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 7076: 
 7077: 
+7078: class CollectTaskMetaDataPlugin(SchedulerPlugin):
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_SchedulerPlugin); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_15);
  __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_CalculateMetaclass(NULL, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_16, __pyx_n_s_CollectTaskMetaDataPlugin, __pyx_n_s_CollectTaskMetaDataPlugin, (PyObject *) NULL, __pyx_n_s_distributed_scheduler, (PyObject *) NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_13 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_CollectTaskMetaDataPlugin, __pyx_t_16, __pyx_t_14, NULL, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CollectTaskMetaDataPlugin, __pyx_t_13) < 0) __PYX_ERR(0, 7078, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+7079:     def __init__(self, scheduler, name):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_scheduler = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_scheduler,&__pyx_n_s_name,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scheduler)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 7079, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 7079, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 7079, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_scheduler = values[1];
    __pyx_v_name = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7079, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin___init__(__pyx_self, __pyx_v_self, __pyx_v_scheduler, __pyx_v_name);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_scheduler, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__417 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_scheduler, __pyx_n_s_name); if (unlikely(!__pyx_tuple__417)) __PYX_ERR(0, 7079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__417);
  __Pyx_GIVEREF(__pyx_tuple__417);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_1__init__, 0, __pyx_n_s_CollectTaskMetaDataPlugin___init, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__418)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_init, __pyx_t_13) < 0) __PYX_ERR(0, 7079, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__418 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__417, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_init, 7079, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__418)) __PYX_ERR(0, 7079, __pyx_L1_error)
+7080:         self.scheduler = scheduler
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scheduler, __pyx_v_scheduler) < 0) __PYX_ERR(0, 7080, __pyx_L1_error)
+7081:         self.name = name
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 7081, __pyx_L1_error)
+7082:         self.keys = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_keys, __pyx_t_1) < 0) __PYX_ERR(0, 7082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7083:         self.metadata = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_metadata, __pyx_t_1) < 0) __PYX_ERR(0, 7083, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7084:         self.state = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_state, __pyx_t_1) < 0) __PYX_ERR(0, 7084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 7085: 
+7086:     def update_graph(self, scheduler, dsk=None, keys=None, restrictions=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_3update_graph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_3update_graph = {"update_graph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_3update_graph, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_3update_graph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_scheduler = 0;
  CYTHON_UNUSED PyObject *__pyx_v_dsk = 0;
  PyObject *__pyx_v_keys = 0;
  CYTHON_UNUSED PyObject *__pyx_v_restrictions = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_scheduler,&__pyx_n_s_dsk,&__pyx_n_s_keys,&__pyx_n_s_restrictions,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scheduler)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_graph", 0, 2, 5, 1); __PYX_ERR(0, 7086, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dsk);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictions);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "update_graph") < 0)) __PYX_ERR(0, 7086, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_scheduler = values[1];
    __pyx_v_dsk = values[2];
    __pyx_v_keys = values[3];
    __pyx_v_restrictions = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_graph", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7086, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin_2update_graph(__pyx_self, __pyx_v_self, __pyx_v_scheduler, __pyx_v_dsk, __pyx_v_keys, __pyx_v_restrictions, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin_2update_graph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_scheduler, CYTHON_UNUSED PyObject *__pyx_v_dsk, PyObject *__pyx_v_keys, CYTHON_UNUSED PyObject *__pyx_v_restrictions, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_graph", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.update_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__419 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_scheduler, __pyx_n_s_dsk, __pyx_n_s_keys, __pyx_n_s_restrictions, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__419)) __PYX_ERR(0, 7086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__419);
  __Pyx_GIVEREF(__pyx_tuple__419);
  __pyx_codeobj__420 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__419, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_update_graph_2, 7086, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__420)) __PYX_ERR(0, 7086, __pyx_L1_error)
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_3update_graph, 0, __pyx_n_s_CollectTaskMetaDataPlugin_update, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__420)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_13, __pyx_tuple__421);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_update_graph_2, __pyx_t_13) < 0) __PYX_ERR(0, 7086, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_tuple__421 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__421)) __PYX_ERR(0, 7086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__421);
  __Pyx_GIVEREF(__pyx_tuple__421);
+7087:         self.keys.update(keys)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_keys);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 7088: 
+7089:     def transition(self, key, start, finish, *args, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_5transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_5transition = {"transition", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_5transition, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11distributed_9scheduler_25CollectTaskMetaDataPlugin_5transition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  CYTHON_UNUSED PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_finish = 0;
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  if (PyTuple_GET_SIZE(__pyx_args) > 4) {
    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 4, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_args)) {
      __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_args);
  } else {
    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_key,&__pyx_n_s_start,&__pyx_n_s_finish,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transition", 0, 4, 4, 1); __PYX_ERR(0, 7089, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transition", 0, 4, 4, 2); __PYX_ERR(0, 7089, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_finish)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("transition", 0, 4, 4, 3); __PYX_ERR(0, 7089, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 4) ? pos_args : 4;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "transition") < 0)) __PYX_ERR(0, 7089, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_start = values[2];
    __pyx_v_finish = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transition", 0, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7089, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin_4transition(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_start, __pyx_v_finish, __pyx_v_args, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11distributed_9scheduler_25CollectTaskMetaDataPlugin_4transition(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, CYTHON_UNUSED PyObject *__pyx_v_start, PyObject *__pyx_v_finish, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_11distributed_9scheduler_TaskState *__pyx_v_ts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transition", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("distributed.scheduler.CollectTaskMetaDataPlugin.transition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__422 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_start, __pyx_n_s_finish, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_ts); if (unlikely(!__pyx_tuple__422)) __PYX_ERR(0, 7089, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__422);
  __Pyx_GIVEREF(__pyx_tuple__422);
/* … */
  __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_11distributed_9scheduler_25CollectTaskMetaDataPlugin_5transition, 0, __pyx_n_s_CollectTaskMetaDataPlugin_transi, NULL, __pyx_n_s_distributed_scheduler, __pyx_d, ((PyObject *)__pyx_codeobj__423)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7089, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_14, __pyx_n_s_transition, __pyx_t_13) < 0) __PYX_ERR(0, 7089, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_codeobj__423 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__422, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_distributed_scheduler_py, __pyx_n_s_transition, 7089, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__423)) __PYX_ERR(0, 7089, __pyx_L1_error)
+7090:         if finish == "memory" or finish == "erred":
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_finish, __pyx_n_u_memory_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 7090, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_finish, __pyx_n_u_erred, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 7090, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+7091:             ts: TaskState = self.scheduler.tasks.get(key)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_tasks); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11distributed_9scheduler_TaskState))))) __PYX_ERR(0, 7091, __pyx_L1_error)
    __pyx_v_ts = ((struct __pyx_obj_11distributed_9scheduler_TaskState *)__pyx_t_3);
    __pyx_t_3 = 0;
+7092:             if ts is not None and ts._key in self.keys:
    __pyx_t_2 = (((PyObject *)__pyx_v_ts) != Py_None);
    __pyx_t_6 = (__pyx_t_2 != 0);
    if (__pyx_t_6) {
    } else {
      __pyx_t_1 = __pyx_t_6;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_v_ts->_key, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 7092, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = (__pyx_t_6 != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+7093:                 self.metadata[key] = ts._metadata
      __pyx_t_3 = __pyx_v_ts->_metadata;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_metadata); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7093, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyObject_SetItem(__pyx_t_4, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 7093, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+7094:                 self.state[key] = finish
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_v_key, __pyx_v_finish) < 0)) __PYX_ERR(0, 7094, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+7095:                 self.keys.discard(key)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7095, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_discard); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7095, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_key);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7095, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;