Releases: natcap/pygeoprocessing
Releases · natcap/pygeoprocessing
2.4.6
2.4.5
2.4.4
- Our github actions for building python distributions now use
actions/setup-python@v5
, which uses node 20.
#384 warp_raster
andbuild_overviews
no longer raise aValueError
if
called with an invalid resampling algorithm. We now fall back to the
underlying GDAL functions' error messages.
#387- Updated to Cython 3.
- Dropped support for Python 3.7.
2.4.3
2.4.3 (2024-03-06)
- Wheels for python 3.12 are now built during our github actions runs. #381
get_gis_type
can accept a path to a remote file, allowing the GDAL driver
to open it if the driver supports the protocol. #375- If running on a SLURM system (identified by the presence of
SLURM*
environment variables), the GDAL cache max is checked against the amount of
memory available on the compute node. If GDAL may exceed the available slurm
memory, a warning is issued or logged. #361 - Fixed an issue in
extract_strahler_streams_d8
where a nodata pixel
could be mistakenly treated as a stream seed point, ultimately creating
a stream feature with no geometry. #361 - Improved
align_and_resize_raster_stack
so that rasterization of a vector
mask only happens once, regardless of the number of rasters in the stack.
In addition, the created mask raster's path may be defined by the caller so
that it persists across calls toalign_and_resize_raster_stack
. #366 - Improved
warp_raster
to allow for a pre-defined mask raster to be
provided instead of a vector. If both are provided, the mask raster alone is
used. The new mask raster must have the same dimensions and geotransform as
the output warped raster. #366 - Pygeoprocessing is now tested against python 3.12. #355
2.4.2
- Fixed an issue where MFD flow direction was producing many nodata holes given
a large-enough DEM. These nodata holes would then propagate to flow
accumulation and stream extraction, producing very disjointed stream
networks. #350 - Improved progress logging in MFD flow direction, MFD flow accumulation, MFD
stream extraction to prevent integer overflows in percentages and improve
the readability of log messages. #246 - Fixed an issue introduced in 2.4.1 where
zonal_statistics
results could
vary depending on the bounding boxes of the disjoint polygon sets calculated
from the input vector. - Added a new function,
pygeoprocessing.align_bbox
, which pads a bounding
box to align with the grid of a given geotransform. - Added support for int64 and uint64 (GDAL 3.5+)
#352 - Added support for signed bytes (GDAL 3.7+)
#329 - Fixed a bug where
calculate_slope
did not work as expected when the DEM
raster's nodata value is NaN (#352)
2.4.1
- The
pygeoprocessing
package metadata has been updated to use
importlib.metadata
(python >= 3.8) orimportlib_metadata
(python < 3.8) for retrieving the package version, in keeping with
recommendations fromsetuptools_scm
. The dependency
importlib_metadata
is now required for installs on python < 3.8. - Fixed another memory leak in
pygeoprocessing.raster_calculator
, where
shared memory objects under certain circumstances were not being unlinked at
the end of the function, resulting in excess memory usage and a warning
during the shutdown of the python process.
#247 - Added a new function,
pygeoprocessing.array_equals_nodata
, which returns
a boolean array indicating which elements have nodata. It handles integer,
float, andnan
comparison, and the case where the nodata value isNone
. - Standardized the approach used in
warp_raster
and
create_raster_from_bounding_box
for determining the dimensions of the
target raster given a target bounding box and pixel sizes.
#321 pygeoprocessing.routing.delineate_watersheds_d8
now handles the case
where the input flow direction raster does not have a defined spatial
reference. #254- Updating internal documentation describing TauDEM flow directions, and adding
for how to convert from a flow direction raster from what TauDEM expects to
what pygeoprocessing expects.
#255 - Users may now specify the overview level to use when calling
warp_raster
.
By default,pygeoprocessing
will use the base layer.
#326 - Fixed a bug across
pygeoprocessing
where some valid resampling methods
would throw an exception because they were not recognized. This was only
happening whenpygeoprocessing
was installed alongside GDAL < 3.4. - Fixing an issue with
pygeoprocessing.multiprocessing.raster_calculator
where the function would raise an Exception when the target raster path was
provided as a filename only, not within a directory, even though the parent
directory could be inferred. #313 - Fixing a bug where the statistics worker in
pygeoprocessing.raster_calculator
may return a complex value. This is
only an issue when pygeoprocessing is compiled against Cython 3.0.0 and
later. #342
2.4.0
2.4.0 (2023-03-03)
- A new submodule,
pygeoprocessing.kernels
has been added to facilitate the
creation of kernel rasters needed for calls to
pygeoprocessing.convolve_2d
. Functions for creating common decay kernels
have been added, along with functions to facilitate the creation of
distance-based kernels using a user-defined function
(pygeoprocessing.create_kernel
) and to facilitate the creation of kernels
using custom 2D numpy arrays, such as those commonly used in image processing
(pygeoprocessing.kernel_from_numpy_array
).
#268 - Logging across functions in
pygeoprocessing.geoprocessing
now correctly
reports the function that it's being called from rather than<lambda>
.
#300 - The function
pygeoprocessing.reproject_vector
now accepts an optional
parameterlayer_name
to allow the target vector layer name to be defined
by the user. If the user does not provide alayer_name
, the layer name
will be copied from the source vector.
#301 - Implement the proposed new function
pygeoprocessing.raster_reduce
, a
wrapper aroundpygeoprocessing.iterblocks
(#285) - Nodata value checking in
pygeoprocessing.routing
now correctly handles
comparison ofnan
values. This is explicitly tested in
pygeoprocessing.routing.fill_pits
, but should also improve the
experience of other routing functions as well.
#248 - Added a function to build overviews for a raster,
pygeoprocessing.build_overviews
. Related to this,
pygeoprocessing.get_raster_info()
now includes an'overviews'
key
listing the pixel dimensions of each overview layer in a raster.
#280 - Added a D8 stream extraction function at
pygeoprocessing.routing.extract_streams_d8
which takes a D8 flow
accumulation raster and a flow accumulation threshold, setting all pixels
with accumulation above that threshold to 1 and all other valid pixels to 0.
#272 - Adding a new function,
pygeoprocessing.create_raster_from_bounding_box
,
that enables the creation of a new raster from a bounding box.
#276 - Win32 wheels of PyGeoprocessing are no longer created through our GitHub
Actions workflows and will no longer be produced or distributed as part of
our release checklist. For details (and metrics!) see:
#232
2.3.5
2.3.5 (2022-12-13)
pygeoprocessing.calculate_disjoint_polygon_set
now offers an optional
parameter,geometries_may_touch
for cases where geometries are known to
have intersecting boundaries but nonintersecting interiors.
#269- Pygeoprocessing is now tested against Python 3.11.
- Adding the target filename to progress logging in
pygeoprocessing.raster_calculator
. pygeoprocessing.zonal_statistics
will now optionally include a count of
the number of pixels per value encountered under each polygon. A warning
will be logged when invoked on floating-point rasters, as using this on
continuous rasters can result in excessive memory consumption. To use this
feature, setinclude_value_counts=True
when callingzonal_statistics
.pygeoprocessing.get_gis_type
will now raise aValueError
if the file
cannot be opened asgdal.OF_RASTER
orgdal.OF_VECTOR
.
#244- Fixing an error message in
convolve_2d
when the signal or kernel is a
row based blocksize. #228.
2.3.4
2.3.4 (2022-08-22)
- Fixing an issue with imports at the
pygeoprocessing
module level that was
causing linters like PyLint and IDE command-completion programs like JEDI-vim
to not be able to identify the attributes of thepygeoprocessing
module
namespace. - Reducing the amount of memory used by
pygeoprocessing.new_raster_from_base
when filling an array with values to
only as much memory as is needed for the datatype. - Fixing a memory leak in
pygeoprocessing.raster_calculator
where
shared memory objects were being inadvertently created when they should not
have been and then they were not subsequently destroyed. calculate_disjoint_polygon_set
will now skip over empty geometries.
Previously, the presence of empty geometries would cause an error to be
raised.- Fixed a
DeprecationWarning
incalculate_disjoint_polygon_set
caused
by the use of a deprecated loggingwarn
method.
2.3.3.post0
2.3.3.post0 (2022-01-28)
- Post-release due to corrupted sdist released on Github and PyPI. The sdist
for 2.3.3 failed to install. The wheels were unaffected. No code changes.