Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yt-project
GitHub Repository: yt-project/yt
Path: blob/main/pyproject.toml
1401 views
1
[build-system]
2
# keep in sync with .github/workflows/wheels.yaml
3
requires = [
4
"setuptools>=77.0.0",
5
"Cython>=3.0.3",
6
"numpy>=2.0.0",
7
"ewah-bool-utils>=1.2.0",
8
]
9
build-backend = "setuptools.build_meta"
10
11
[project]
12
name = "yt"
13
version = "4.5.dev0"
14
description = "An analysis and visualization toolkit for volumetric data"
15
authors = [
16
{ name = "The yt project", email = "[email protected]" },
17
]
18
license = "BSD-3-Clause"
19
license-files = [
20
"COPYING.txt",
21
"yt/frontends/artio/artio_headers/LICENSE",
22
]
23
classifiers = [
24
"Development Status :: 5 - Production/Stable",
25
"Environment :: Console",
26
"Framework :: Matplotlib",
27
"Intended Audience :: Science/Research",
28
"Operating System :: MacOS :: MacOS X",
29
"Operating System :: POSIX :: AIX",
30
"Operating System :: POSIX :: Linux",
31
"Programming Language :: C",
32
"Programming Language :: C++",
33
"Programming Language :: Cython",
34
"Programming Language :: Python :: 3",
35
"Programming Language :: Python :: 3 :: Only",
36
"Programming Language :: Python :: 3.10",
37
"Programming Language :: Python :: 3.11",
38
"Programming Language :: Python :: 3.12",
39
"Programming Language :: Python :: 3.13",
40
"Programming Language :: Python :: 3.14",
41
"Topic :: Scientific/Engineering :: Astronomy",
42
"Topic :: Scientific/Engineering :: Physics",
43
"Topic :: Scientific/Engineering :: Visualization",
44
]
45
keywords = [
46
"adaptivemeshrefinement",
47
"amr",
48
"astronomy",
49
"astrophysics",
50
"visualization",
51
]
52
requires-python = ">=3.10.4"
53
54
# keep in sync with minimal_requirements.txt
55
dependencies = [
56
"cmyt>=1.1.2",
57
"ewah-bool-utils>=1.2.0",
58
"matplotlib>=3.7.0",
59
"more-itertools>=8.4",
60
"numpy>=1.21.3, <3", # keep minimal requirement in sync with NPY_TARGET_VERSION
61
# https://github.com/numpy/numpy/issues/27037
62
"numpy!=2.0.1 ; platform_machine=='arm64' and platform_system=='Darwin'",
63
"packaging>=21.0",
64
"pillow>=8.3.2",
65
"rlic>=0.3.2",
66
"tomli-w>=0.4.0",
67
"tqdm>=3.4.0",
68
"unyt>=2.9.2",
69
"tomli>=1.2.3;python_version < '3.11'",
70
"typing-extensions>=4.6.0 ; python_version < '3.12'",
71
]
72
73
[project.readme]
74
file = "README.md"
75
content-type = "text/markdown"
76
77
[project.urls]
78
Homepage = "https://yt-project.org/"
79
Documentation = "https://yt-project.org/doc/"
80
Source = "https://github.com/yt-project/yt/"
81
Tracker = "https://github.com/yt-project/yt/issues"
82
83
[project.entry-points."nose.plugins.0.10"]
84
# this section can be cleaned when nose tests on GHA are removed
85
answer-testing = "yt.utilities.answer_testing.framework:AnswerTesting"
86
87
[project.optional-dependencies]
88
# some generic, reusable constraints on optional-deps
89
HDF5 = [
90
"h5py>=3.6.0",
91
"h5py!=3.12.0 ; platform_system=='Windows'", # https://github.com/h5py/h5py/issues/2505
92
"h5py!=3.15.0 ; platform_system=='Darwin'", # https://github.com/yt-project/yt/issues/5301
93
]
94
netCDF4 = ["netCDF4!=1.6.1,>=1.5.3"] # see https://github.com/Unidata/netcdf4-python/issues/1192
95
Fortran = ["f90nml>=1.1"]
96
97
# frontend-specific requirements
98
# all frontends should have a target, even if no additional requirements are needed
99
# note that, because pip normalizes underscores to hyphens, we need to apply this transformation
100
# in target names here so that recursive dependencies link correctly.
101
# This does *not* prevent end-users to write, say `pip install yt[enzo_e]`.
102
# We also normalize all target names to lower case for consistency.
103
adaptahop = []
104
ahf = []
105
amrex = []
106
amrvac = ["yt[Fortran]"]
107
art = []
108
arepo = ["yt[HDF5]"]
109
artio = []
110
athena = []
111
athena-pp = []
112
boxlib = []
113
cf-radial = ["xarray>=0.16.1", "arm-pyart>=1.19.2",]
114
chimera = ["yt[HDF5]"]
115
chombo = ["yt[HDF5]"]
116
cholla = ["yt[HDF5]"]
117
eagle = ["yt[HDF5]"]
118
enzo-e = ["yt[HDF5]", "libconf>=1.0.1"]
119
enzo = ["yt[HDF5]", "libconf>=1.0.1"]
120
exodus-ii = ["yt[netCDF4]"]
121
fits = ["astropy>=5.0.1", "regions>=0.7"]
122
flash = ["yt[HDF5]"]
123
gadget = ["yt[HDF5]"]
124
gadget-fof = ["yt[HDF5]"]
125
gamer = ["yt[HDF5]"]
126
gdf = ["yt[HDF5]"]
127
gizmo = ["yt[HDF5]"]
128
halo-catalog = ["yt[HDF5]"]
129
http-stream = ["requests>=2.20.0"]
130
idefix = ["yt_idefix[HDF5]>=2.3.0"] # externally packaged frontend
131
moab = ["yt[HDF5]"]
132
nc4-cm1 = ["yt[netCDF4]"]
133
open-pmd = ["yt[HDF5]"]
134
owls = ["yt[HDF5]"]
135
owls-subfind = ["yt[HDF5]"]
136
parthenon = ["yt[HDF5]"]
137
ramses = ["yt[Fortran]", "scipy>=1.7.2"]
138
rockstar = []
139
sdf = ["requests>=2.20.0"]
140
stream = []
141
swift = ["yt[HDF5]"]
142
tipsy = []
143
ytdata = ["yt[HDF5]"]
144
145
# "full" should contain all optional dependencies intended for users (not devs)
146
# in particular it should enable support for all frontends
147
full = [
148
"cartopy>=0.22.0",
149
"firefly>=3.2.0",
150
"glueviz>=0.13.3",
151
"ipython>=7.16.2",
152
"ipywidgets>=8.0.0",
153
"miniballcpp>=0.2.1",
154
"mpi4py>=3.1.6",
155
"pandas>=1.3.4",
156
"pooch>=0.7.0",
157
"pyaml>=17.10.0",
158
"pykdtree>=1.3.4",
159
"pyx>=0.15",
160
"scipy>=1.7.2",
161
"ratarmount~=0.8.1;platform_system!='Windows' and platform_system!='Darwin'",
162
"yt[adaptahop]",
163
"yt[ahf]",
164
"yt[amrex]",
165
"yt[amrvac]",
166
"yt[art]",
167
"yt[arepo]",
168
"yt[artio]",
169
"yt[athena]",
170
"yt[athena_pp]",
171
"yt[boxlib]",
172
"yt[cf_radial]",
173
"yt[chimera]",
174
"yt[chombo]",
175
"yt[cholla]",
176
"yt[eagle]",
177
"yt[enzo_e]",
178
"yt[enzo]",
179
"yt[exodus_ii]",
180
"yt[fits]",
181
"yt[flash]",
182
"yt[gadget]",
183
"yt[gadget_fof]",
184
"yt[gamer]",
185
"yt[gdf]",
186
"yt[gizmo]",
187
"yt[halo_catalog]",
188
"yt[http_stream]",
189
"yt[idefix]",
190
"yt[moab]",
191
"yt[nc4_cm1]",
192
"yt[open_pmd]",
193
"yt[owls]",
194
"yt[owls_subfind]",
195
"yt[parthenon]",
196
"yt[ramses]",
197
"yt[rockstar]",
198
"yt[sdf]",
199
"yt[stream]",
200
"yt[swift]",
201
"yt[tipsy]",
202
"yt[ytdata]",
203
]
204
205
# dev-only extra targets
206
test = [
207
"pyaml>=17.10.0",
208
"pytest>=8.0.1",
209
"pytest-mpl>=0.16.1",
210
]
211
212
[project.scripts]
213
yt = "yt.utilities.command_line:run_main"
214
215
[dependency-groups]
216
docs = [
217
"alabaster>=0.7.13",
218
"bottle>=0.12.25",
219
"ipykernel>=6.29.4",
220
"jinja2<3.2.0",
221
"jupyter-client>=8.3.1",
222
"nbsphinx>=0.9.3",
223
"nose~=1.3.7 ; python_full_version < '3.10'",
224
"pytest>=6.1",
225
"pyx>=0.15",
226
"sphinx>=7.2.5",
227
"sphinx-bootstrap-theme>=0.8.1",
228
"sphinx-rtd-theme>=1.3.0",
229
]
230
mapserver = [
231
"bottle>=0.13.0",
232
]
233
mapping = [
234
"cartopy[plotting]>=0.22.0",
235
]
236
nosetest = [
237
"nose~=1.3.7",
238
"nose-exclude>=0.5.0",
239
"nose-timer~=1.0.0",
240
]
241
typecheck = [
242
"mypy>=1.18.2",
243
"types-chardet>=5.0.4.6",
244
"types-pyyaml>=6.0.12.20250915",
245
"types-requests>=2.32.4.20250913",
246
"typing-extensions>=4.6.0 ; python_full_version < '3.12'",
247
]
248
249
[tool.setuptools]
250
include-package-data = true
251
zip-safe = false
252
253
[tool.setuptools.packages.find]
254
namespaces = false
255
256
[tool.black]
257
# TODO: drop this section when ruff supports embedded python blocks
258
# see https://github.com/astral-sh/ruff/issues/8237
259
include = '\.pyi?$'
260
exclude = '''
261
/(
262
\.eggs
263
| \.git
264
| \.hg
265
| \.mypy_cache
266
| \.tox
267
| \.venv
268
| _build
269
| buck-out
270
| build
271
| dist
272
| yt/frontends/stream/sample_data
273
)/
274
| yt/visualization/_colormap_data.py
275
'''
276
277
[tool.ruff]
278
exclude = [
279
"doc",
280
"benchmarks",
281
"*/api.py",
282
"*/__init__.py",
283
"*/__config__.py",
284
"yt/units",
285
"yt/frontends/stream/sample_data",
286
"yt/utilities/fits_image.py",
287
"yt/utilities/lodgeit.py",
288
"yt/mods.py",
289
"yt/visualization/_colormap_data.py",
290
"yt/exthook.py",
291
]
292
293
[tool.ruff.lint]
294
select = [
295
"E",
296
"F",
297
"W",
298
"C4", # flake8-comprehensions
299
"B", # flake8-bugbear
300
"G", # flake8-logging-format
301
"TCH", # flake8-type-checking
302
"YTT", # flake8-2020
303
"UP", # pyupgrade
304
"I", # isort
305
"NPY", # numpy specific rules
306
"RUF031"# incorrectly-parenthesized-tuple-in-subscript
307
]
308
ignore = [
309
"E501", # line too long
310
"E741", # Do not use variables named 'I', 'O', or 'l'
311
"B018", # Found useless expression. # disabled because ds.index is idiomatic
312
]
313
314
[tool.ruff.lint.per-file-ignores]
315
"test_*" = ["NPY002"]
316
317
[tool.ruff.lint.isort]
318
combine-as-imports = true
319
known-third-party = [
320
"IPython",
321
"nose",
322
"numpy",
323
"sympy",
324
"matplotlib",
325
"unyt",
326
"git",
327
"yaml",
328
"dateutil",
329
"requests",
330
"coverage",
331
"pytest",
332
"pyx",
333
"glue",
334
]
335
known-first-party = ["yt"]
336
337
# The -s option prevents pytest from capturing output sent to stdout
338
# -v runs pytest in verbose mode
339
# -rsfE: The -r tells pytest to provide extra test summary info on the events
340
# specified by the characters following the r. s: skipped, f: failed, E: error
341
[tool.pytest.ini_options]
342
addopts = '''
343
-rsfE
344
--ignore-glob='/*_nose.py'
345
--ignore-glob='/*/yt/data_objects/level_sets/tests/test_clump_finding.py'
346
--ignore-glob='/*/yt/data_objects/tests/test_connected_sets.py'
347
--ignore-glob='/*/yt/data_objects/tests/test_dataset_access.py'
348
--ignore-glob='/*/yt/data_objects/tests/test_particle_filter.py'
349
--ignore-glob='/*/yt/data_objects/tests/test_particle_trajectories.py'
350
--ignore-glob='/*/yt/data_objects/tests/test_pickling.py'
351
--ignore-glob='/*/yt/data_objects/tests/test_regions.py'
352
--ignore-glob='/*/yt/fields/tests/test_particle_fields.py'
353
--ignore-glob='/*/yt/fields/tests/test_vector_fields.py'
354
--ignore-glob='/*/yt/fields/tests/test_xray_fields.py'
355
--ignore-glob='/*/yt/frontends/adaptahop/tests/test_outputs.py'
356
--ignore-glob='/*/yt/frontends/ahf/tests/test_outputs.py'
357
--ignore-glob='/*/yt/frontends/amrex/tests/test_outputs.py'
358
--ignore-glob='/*/yt/frontends/amrvac/tests/test_outputs.py'
359
--ignore-glob='/*/yt/frontends/amrvac/tests/test_units_override.py'
360
--ignore-glob='/*/yt/frontends/arepo/tests/test_outputs.py'
361
--ignore-glob='/*/yt/frontends/art/tests/test_outputs.py'
362
--ignore-glob='/*/yt/frontends/artio/tests/test_outputs.py'
363
--ignore-glob='/*/yt/frontends/athena/tests/test_outputs.py'
364
--ignore-glob='/*/yt/frontends/athena_pp/tests/test_outputs.py'
365
--ignore-glob='/*/yt/frontends/boxlib/tests/test_outputs.py'
366
--ignore-glob='/*/yt/frontends/cf_radial/tests/test_outputs.py'
367
--ignore-glob='/*/yt/frontends/chimera/tests/test_outputs.py'
368
--ignore-glob='/*/yt/frontends/cholla/tests/test_outputs.py'
369
--ignore-glob='/*/yt/frontends/chombo/tests/test_outputs.py'
370
--ignore-glob='/*/yt/frontends/eagle/tests/test_outputs.py'
371
--ignore-glob='/*/yt/frontends/enzo/tests/test_outputs.py'
372
--ignore-glob='/*/yt/frontends/enzo_e/tests/test_outputs.py'
373
--ignore-glob='/*/yt/frontends/exodus_ii/tests/test_outputs.py'
374
--ignore-glob='/*/yt/frontends/fits/tests/test_outputs.py'
375
--ignore-glob='/*/yt/frontends/flash/tests/test_outputs.py'
376
--ignore-glob='/*/yt/frontends/gadget/tests/test_outputs.py'
377
--ignore-glob='/*/yt/frontends/gadget_fof/tests/test_outputs.py'
378
--ignore-glob='/*/yt/frontends/gamer/tests/test_outputs.py'
379
--ignore-glob='/*/yt/frontends/gdf/tests/test_outputs.py'
380
--ignore-glob='/*/yt/frontends/gdf/tests/test_outputs_nose.py'
381
--ignore-glob='/*/yt/frontends/gizmo/tests/test_outputs.py'
382
--ignore-glob='/*/yt/frontends/halo_catalog/tests/test_outputs.py'
383
--ignore-glob='/*/yt/frontends/moab/tests/test_c5.py'
384
--ignore-glob='/*/yt/frontends/nc4_cm1/tests/test_outputs.py'
385
--ignore-glob='/*/yt/frontends/open_pmd/tests/test_outputs.py'
386
--ignore-glob='/*/yt/frontends/owls/tests/test_outputs.py'
387
--ignore-glob='/*/yt/frontends/owls_subfind/tests/test_outputs.py'
388
--ignore-glob='/*/yt/frontends/parthenon/tests/test_outputs.py'
389
--ignore-glob='/*/yt/frontends/ramses/tests/test_outputs.py'
390
--ignore-glob='/*/yt/frontends/rockstar/tests/test_outputs.py'
391
--ignore-glob='/*/yt/frontends/tipsy/tests/test_outputs.py'
392
--ignore-glob='/*/yt/frontends/ytdata/tests/test_old_outputs.py'
393
--ignore-glob='/*/yt/frontends/ytdata/tests/test_outputs.py'
394
--ignore-glob='/*/yt/frontends/ytdata/tests/test_unit.py'
395
--ignore-glob='/*/yt/geometry/coordinates/tests/test_axial_pixelization.py'
396
--ignore-glob='/*/yt/geometry/coordinates/tests/test_cylindrical_coordinates.py'
397
--ignore-glob='/*/yt/geometry/coordinates/tests/test_spherical_coordinates.py'
398
--ignore-glob='/*/yt/tests/test_funcs.py'
399
--ignore-glob='/*/yt/utilities/lib/cykdtree/tests/__init__.py'
400
--ignore-glob='/*/yt/utilities/lib/cykdtree/tests/test_kdtree.py'
401
--ignore-glob='/*/yt/utilities/lib/cykdtree/tests/test_plot.py'
402
--ignore-glob='/*/yt/utilities/lib/cykdtree/tests/test_utils.py'
403
--ignore-glob='/*/yt/utilities/tests/test_cosmology.py'
404
--ignore-glob='/*/yt/visualization/tests/test_callbacks.py'
405
--ignore-glob='/*/yt/visualization/tests/test_color_maps.py'
406
--ignore-glob='/*/yt/visualization/tests/test_geo_projections.py'
407
--ignore-glob='/*/yt/visualization/tests/test_image_writer.py'
408
--ignore-glob='/*/yt/visualization/tests/test_line_plots.py'
409
--ignore-glob='/*/yt/visualization/tests/test_mesh_slices.py'
410
--ignore-glob='/*/yt/visualization/tests/test_norm_api_custom_norm.py'
411
--ignore-glob='/*/yt/visualization/tests/test_norm_api_inf_zlim.py'
412
--ignore-glob='/*/yt/visualization/tests/test_norm_api_lineplot.py'
413
--ignore-glob='/*/yt/visualization/tests/test_norm_api_particleplot.py'
414
--ignore-glob='/*/yt/visualization/tests/test_norm_api_phaseplot_set_colorbar_explicit.py'
415
--ignore-glob='/*/yt/visualization/tests/test_norm_api_phaseplot_set_colorbar_implicit.py'
416
--ignore-glob='/*/yt/visualization/tests/test_norm_api_profileplot.py'
417
--ignore-glob='/*/yt/visualization/tests/test_norm_api_set_background_color.py'
418
--ignore-glob='/*/yt/visualization/tests/test_particle_plot.py'
419
--ignore-glob='/*/yt/visualization/tests/test_plot_modifications.py'
420
--ignore-glob='/*/yt/visualization/tests/test_plotwindow.py'
421
--ignore-glob='/*/yt/visualization/tests/test_raw_field_slices.py'
422
--ignore-glob='/*/yt/visualization/volume_rendering/tests/test_mesh_render.py'
423
--ignore-glob='/*/yt/visualization/volume_rendering/tests/test_vr_orientation.py'
424
425
'''
426
427
428
[tool.check-manifest]
429
# ignore generated C/C++ files, otherwise reported as "missing from VCS" (Version Control System)
430
# Please resist the temptation to use patterns instead of exact file names here.
431
ignore = [
432
"yt/frontends/artio/_artio_caller.c",
433
"yt/frontends/gamer/cfields.c",
434
"yt/frontends/ramses/io_utils.c",
435
"yt/geometry/fake_octree.c",
436
"yt/geometry/grid_container.c",
437
"yt/geometry/grid_visitors.c",
438
"yt/geometry/oct_container.c",
439
"yt/geometry/oct_visitors.c",
440
"yt/geometry/particle_deposit.c",
441
"yt/geometry/particle_oct_container.cpp",
442
"yt/geometry/particle_smooth.c",
443
"yt/geometry/selection_routines.c",
444
"yt/utilities/cython_fortran_utils.c",
445
"yt/utilities/lib/_octree_raytracing.cpp",
446
"yt/utilities/lib/allocation_container.c",
447
"yt/utilities/lib/alt_ray_tracers.c",
448
"yt/utilities/lib/amr_kdtools.c",
449
"yt/utilities/lib/autogenerated_element_samplers.c",
450
"yt/utilities/lib/basic_octree.c",
451
"yt/utilities/lib/bitarray.c",
452
"yt/utilities/lib/bounded_priority_queue.c",
453
"yt/utilities/lib/bounding_volume_hierarchy.cpp",
454
"yt/utilities/lib/contour_finding.c",
455
"yt/utilities/lib/cosmology_time.c",
456
"yt/utilities/lib/cykdtree/kdtree.cpp",
457
"yt/utilities/lib/cykdtree/utils.cpp",
458
"yt/utilities/lib/cyoctree.c",
459
"yt/utilities/lib/cyoctree.cpp",
460
"yt/utilities/lib/depth_first_octree.c",
461
"yt/utilities/lib/distance_queue.c",
462
"yt/utilities/lib/element_mappings.c",
463
"yt/utilities/lib/ewah_bool_wrap.cpp",
464
"yt/utilities/lib/fnv_hash.c",
465
"yt/utilities/lib/fortran_reader.c",
466
"yt/utilities/lib/geometry_utils.cpp",
467
"yt/utilities/lib/grid_traversal.cpp",
468
"yt/utilities/lib/image_samplers.cpp",
469
"yt/utilities/lib/image_utilities.c",
470
"yt/utilities/lib/interpolators.c",
471
"yt/utilities/lib/lenses.c",
472
"yt/utilities/lib/marching_cubes.cpp",
473
"yt/utilities/lib/mesh_triangulation.c",
474
"yt/utilities/lib/mesh_utilities.c",
475
"yt/utilities/lib/misc_utilities.cpp",
476
"yt/utilities/lib/origami.c",
477
"yt/utilities/lib/particle_kdtree_tools.cpp",
478
"yt/utilities/lib/particle_mesh_operations.c",
479
"yt/utilities/lib/partitioned_grid.cpp",
480
"yt/utilities/lib/pixelization_routines.cpp",
481
"yt/utilities/lib/points_in_volume.c",
482
"yt/utilities/lib/primitives.c",
483
"yt/utilities/lib/quad_tree.c",
484
"yt/utilities/lib/ragged_arrays.c",
485
"yt/utilities/lib/write_array.c",
486
]
487
488
489
[tool.mypy]
490
python_version = '3.10'
491
show_error_codes = true
492
ignore_missing_imports = true
493
warn_unused_configs = true
494
warn_unused_ignores = true
495
warn_unreachable = true
496
show_error_context = true
497
exclude = "(test_*|lodgeit)"
498
499
[tool.cibuildwheel]
500
build-verbosity = 1
501
skip = ["cp314t-*"]
502
build-frontend = "build[uv]"
503
test-extras = "test"
504
test-command = [
505
'python -c "import yt"',
506
"python -m pytest -c {project}/pyproject.toml --rootdir . --color=yes --pyargs yt -ra",
507
]
508
environment = {"YT_LIMITED_API" = "1"}
509
510
[tool.uv]
511
# never build the following packages from sources (always prefer wheels)
512
no-build-package = [
513
# "arm-pyart", # temporarily disabled because there are no cp313 wheels yet
514
"astropy",
515
"appnope",
516
"bottleneck",
517
"cartopy",
518
"cffi",
519
"contourpy",
520
"ewah-bool-utils",
521
"fast-histogram",
522
"h5py",
523
"jinja2",
524
"kiwisolver",
525
"markupsafe",
526
"matplotlib",
527
"numpy",
528
"netCDF4",
529
"pandas",
530
"pillow",
531
"psutil",
532
"py",
533
"pykdtree",
534
"pyproj",
535
"pyyaml",
536
"rlic",
537
"scipy",
538
"shapely",
539
540
# via firefly
541
"flask",
542
"gevent",
543
"greenlet",
544
"zope-interface",
545
546
# via astropy
547
"pyerfa",
548
]
549
constraint-dependencies = [
550
"imageio!=2.35.0", # see https://github.com/yt-project/yt/issues/4966
551
"glue-core!=1.2.4", # see https://github.com/glue-viz/glue/issues/2263
552
"sympy!=1.10,!=1.9", # see https://github.com/sympy/sympy/issues/22241
553
"jinja2>=2.11.3",
554
555
# wheels
556
"mpmath>=1.2.1", # via sympy
557
"iniconfig>=1.0.1", # via pytest
558
559
# from ipython (these can be removed when ipython<9.7 is dropped)
560
"ipython-pygments-lexers>=1.0.0",
561
"decorator>=4.3.2",
562
"jedi>=0.18.1",
563
"stack_data>=0.6.0",
564
"pygments>=2.11.0",
565
566
# from pyart
567
# see https://github.com/ARM-DOE/pyart/pull/1813
568
"cftime>=1.5.1.1",
569
"fsspec>=2021.11.0",
570
"mda-xdrlib>=0.2.0",
571
"open-radar-data>=0.5.0",
572
"pint>=0.18.0",
573
"s3fs>=2021.11.0",
574
]
575
576