netCDF4 1.7.2__tar.gz → 1.7.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/workflows/build_latest.yml +23 -14
  2. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/workflows/build_master.yml +17 -11
  3. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/workflows/build_old.yml +20 -12
  4. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/workflows/cibuildwheel.yml +76 -64
  5. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/workflows/miniconda.yml +8 -3
  6. {netcdf4-1.7.2 → netcdf4-1.7.4}/Changelog +22 -0
  7. {netcdf4-1.7.2 → netcdf4-1.7.4}/MANIFEST.in +0 -1
  8. {netcdf4-1.7.2/src/netCDF4.egg-info → netcdf4-1.7.4}/PKG-INFO +13 -9
  9. {netcdf4-1.7.2 → netcdf4-1.7.4}/README.md +9 -1
  10. {netcdf4-1.7.2 → netcdf4-1.7.4}/docs/index.html +112 -36
  11. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/membuf.pyx +1 -1
  12. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/netcdf-compat.h +1 -1
  13. netcdf4-1.7.4/pyproject.toml +168 -0
  14. {netcdf4-1.7.2 → netcdf4-1.7.4}/setup.py +36 -5
  15. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/__init__.py +8 -7
  16. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/__init__.pyi +14 -3
  17. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/_netCDF4.pyx +113 -76
  18. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/utils.py +6 -6
  19. {netcdf4-1.7.2 → netcdf4-1.7.4/src/netCDF4.egg-info}/PKG-INFO +13 -9
  20. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4.egg-info/SOURCES.txt +1 -0
  21. netcdf4-1.7.4/src/netCDF4.egg-info/requires.txt +17 -0
  22. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/run_all.py +0 -1
  23. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_cdl.py +10 -0
  24. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression_blosc.py +3 -1
  25. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked2.py +1 -2
  26. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked3.py +1 -1
  27. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked4.py +1 -1
  28. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked5.py +1 -1
  29. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked6.py +1 -1
  30. netcdf4-1.7.4/test/test_no_iter_contains.py +34 -0
  31. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_open_mem.py +0 -6
  32. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_scaled.py +1 -1
  33. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_stringarr.py +17 -0
  34. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_types.py +1 -1
  35. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_vlen.py +9 -0
  36. netcdf4-1.7.2/pyproject.toml +0 -101
  37. netcdf4-1.7.2/src/netCDF4.egg-info/requires.txt +0 -8
  38. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/dependabot.yml +0 -0
  39. {netcdf4-1.7.2 → netcdf4-1.7.4}/.github/stubtest-allowlist +0 -0
  40. {netcdf4-1.7.2 → netcdf4-1.7.4}/.gitmodules +0 -0
  41. {netcdf4-1.7.2 → netcdf4-1.7.4}/LICENSE +0 -0
  42. {netcdf4-1.7.2 → netcdf4-1.7.4}/README.htmldocs +0 -0
  43. {netcdf4-1.7.2 → netcdf4-1.7.4}/README.release +0 -0
  44. {netcdf4-1.7.2 → netcdf4-1.7.4}/checkversion.py +0 -0
  45. {netcdf4-1.7.2 → netcdf4-1.7.4}/create_docs.sh +0 -0
  46. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/README.md +0 -0
  47. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench.py +0 -0
  48. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench_compress.py +0 -0
  49. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench_compress2.py +0 -0
  50. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench_compress3.py +0 -0
  51. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench_compress4.py +0 -0
  52. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/bench_diskless.py +0 -0
  53. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/complex_numbers.py +0 -0
  54. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/json_att.py +0 -0
  55. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/mpi_example.py +0 -0
  56. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/mpi_example_compressed.py +0 -0
  57. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/reading_netCDF.ipynb +0 -0
  58. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/subset.py +0 -0
  59. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/test_stringarr.py +0 -0
  60. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/threaded_read.py +0 -0
  61. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/tutorial.py +0 -0
  62. {netcdf4-1.7.2 → netcdf4-1.7.4}/examples/writing_netCDF.ipynb +0 -0
  63. {netcdf4-1.7.2 → netcdf4-1.7.4}/external/README +0 -0
  64. {netcdf4-1.7.2 → netcdf4-1.7.4}/external/nc_complex/include/generated_fallbacks/nc_complex_version.h +0 -0
  65. {netcdf4-1.7.2 → netcdf4-1.7.4}/external/nc_complex/include/nc_complex/nc_complex.h +0 -0
  66. {netcdf4-1.7.2 → netcdf4-1.7.4}/external/nc_complex/src/nc_complex.c +0 -0
  67. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/mpi-compat.h +0 -0
  68. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/netCDF4.pxi +0 -0
  69. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/no_parallel_support_imports.pxi.in +0 -0
  70. {netcdf4-1.7.2 → netcdf4-1.7.4}/include/parallel_support_imports.pxi.in +0 -0
  71. {netcdf4-1.7.2 → netcdf4-1.7.4}/man/nc3tonc4.1 +0 -0
  72. {netcdf4-1.7.2 → netcdf4-1.7.4}/man/nc4tonc3.1 +0 -0
  73. {netcdf4-1.7.2 → netcdf4-1.7.4}/man/ncinfo.1 +0 -0
  74. {netcdf4-1.7.2 → netcdf4-1.7.4}/setup.cfg +0 -0
  75. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/_netCDF4.pyi +0 -0
  76. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/plugins/empty.txt +0 -0
  77. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4/py.typed +0 -0
  78. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4.egg-info/dependency_links.txt +0 -0
  79. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4.egg-info/entry_points.txt +0 -0
  80. {netcdf4-1.7.2 → netcdf4-1.7.4}/src/netCDF4.egg-info/top_level.txt +0 -0
  81. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/20171025_2056.Cloud_Top_Height.nc +0 -0
  82. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/CRM032_test1.nc +0 -0
  83. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/__init__.py +0 -0
  84. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/filter_availability.py +0 -0
  85. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/issue1152.nc +0 -0
  86. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/issue671.nc +0 -0
  87. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/issue672.nc +0 -0
  88. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/netcdf_dummy_file.nc +0 -0
  89. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_Unsigned.py +0 -0
  90. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_alignment.py +0 -0
  91. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_atts.py +0 -0
  92. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_cdf5.py +0 -0
  93. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_chunk_cache.py +0 -0
  94. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_complex.py +0 -0
  95. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compound_alignment.py +0 -0
  96. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compoundatt.py +0 -0
  97. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compoundvar.py +0 -0
  98. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression.py +0 -0
  99. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression_bzip2.py +0 -0
  100. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression_quant.py +0 -0
  101. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression_szip.py +0 -0
  102. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_compression_zstd.py +0 -0
  103. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_create_mem.py +0 -0
  104. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_dap.py +0 -0
  105. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_dims.py +0 -0
  106. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_diskless.py +0 -0
  107. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_endian.py +0 -0
  108. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_enum.py +0 -0
  109. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_fancyslicing.py +0 -0
  110. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_filepath.py +0 -0
  111. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_get_fill_value.py +0 -0
  112. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_get_variables_by_attributes.py +0 -0
  113. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_gold.nc +0 -0
  114. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_grps.py +0 -0
  115. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_grps2.py +0 -0
  116. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_issue908.py +0 -0
  117. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_masked.py +0 -0
  118. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_multifile.py +0 -0
  119. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_multifile2.py +0 -0
  120. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_multiple_open_close.py +0 -0
  121. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_ncrc.py +0 -0
  122. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_refcount.py +0 -0
  123. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_rename.py +0 -0
  124. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_scalarvar.py +0 -0
  125. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_shape.py +0 -0
  126. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_slicing.py +0 -0
  127. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_unicode.py +0 -0
  128. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_unicodeatt.py +0 -0
  129. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_unlimdim.py +0 -0
  130. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_utils.py +0 -0
  131. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/test_vars.py +0 -0
  132. {netcdf4-1.7.2 → netcdf4-1.7.4}/test/ubyte.nc +0 -0
@@ -5,30 +5,32 @@ jobs:
5
5
  name: Python (${{ matrix.python-version }})
6
6
  runs-on: ubuntu-latest
7
7
  env:
8
- PNETCDF_VERSION: 1.12.1
9
- NETCDF_VERSION: 4.9.2
8
+ PNETCDF_VERSION: 1.14.1
9
+ NETCDF_VERSION: 4.9.3
10
10
  NETCDF_DIR: ${{ github.workspace }}/..
11
11
  NETCDF_EXTRA_CONFIG: --enable-pnetcdf
12
- CC: mpicc.mpich
12
+ #CC: mpicc.mpich
13
+ CC: mpicc
13
14
  #NO_NET: 1
14
15
  strategy:
15
16
  matrix:
16
- python-version: ["3.12"]
17
+ python-version: ["3.14"]
17
18
  steps:
18
19
 
19
- - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v6
20
21
  with:
21
22
  submodules: true
22
23
 
23
24
  - name: Set up Python ${{ matrix.python-version }}
24
- uses: actions/setup-python@v5
25
+ uses: actions/setup-python@v6
25
26
  with:
26
27
  python-version: ${{ matrix.python-version }}
27
28
 
28
29
  - name: Install Ubuntu Dependencies
29
30
  run: |
30
31
  sudo apt-get update
31
- sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
32
+ #sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev openmpi-bin openmpi-common libopenmpi-dev libhdf5-openmpi-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
33
+ sudo apt-get install openmpi-common libopenmpi-dev openmpi-bin libhdf5-openmpi-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
32
34
  echo "Download and build PnetCDF version ${PNETCDF_VERSION}"
33
35
  wget https://parallel-netcdf.github.io/Release/pnetcdf-${PNETCDF_VERSION}.tar.gz
34
36
  tar -xzf pnetcdf-${PNETCDF_VERSION}.tar.gz
@@ -41,9 +43,12 @@ jobs:
41
43
  wget https://downloads.unidata.ucar.edu/netcdf-c/${NETCDF_VERSION}/netcdf-c-${NETCDF_VERSION}.tar.gz
42
44
  tar -xzf netcdf-c-${NETCDF_VERSION}.tar.gz
43
45
  pushd netcdf-c-${NETCDF_VERSION}
44
- export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
46
+ #export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
47
+ export CPPFLAGS="-I/usr/include/hdf5/openmpi -I${NETCDF_DIR}/include"
45
48
  export LDFLAGS="-L${NETCDF_DIR}/lib"
46
- export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
49
+ #export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
50
+ export LIBS="-lhdf5_openmpi_hl -lhdf5_openmpi -lm -lz"
51
+ which $CC
47
52
  ./configure --prefix $NETCDF_DIR --enable-netcdf-4 --enable-shared --enable-dap --enable-parallel4 $NETCDF_EXTRA_CONFIG
48
53
  make -j 2
49
54
  sudo make install
@@ -58,13 +63,14 @@ jobs:
58
63
  - name: Install python dependencies via pip
59
64
  run: |
60
65
  python -m pip install --upgrade pip
61
- pip install numpy cython cftime pytest twine wheel check-manifest mpi4py typing-extensions
66
+ python -m pip install numpy cython cftime pytest twine wheel check-manifest mpi4py typing-extensions
62
67
 
63
68
  - name: Install netcdf4-python
64
69
  run: |
65
70
  export PATH=${NETCDF_DIR}/bin:${PATH}
66
71
  export NETCDF_PLUGIN_DIR=${{ github.workspace }}/netcdf-c-${NETCDF_VERSION}/plugins/plugindir
67
- python setup.py install
72
+ python -m pip install . --no-build-isolation
73
+
68
74
  - name: Test
69
75
  run: |
70
76
  export PATH=${NETCDF_DIR}/bin:${PATH}
@@ -74,21 +80,24 @@ jobs:
74
80
  python run_all.py
75
81
  # parallel (hdf5 for netcdf4, pnetcdf for netcdf3)
76
82
  cd ../examples
77
- mpirun.mpich -np 4 python mpi_example.py
83
+ #mpirun.mpich -np 4 python mpi_example.py
84
+ mpirun -np 4 --oversubscribe python mpi_example.py
78
85
  if [ $? -ne 0 ] ; then
79
86
  echo "hdf5 mpi test failed!"
80
87
  exit 1
81
88
  else
82
89
  echo "hdf5 mpi test passed!"
83
90
  fi
84
- mpirun.mpich -np 4 python mpi_example_compressed.py
91
+ #mpirun.mpich -np 4 python mpi_example_compressed.py
92
+ mpirun -np 4 --oversubscribe python mpi_example_compressed.py
85
93
  if [ $? -ne 0 ] ; then
86
94
  echo "hdf5 compressed mpi test failed!"
87
95
  exit 1
88
96
  else
89
97
  echo "hdf5 compressed mpi test passed!"
90
98
  fi
91
- mpirun.mpich -np 4 python mpi_example.py NETCDF3_64BIT_DATA
99
+ #mpirun.mpich -np 4 python mpi_example.py NETCDF3_64BIT_DATA
100
+ mpirun -np 4 --oversubscribe python mpi_example.py NETCDF3_64BIT_DATA
92
101
  if [ $? -ne 0 ] ; then
93
102
  echo "pnetcdf mpi test failed!"
94
103
  exit 1
@@ -6,32 +6,36 @@ jobs:
6
6
  runs-on: ubuntu-latest
7
7
  env:
8
8
  NETCDF_DIR: ${{ github.workspace }}/..
9
- CC: mpicc.mpich
9
+ #CC: mpicc.mpich
10
+ CC: mpicc
10
11
  #NO_NET: 1
11
12
  strategy:
12
13
  matrix:
13
- python-version: ["3.12"]
14
+ python-version: ["3.14"]
14
15
  steps:
15
16
 
16
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v6
17
18
  with:
18
19
  submodules: true
19
20
 
20
21
  - name: Set up Python ${{ matrix.python-version }}
21
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
22
23
  with:
23
24
  python-version: ${{ matrix.python-version }}
24
25
 
25
26
  - name: Install Ubuntu Dependencies
26
27
  run: |
27
28
  sudo apt-get update
28
- sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
29
+ #sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
30
+ sudo apt-get install openmpi-common libopenmpi-dev openmpi-bin libhdf5-openmpi-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
29
31
  echo "Download and build netCDF github master"
30
32
  git clone https://github.com/Unidata/netcdf-c
31
33
  pushd netcdf-c
32
- export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
34
+ #export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
35
+ export CPPFLAGS="-I/usr/include/hdf5/openmpi -I${NETCDF_DIR}/include"
33
36
  export LDFLAGS="-L${NETCDF_DIR}/lib"
34
- export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
37
+ #export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
38
+ export LIBS="-lhdf5_openmpi_hl -lhdf5_openmpi -lm -lz"
35
39
  autoreconf -i
36
40
  ./configure --prefix $NETCDF_DIR --enable-netcdf-4 --enable-shared --enable-dap --enable-parallel4
37
41
  make -j 2
@@ -47,13 +51,13 @@ jobs:
47
51
  - name: Install python dependencies via pip
48
52
  run: |
49
53
  python -m pip install --upgrade pip
50
- pip install numpy cython cftime pytest twine wheel check-manifest mpi4py mypy types-setuptools typing-extensions
54
+ python -m pip install numpy cython cftime pytest twine wheel check-manifest mpi4py mypy types-setuptools typing-extensions
51
55
 
52
56
  - name: Install netcdf4-python
53
57
  run: |
54
58
  export PATH=${NETCDF_DIR}/bin:${PATH}
55
59
  export NETCDF_PLUGIN_DIR=${{ github.workspace }}/netcdf-c/plugins/plugindir
56
- python setup.py install
60
+ python -m pip install . --no-build-isolation
57
61
 
58
62
  - name: Test
59
63
  run: |
@@ -65,14 +69,16 @@ jobs:
65
69
  python run_all.py
66
70
  # parallel
67
71
  cd ../examples
68
- mpirun.mpich -np 4 python mpi_example.py
72
+ #mpirun.mpich -np 4 python mpi_example.py
73
+ mpirun -np 4 --oversubscribe python mpi_example.py
69
74
  if [ $? -ne 0 ] ; then
70
75
  echo "hdf5 mpi test failed!"
71
76
  exit 1
72
77
  else
73
78
  echo "hdf5 mpi test passed!"
74
79
  fi
75
- mpirun.mpich -np 4 python mpi_example_compressed.py
80
+ #mpirun.mpich -np 4 python mpi_example_compressed.py
81
+ mpirun -np 4 --oversubscribe python mpi_example_compressed.py
76
82
  if [ $? -ne 0 ] ; then
77
83
  echo "hdf5 compressed mpi test failed!"
78
84
  exit 1
@@ -9,26 +9,28 @@ jobs:
9
9
  NETCDF_VERSION: 4.7.4
10
10
  NETCDF_DIR: ${{ github.workspace }}/..
11
11
  NETCDF_EXTRA_CONFIG: --enable-pnetcdf
12
- CC: mpicc.mpich
12
+ #CC: mpicc.mpich
13
+ CC: mpicc
13
14
  #NO_NET: 1
14
15
  strategy:
15
16
  matrix:
16
- python-version: ["3.12"]
17
+ python-version: ["3.14"]
17
18
  steps:
18
19
 
19
- - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v6
20
21
  with:
21
22
  submodules: true
22
23
 
23
24
  - name: Set up Python ${{ matrix.python-version }}
24
- uses: actions/setup-python@v5
25
+ uses: actions/setup-python@v6
25
26
  with:
26
27
  python-version: ${{ matrix.python-version }}
27
28
 
28
29
  - name: Install Ubuntu Dependencies
29
30
  run: |
30
31
  sudo apt-get update
31
- sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
32
+ #sudo apt-get install mpich libmpich-dev libhdf5-mpich-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
33
+ sudo apt-get install openmpi-common libopenmpi-dev openmpi-bin libhdf5-openmpi-dev libcurl4-openssl-dev bzip2 libsnappy-dev libblosc-dev libzstd-dev
32
34
  echo "Download and build PnetCDF version ${PNETCDF_VERSION}"
33
35
  wget https://parallel-netcdf.github.io/Release/pnetcdf-${PNETCDF_VERSION}.tar.gz
34
36
  tar -xzf pnetcdf-${PNETCDF_VERSION}.tar.gz
@@ -42,9 +44,11 @@ jobs:
42
44
  wget https://www.gfd-dennou.org/arch/netcdf/unidata-mirror/netcdf-c-${NETCDF_VERSION}.tar.gz
43
45
  tar -xzf netcdf-c-${NETCDF_VERSION}.tar.gz
44
46
  pushd netcdf-c-${NETCDF_VERSION}
45
- export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
47
+ #export CPPFLAGS="-I/usr/include/hdf5/mpich -I${NETCDF_DIR}/include"
48
+ export CPPFLAGS="-I/usr/include/hdf5/openmpi -I${NETCDF_DIR}/include"
46
49
  export LDFLAGS="-L${NETCDF_DIR}/lib"
47
- export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
50
+ #export LIBS="-lhdf5_mpich_hl -lhdf5_mpich -lm -lz"
51
+ export LIBS="-lhdf5_openmpi_hl -lhdf5_openmpi -lm -lz"
48
52
  ./configure --prefix $NETCDF_DIR --enable-netcdf-4 --enable-shared --enable-dap --enable-parallel4 $NETCDF_EXTRA_CONFIG
49
53
  make -j 2
50
54
  sudo make install
@@ -59,13 +63,14 @@ jobs:
59
63
  - name: Install python dependencies via pip
60
64
  run: |
61
65
  python -m pip install --upgrade pip
62
- pip install numpy cython cftime pytest twine wheel check-manifest mpi4py typing-extensions
66
+ python -m pip install numpy cython cftime pytest twine wheel check-manifest mpi4py typing-extensions
63
67
 
64
68
  - name: Install netcdf4-python
65
69
  run: |
66
70
  export PATH=${NETCDF_DIR}/bin:${PATH}
67
71
  export NETCDF_PLUGIN_DIR=${{ github.workspace }}/netcdf-c-${NETCDF_VERSION}/plugins/plugindir
68
- python setup.py install
72
+ python -m pip install . --no-build-isolation
73
+
69
74
  - name: Test
70
75
  run: |
71
76
  export PATH=${NETCDF_DIR}/bin:${PATH}
@@ -75,21 +80,24 @@ jobs:
75
80
  python run_all.py
76
81
  # parallel (hdf5 for netcdf4, pnetcdf for netcdf3)
77
82
  cd ../examples
78
- mpirun.mpich -np 4 python mpi_example.py
83
+ #mpirun.mpich -np 4 python mpi_example.py
84
+ mpirun -np 4 --oversubscribe python mpi_example.py
79
85
  if [ $? -ne 0 ] ; then
80
86
  echo "hdf5 mpi test failed!"
81
87
  exit 1
82
88
  else
83
89
  echo "hdf5 mpi test passed!"
84
90
  fi
85
- mpirun.mpich -np 4 python mpi_example_compressed.py
91
+ #mpirun.mpich -np 4 python mpi_example_compressed.py
92
+ mpirun -np 4 --oversubscribe python mpi_example_compressed.py
86
93
  if [ $? -ne 0 ] ; then
87
94
  echo "hdf5 compressed mpi test failed!"
88
95
  exit 1
89
96
  else
90
97
  echo "hdf5 compressed mpi test passed!"
91
98
  fi
92
- mpirun.mpich -np 4 python mpi_example.py NETCDF3_64BIT_DATA
99
+ #mpirun.mpich -np 4 python mpi_example.py NETCDF3_64BIT_DATA
100
+ mpirun -np 4 --oversubscribe python mpi_example.py NETCDF3_64BIT_DATA
93
101
  if [ $? -ne 0 ] ; then
94
102
  echo "pnetcdf mpi test failed!"
95
103
  exit 1
@@ -18,11 +18,11 @@ jobs:
18
18
  name: Build source distribution
19
19
  runs-on: ubuntu-22.04
20
20
  steps:
21
- - uses: actions/checkout@v4
21
+ - uses: actions/checkout@v6
22
22
  with:
23
23
  fetch-depth: 0
24
24
 
25
- - uses: actions/setup-python@v5
25
+ - uses: actions/setup-python@v6
26
26
  name: Install Python
27
27
  with:
28
28
  python-version: 3.x
@@ -38,7 +38,7 @@ jobs:
38
38
  pip install build
39
39
  && python -m build --sdist . --outdir dist
40
40
 
41
- - uses: actions/upload-artifact@v4
41
+ - uses: actions/upload-artifact@v6
42
42
  with:
43
43
  name: pypi-artifacts
44
44
  path: ${{ github.workspace }}/dist/*.tar.gz
@@ -55,17 +55,11 @@ jobs:
55
55
  include:
56
56
  - os: ubuntu-22.04
57
57
  arch: x86_64
58
- - os: ubuntu-22.04
58
+ - os: ubuntu-24.04-arm
59
59
  arch: aarch64
60
- - os: macos-14
61
- arch: arm64
62
- CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=14.0
63
- - os: macos-12
64
- arch: x86_64
65
- CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=12.0
66
60
 
67
61
  steps:
68
- - uses: actions/checkout@v4
62
+ - uses: actions/checkout@v6
69
63
  with:
70
64
  fetch-depth: 0
71
65
 
@@ -80,54 +74,47 @@ jobs:
80
74
  shell: bash
81
75
  # On PRs we run only oldest and newest Python versions to reduce CI load.
82
76
  # Skips pypy and musllinux everywhere.
83
- # We are buiding 38 and 312 for now.
77
+ # We are building 310, 311 and 314 for now.
78
+ # (3.11 is the oldest version for which we support abi3 wheels)
84
79
  # These needs to rotate every new Python release.
85
80
  run: |
86
- if [[ "${{ github.event_name }}" == "pull_request" ]]; then
87
- CIBW_SKIP="pp* cp36-* cp37-* *-musllinux* cp39-* cp310-* cp311-*"
88
- else
89
- CIBW_SKIP="pp* cp36-* cp37-* *-musllinux*"
90
- fi
91
- echo "CIBW_SKIP=$CIBW_SKIP" >> $GITHUB_ENV
92
- echo "Setting CIBW_SKIP=$CIBW_SKIP"
81
+ set -x
82
+ echo "CIBW_BUILD=cp310-* cp311-* cp314-* cp314t-*" >> $GITHUB_ENV
83
+ set +x
84
+
85
+ if: ${{ github.event_name }} == "pull_request"
93
86
 
94
87
  - name: "Building ${{ matrix.os }} (${{ matrix.arch }}) wheels"
95
- uses: pypa/cibuildwheel@v2.21.3
88
+ uses: pypa/cibuildwheel@v3.3.0
96
89
  env:
97
- CIBW_SKIP: ${{ env.CIBW_SKIP }}
98
90
  CIBW_ARCHS: ${{ matrix.arch }}
99
- CIBW_BUILD_FRONTEND: build
100
- CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/ocefpaf/manylinux2014_x86_64-netcdf
101
- CIBW_MANYLINUX_AARCH64_IMAGE: ghcr.io/ocefpaf/manylinux2014_aarch64-netcdf
102
- # Emulation testing is slow, testing only latest Python.
103
- CIBW_TEST_SKIP: "cp38-*_aarch64 cp39-*_aarch64 cp310-*_aarch64 cp311-*_aarch64"
104
- CIBW_ENVIRONMENT: ${{ matrix.CIBW_ENVIRONMENT }}
105
- CIBW_BEFORE_BUILD_MACOS: brew install hdf5 netcdf
106
- CIBW_TEST_REQUIRES: pytest cython packaging typing-extensions
107
- CIBW_TEST_COMMAND: >
108
- python -c "import netCDF4; print(f'netCDF4 v{netCDF4.__version__}')"
109
- && pytest -s -rxs -v {project}/test
110
-
111
- - uses: actions/upload-artifact@v4
91
+
92
+ - uses: actions/upload-artifact@v6
112
93
  with:
113
94
  name: pypi-artifacts-${{ matrix.os }}-${{ matrix.arch }}
114
95
  path: ${{ github.workspace }}/wheelhouse/*.whl
115
96
 
116
97
 
117
- build_wheels_windows:
98
+ build_wheels_winmac:
118
99
  name: Build wheels for ${{matrix.arch}} on ${{ matrix.os }}
119
100
  runs-on: ${{ matrix.os }}
120
101
  strategy:
102
+ fail-fast: false
121
103
  matrix:
122
- os: [windows-latest]
123
- arch: [win_amd64]
104
+ include:
105
+ - os: windows-latest
106
+ arch: AMD64
107
+ - os: macos-14
108
+ arch: arm64
109
+ - os: macos-15-intel
110
+ arch: x86_64
124
111
 
125
112
  steps:
126
- - uses: actions/checkout@v4
113
+ - uses: actions/checkout@v6
127
114
  with:
128
115
  fetch-depth: 0
129
116
 
130
- - uses: actions/setup-python@v5
117
+ - uses: actions/setup-python@v6
131
118
  name: Install Python
132
119
  with:
133
120
  python-version: 3.x
@@ -138,40 +125,65 @@ jobs:
138
125
  environment-name: build
139
126
  init-shell: bash
140
127
  create-args: >-
141
- python=${{ matrix.python-version }} libnetcdf=4.9.2 --channel conda-forge
128
+ python=${{ matrix.python-version }} libnetcdf=4.9.3 --channel conda-forge
142
129
 
143
- - name: Install cibuildwheel
144
- run: |
145
- python -m pip install --upgrade cibuildwheel delvewheel
146
-
147
- - name: Build wheels for Windows (${{ matrix.arch }})
148
- run: cibuildwheel --output-dir wheelhouse
130
+ - name: Build wheels for Windows/Mac
131
+ uses: pypa/cibuildwheel@v3.3.0
149
132
  env:
150
- CIBW_BUILD: "cp39-${{ matrix.arch }} cp310-${{ matrix.arch }} cp311-${{ matrix.arch }} cp312-${{ matrix.arch }}"
151
- CIBW_ENVIRONMENT_WINDOWS: >
152
- HDF5_DIR="C:\\Users\\runneradmin\\micromamba\\envs\\build\\Library"
153
- netCDF4_DIR="C:\\Users\\runneradmin\\micromamba\\envs\\build\\Library"
154
- PATH="C:\\Users\\runneradmin\\micromamba\\envs\\build\\Library\\bin;${PATH}"
155
- CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >
156
- delvewheel show {wheel}
157
- && delvewheel repair -w {dest_dir} {wheel}
158
- CIBW_TEST_REQUIRES: pytest cython packaging typing-extensions
159
- CIBW_TEST_COMMAND: >
160
- python -c "import netCDF4; print(f'netCDF4 v{netCDF4.__version__}')"
161
- && pytest -s -rxs -v {project}\\test
162
-
163
- - uses: actions/upload-artifact@v4
133
+ CIBW_ARCHS: ${{ matrix.arch }}
134
+
135
+ - uses: actions/upload-artifact@v6
164
136
  with:
165
137
  name: pypi-artifacts-${{ matrix.os }}-${{ matrix.arch }}
166
138
  path: ${{ github.workspace }}/wheelhouse/*.whl
167
139
 
168
140
 
141
+ build_wheels_windows_arm:
142
+ name: Build wheels for ARM64 on Windows
143
+ runs-on: windows-11-arm
144
+ steps:
145
+ - uses: actions/checkout@v6
146
+ with:
147
+ fetch-depth: 0
148
+
149
+ - uses: actions/setup-python@v6
150
+ name: Install Python
151
+ with:
152
+ python-version: 3.x
153
+
154
+ - name: Install vcpkg dependencies
155
+ shell: pwsh
156
+ run: |
157
+ # Install vcpkg
158
+ git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg
159
+ cd C:\vcpkg
160
+ .\bootstrap-vcpkg.bat
161
+
162
+ # Install netcdf and dependencies
163
+ .\vcpkg.exe install hdf5:arm64-windows netcdf-c:arm64-windows zlib:arm64-windows
164
+
165
+ # Set environment variables for build
166
+ echo "HDF5_DIR=C:\vcpkg\installed\arm64-windows" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
167
+ echo "NETCDF4_DIR=C:\vcpkg\installed\arm64-windows" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
168
+
169
+ - name: Build wheels for Windows ARM64
170
+ uses: pypa/cibuildwheel@v3.3.0
171
+ env:
172
+ CIBW_ARCHS: ARM64
173
+ CIBW_SKIP: "cp310-*"
174
+
175
+ - uses: actions/upload-artifact@v6
176
+ with:
177
+ name: pypi-artifacts-windows-11-arm-ARM64
178
+ path: ${{ github.workspace }}/wheelhouse/*.whl
179
+
180
+
169
181
  show-artifacts:
170
- needs: [build_bdist, build_sdist, build_wheels_windows]
182
+ needs: [build_bdist, build_sdist, build_wheels_winmac, build_wheels_windows_arm]
171
183
  name: "Show artifacts"
172
184
  runs-on: ubuntu-22.04
173
185
  steps:
174
- - uses: actions/download-artifact@v4
186
+ - uses: actions/download-artifact@v7
175
187
  with:
176
188
  pattern: pypi-artifacts*
177
189
  path: ${{ github.workspace }}/dist
@@ -183,13 +195,13 @@ jobs:
183
195
 
184
196
 
185
197
  publish-artifacts-pypi:
186
- needs: [build_bdist, build_sdist, build_wheels_windows]
198
+ needs: [build_bdist, build_sdist, build_wheels_winmac, build_wheels_windows_arm]
187
199
  name: "Publish to PyPI"
188
200
  runs-on: ubuntu-22.04
189
201
  # upload to PyPI for every tag starting with 'v'
190
202
  if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v')
191
203
  steps:
192
- - uses: actions/download-artifact@v4
204
+ - uses: actions/download-artifact@v7
193
205
  with:
194
206
  pattern: pypi-artifacts*
195
207
  path: ${{ github.workspace }}/dist
@@ -12,7 +12,7 @@ jobs:
12
12
  # NO_NET: 1
13
13
  strategy:
14
14
  matrix:
15
- python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ]
15
+ python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ]
16
16
  os: [windows-latest, ubuntu-latest, macos-latest]
17
17
  platform: [x64, x32]
18
18
  exclude:
@@ -24,7 +24,7 @@ jobs:
24
24
  shell: bash -l {0}
25
25
 
26
26
  steps:
27
- - uses: actions/checkout@v4
27
+ - uses: actions/checkout@v6
28
28
  with:
29
29
  submodules: true
30
30
 
@@ -45,6 +45,11 @@ jobs:
45
45
 
46
46
  - name: Tests
47
47
  run: |
48
+ if [ "$RUNNER_OS" == "Windows" ]; then
49
+ export HDF5_PLUGIN_PATH="${CONDA_PREFIX}\\Library\\hdf5\\lib\\plugin"
50
+ else
51
+ export HDF5_PLUGIN_PATH="${CONDA_PREFIX}/hdf5/lib/plugin/"
52
+ fi
48
53
  pytest -s -rxs -v test
49
54
 
50
55
  run-mpi:
@@ -58,7 +63,7 @@ jobs:
58
63
  run:
59
64
  shell: bash -l {0}
60
65
  steps:
61
- - uses: actions/checkout@v4
66
+ - uses: actions/checkout@v6
62
67
  with:
63
68
  submodules: true
64
69
 
@@ -1,3 +1,25 @@
1
+ version 1.7.4 (tag v1.7.4rel)
2
+ ================================
3
+ * Make sure automatic conversion of character arrays <--> string arrays works for Unicode strings (issue #1440).
4
+ (previously only worked correctly for encoding="ascii").
5
+ * Add netcdf plugins (blosc, zstd, bzip2) in wheels. Blosc plugin doesn't work in Windows wheels.
6
+ Macos wheels now use conda provided libs. (PR #1450)
7
+ * Add windows/arm (PR #1453) and free-threaded python wheels (issue #1454). Windows wheels now use netcdf-c 4.9.3.
8
+ WARNING: netcdf-c is not thread-safe and netcdf4-python does have internal locking so expect segfaults if you
9
+ use netcdf4-python on multiple threads with free-threaded python. Users must exercise care to only call netcdf from
10
+ a single thread.
11
+
12
+ version 1.7.3 (tag v1.7.3rel)
13
+ =============================
14
+ * Python 3.14 wheels (issue #1432)
15
+ * support os.PathLike arguments for `Dataset.fromcdl` and raise a `FileNotFoundError`
16
+ if the cdl is missing and a `FileExistsError` if the nc file already exists (PR #1387)
17
+ * raise more informative error when trying to iterate or
18
+ perform a membership operation on a Dataset (issue #1383)
19
+ * fix type hint for createEnumType (issue #1378)
20
+ * add python 3.13 to windows wheel builds (PR #1377)
21
+ * allow slicing of vlen and string variables with non-unitary strides (issue #1408).
22
+
1
23
  version 1.7.2 (tag v1.7.2rel)
2
24
  =============================
3
25
  * add static type hints (PRs #1302, #1349)
@@ -27,4 +27,3 @@ include *.md
27
27
  include *.py
28
28
  include *.release
29
29
  include *.sh
30
- include LICENSE
@@ -1,34 +1,38 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: netCDF4
3
- Version: 1.7.2
3
+ Version: 1.7.4
4
4
  Summary: Provides an object-oriented python interface to the netCDF version 4 library
5
- Author-email: Jeff Whitaker <jeffrey.s.whitaker@noaa.gov>
6
- License: MIT
5
+ Author-email: Jeff Whitaker <whitaker.jeffrey@gmail.com>
6
+ License-Expression: MIT
7
7
  Project-URL: Documentation, https://unidata.github.io/netcdf4-python/
8
8
  Project-URL: Repository, https://github.com/Unidata/netcdf4-python
9
9
  Keywords: numpy,netcdf,data,science,network,oceanography,meteorology,climate
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
- Classifier: Programming Language :: Python :: 3.9
14
12
  Classifier: Programming Language :: Python :: 3.10
15
13
  Classifier: Programming Language :: Python :: 3.11
16
14
  Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
17
  Classifier: Intended Audience :: Science/Research
18
- Classifier: License :: OSI Approved :: MIT License
19
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
19
  Classifier: Topic :: System :: Archiving :: Compression
21
20
  Classifier: Operating System :: OS Independent
22
- Requires-Python: >=3.8
21
+ Requires-Python: >=3.10
23
22
  Description-Content-Type: text/x-rst
24
23
  License-File: LICENSE
25
24
  Requires-Dist: cftime
26
25
  Requires-Dist: certifi
27
- Requires-Dist: numpy
26
+ Requires-Dist: numpy>=2.3.0; platform_system == "Windows" and platform_machine == "ARM64"
27
+ Requires-Dist: numpy>=1.21.2; platform_system != "Windows" or platform_machine != "ARM64"
28
28
  Provides-Extra: tests
29
29
  Requires-Dist: Cython; extra == "tests"
30
30
  Requires-Dist: packaging; extra == "tests"
31
31
  Requires-Dist: pytest; extra == "tests"
32
+ Requires-Dist: typing-extensions>=4.15.0; extra == "tests"
33
+ Provides-Extra: parallel
34
+ Requires-Dist: mpi4py; extra == "parallel"
35
+ Dynamic: license-file
32
36
 
33
37
  netCDF version 4 has many features not found in earlier versions of the library,
34
38
  such as hierarchical groups, zlib compression, multiple unlimited dimensions,
@@ -1,7 +1,7 @@
1
1
  # [netcdf4-python](http://unidata.github.io/netcdf4-python)
2
2
  [Python](http://python.org)/[numpy](http://numpy.org) interface to the netCDF [C library](https://github.com/Unidata/netcdf-c).
3
3
 
4
- [![Build status](https://github.com/Unidata/netcdf4-python/workflows/Build%20and%20Test/badge.svg)](https://github.com/Unidata/netcdf4-python/actions)
4
+ [![CodeQL](https://github.com/Unidata/netcdf4-python/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/Unidata/netcdf4-python/actions/workflows/github-code-scanning/codeql)
5
5
  [![PyPI package](https://img.shields.io/pypi/v/netCDF4.svg)](http://python.org/pypi/netCDF4)
6
6
  [![Anaconda-Server Badge](https://anaconda.org/conda-forge/netCDF4/badges/version.svg)](https://anaconda.org/conda-forge/netCDF4)
7
7
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2592291.svg)](https://doi.org/10.5281/zenodo.2592290)
@@ -10,6 +10,14 @@
10
10
  ## News
11
11
  For details on the latest updates, see the [Changelog](https://github.com/Unidata/netcdf4-python/blob/master/Changelog).
12
12
 
13
+ 1/5/2026: Version [1.7.4](https://pypi.python.org/pypi/netCDF4/1.7.4) released. Compression plugins now included in wheels, windows/arm64 and
14
+ free-threaded python wheels provided. Automatic conversion of character arrays <--> string arrays works for Unicode (not just ascii) strings.
15
+ WARNING: netcdf-c is not thread-safe and netcdf4-python does have internal locking so expect segfaults if you
16
+ use netcdf4-python on multiple threads with free-threaded python. Users must exercise care to only call netcdf from
17
+ a single thread.
18
+
19
+ 10/13/2025: Version [1.7.3](https://pypi.python.org/pypi/netCDF4/1.7.3) released. Minor updates/bugfixes and python 3.14 wheels, see Changelog for details.
20
+
13
21
  10/22/2024: Version [1.7.2](https://pypi.python.org/pypi/netCDF4/1.7.2) released. Minor updates/bugfixes and python 3.13 wheels, see Changelog for details.
14
22
 
15
23
  06/17/2024: Version [1.7.1](https://pypi.python.org/pypi/netCDF4/1.7.1) released. Fixes for wheels, no code changes.