[build-system] requires = ["setuptools>=62.6", "versioneer[toml]==0.29"] build-backend = "setuptools.build_meta" [project] name = "distributed" description = "Distributed scheduler for Dask" maintainers = [{name = "Matthew Rocklin", email = "mrocklin@gmail.com"}] license = {text = "BSD-3-Clause"} classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering", "Topic :: System :: Distributed Computing", ] readme = "README.rst" requires-python = ">=3.10" dependencies = [ "click >= 8.0", "cloudpickle >= 3.0.0", "dask == 2025.2.0", "jinja2 >= 2.10.3", "locket >= 1.0.0", "msgpack >= 1.0.2", "packaging >= 20.0", "psutil >= 5.8.0", "pyyaml >= 5.4.1", "sortedcontainers >= 2.0.5", "tblib >= 1.6.0", "toolz >= 0.11.2", "tornado >= 6.2.0", "urllib3 >= 1.26.5", "zict >= 3.0.0", ] dynamic = ["version"] [project.urls] Homepage = "https://distributed.dask.org" Source = "https://github.com/dask/distributed" [project.entry-points.dask_cli] scheduler = "distributed.cli.dask_scheduler:main" worker = "distributed.cli.dask_worker:main" ssh = "distributed.cli.dask_ssh:main" spec = "distributed.cli.dask_spec:main" [project.scripts] dask-ssh = "distributed.cli.dask_ssh:main" dask-scheduler = "distributed.cli.dask_scheduler:main" dask-worker = "distributed.cli.dask_worker:main" [tool.setuptools] include-package-data = true zip-safe = false [tool.setuptools.packages.find] exclude = ["*tests*"] namespaces = false [tool.setuptools.package-data] "*" = [ "templates/index.html", "template.html", ] distributed = [ "http/templates/*.html", "py.typed", ] [tool.isort] sections = ["FUTURE", "STDLIB", "THIRDPARTY", "DISTRIBUTED", "FIRSTPARTY", "LOCALFOLDER"] profile = "black" skip_gitignore = true force_to_top = ["true"] default_section = "THIRDPARTY" known_first_party = ["distributed"] known_distributed = ["dask", "zict"] add_imports = ["from __future__ import annotations"] [tool.versioneer] VCS = "git" style = "pep440" versionfile_source = "distributed/_version.py" versionfile_build = "distributed/_version.py" tag_prefix = "" parentdir_prefix = "distributed-" [tool.pytest.ini_options] addopts = ''' -v -rsfE --durations=20 --color=yes --ignore=continuous_integration --ignore=docs --ignore=.github --strict-markers --strict-config --cov-config=pyproject.toml -p no:asyncio -p no:legacypath''' filterwarnings = [ "error", # xref: https://github.com/jupyter/jupyter_core/pull/292 # xref: https://github.com/jupyter/jupyter_core/issues/309 '''ignore:Jupyter is migrating its paths to use standard platformdirs''', # https://github.com/dask/dask-expr/issues/945 '''ignore:dask_expr does not support the DataFrameIOFunction''', '''ignore:Please use `dok_matrix` from the `scipy\.sparse` namespace, the `scipy\.sparse\.dok` namespace is deprecated.:DeprecationWarning''', '''ignore:elementwise comparison failed. this will raise an error in the future:DeprecationWarning''', '''ignore:unclosed \.send_recv_from_rpc' was never awaited:RuntimeWarning''', '''ignore:coroutine 'Scheduler\.restart' was never awaited:RuntimeWarning''', '''ignore:coroutine 'Semaphore._refresh_leases' was never awaited:RuntimeWarning''', '''ignore:coroutine 'ServerSession\.with_document_locked' was never awaited''', '''ignore:overflow encountered in long_scalars:RuntimeWarning''', '''ignore:Creating scratch directories is taking a surprisingly long time.*:UserWarning''', '''ignore:Scheduler already contains a plugin with name nonidempotentplugin. overwriting:UserWarning''', '''ignore:Increasing number of chunks by factor of 20::dask.array.core.PerformanceWarning''', '''ignore::distributed.versions.VersionMismatchWarning''', '''ignore:(?s)Exception in thread.*old_ssh.*channel\.send\(b"\\x03"\).*Socket is closed:pytest.PytestUnhandledThreadExceptionWarning''', '''ignore:(?s)Exception in thread.*paramiko\.ssh_exception\.NoValidConnectionsError:pytest.PytestUnhandledThreadExceptionWarning''', '''ignore:(?s)Exception ignored in. .*sem_unlink.*FileNotFoundError:pytest.PytestUnraisableExceptionWarning''', '''ignore:(?s)Exception ignored in. =6.4 '''ignore:datetime\.datetime\.utc(fromtimestamp|now)\(\) is deprecated and scheduled for removal in a future version.*:DeprecationWarning:tornado''', # https://github.com/dateutil/dateutil/issues/1284 '''ignore:datetime\.datetime\.utc(fromtimestamp|now)\(\) is deprecated and scheduled for removal in a future version.*:DeprecationWarning:dateutil''', # https://github.com/dask/dask/pull/10622 '''ignore:Minimal version of pyarrow will soon be increased to 14.0.1''', '''ignore:the matrix subclass is not the recommended way''', '''ignore:The current Dask DataFrame implementation is deprecated.*:DeprecationWarning''', ] minversion = "6" markers = [ "ci1: marks tests as belonging to 1 out of 2 partitions to run on CI ('-m \"not ci1\"' for second partition)", "extra_packages: marks tests that require a special dependency to run.", "slow: marks tests as slow (deselected by default", # select with '--runslow') "avoid_ci: marks tests as flaky or broken on CI on all OSs", "ipython: marks tests as exercising IPython", "gpu: marks tests we want to run on GPUs", "leaking: ignore leaked resources", # see pytest_resourceleaks.py for usage "workerstate: deterministic test for the worker state machine. Automatically applied to all tests that use the 'ws' fixture.", ] # pytest-timeout settings # 'thread' kills off the whole test suite. 'signal' only kills the offending test. # However, 'signal' doesn't work on Windows (due to lack of SIGALRM). # The CI script modifies this config file on the fly on Linux and MacOS. timeout_method = "thread" # This should not be reduced; Windows CI has been observed to be occasionally # exceptionally slow. timeout = 300 [tool.mypy] python_version = "3.10" # See https://github.com/python/mypy/issues/12286 for automatic multi-platform support platform = "linux" # platform = win32 # platform = darwin allow_incomplete_defs = false allow_untyped_decorators = false ignore_missing_imports = true no_implicit_optional = true show_error_codes = true warn_redundant_casts = true warn_unused_ignores = true warn_unreachable = true [[tool.mypy.overrides]] # FIXME must clean these modules up # Also look for 'mypy: disable-error-code' at the top of modules module = ["distributed.client", "distributed.worker"] allow_incomplete_defs = true [[tool.mypy.overrides]] # Recent or recently overhauled modules featuring stricter validation module = [ "distributed.active_memory_manager", "distributed.spans", "distributed.system_monitor", "distributed.worker_memory", "distributed.worker_state_machine", "distributed.config", "distributed.shuffle.*", ] allow_untyped_defs = false [[tool.mypy.overrides]] module = ["distributed.shuffle.tests.*"] allow_untyped_defs = true [tool.codespell] ignore-words-list = "statics" skip = "docs/source/changelog.rst" [tool.coverage.run] source = ["distributed"] omit = [ "distributed/tests/test*", "distributed/*/tests/test*", "distributed/cli/*", "distributed/deploy/ssh.py", "distributed/_version.py", "distributed/pytest_resourceleaks.py", "distributed/comm/ucx.py", ] [tool.coverage.report] show_missing = true exclude_lines = [ # re-enable the standard pragma "pragma: nocover", "pragma: no cover", # exclude nvml calls '[\s(.]nvml[\s(.]', '[\s(.]pynvml[\s(.]', # exclude LOG_PDB "LOG_PDB", # always ignore type checking blocks "TYPE_CHECKING", "except ImportError", "@overload", "@abstractmethod", "@abc.abstractmethod" ] [tool.coverage.html] directory = "coverage_html_report"