The format is based on Keep a Changelog, and this project adheres to semantic versioning.
- Bug fixes for passing custom
earthdaily.earthone.auth.Auth()into Mosaics. - Fixed a bug when calling
.pick_bandson a simple operation containingdc.paramters.
- The OpenStreetMap attribution link now opens in a new tab.
- Optimize
matplotlibimport ininteractive/layers.pyto avoid unnecessarily importingpyplot. - Return error messages in response headers as well as in the tiles themselves.
- Security updates to caching.
- Added
NumericProxytypes that can be used as proxies for constants. - Added
obj_typeto serialized objects, so it can be determined what the object is.
- Allow reductions (min, max, mean, etc.) to be performed over
axis=None, which will return a single value as aComputeMapobject. - Allow a custom
earthdaiy.eathone.auth.Authinstance to be passed into.computeand.visualizecalls, instead of relying on the default auth of the environment. - Added a
predicate_filterkeyword argument that allows the user to pass in a filter at the time of construction of aMosaic, instead of filtering later, allowing for better perfomance and less data being pulled from platform. - Added a
sort_bykeyword argument that allows the user to pass in an argument for how to sort the data at the time of construction of aMosaic, and an additional optionalascendingkeyword argument for how to sort the data.
- Classified layers with a colorbar defined will now use the entire color range.
- Update the
earthdaily-earthonedependency to be>=5,<7.
- Added support for erosion and dilation.
- Update dependencies to add support for Python 3.13.
- Removed
client/poetry.lockfile to follow best Poetry practices.
- Added option to pass in an
earthdaily.earthone.core.catalog.catalog_client.CatalogClientobject toMosaic.from_product_bandsandImageStack.from_product_bandscalls to allow alternative clients to be used.
- Added a class for working with geofence boundaries.
- Added a new layer type
VectorTileLayerthat wrapsipyleaflet.VectorTileLayerand allows advanced visualizations. - Added a new layer type
VectorRasterLayerthat represents a rasterization of a Vector product.
- Update package dependencies to use the official
earthdaily-earthonerelease
- Added support for convolutions.
dc.Mosaic.from_image_idsgenerates data in the physical range not the data range.
- Allow
numpy.dtypesto be passed in as scales. - Fixed a bug where
tuplescales resulted in an error withnumpy.dtypes
- Rename the package to
earthdaily-earthone-dynamic-compute, which can be used likeimport earthdaily.earthone.dynamic_compute as dc.
- Updates to use the
earthdaily.earthonepackage. - Drop support for Python 3.9.
- Update the DynamicComputeLayer attribution to be from
EarthDaily Analytics
- Added a
predicate_filterkeyword argument that allows the user to pass in a filter at the time of construction of anImageStack, instead of filtering later, allowing for better perfomance and less data being pulled from platform. - Added a
sort_bykeyword argument that allows the user to pass in an argument for how to sort the data at the time of construction of anImageStack, and an additional optionalascendingkeyword argument for how to sort the data. - Added a
.from_image_idsto theMosaicclass, whereMosaicobjects can now be created from a list of Image IDs
- Updated the allowed versions of
numpyin the client to be compatible with newer versions oftensorflowso that the latest version of this package can be installed on workbench.
- Added support for
earthdaily.earthone4.0.0, which involved upgrading a few packages and minor code changes to accommodate those upgrades.
- Fixed a bug in computing AOIs that do not have
dc.parameters.
- Fixed a bug in reductions so that reduction by image over empty image stacks return an appropriate shaped resul.
- Added a
.filledoperation toMosaicandImageStacksthat allows one to fill the masked values of a masked array with a given value - Added
Proxytype,Datetime, andparameterfunctionality to allow users to pass delayed objects in for start and end dates.
- Support for filter predicates as python functions
- Fixed a bug in classified layers where the data was not actually masked, and another where the alpha was not actually applied.
- Added an optional
alphakwarg to calls on.Mosaic, which allows for a Mosaic to be passed in to control pixel transparency
- Mosaic and ImageStack instances now provide a means to change the resampling method.
- Fixed a bug in the
set_scalesmethod when using classified layers.
- Added resampler to
from_product_bandsforMosaicandImageStack. All values from earthdaily.earthone.catalog.ResampleAlgorithm are valid. - Added an optional
"classes"parameter to.visualize. When added, the data will be clipped to those values to be visualized as a classified layer.
- Filtering of
ImageStacks now directly usesearthdaily.earthone.catalog.properties
- Allow no checkboard parameter to be passed in when calling the
DynamicComputeLayermethod directly - Fixed a bug where reductions over empty image stacks used to result in error tiles, and now return the empty image stack as expected
- Remove support for Python 3.8
- Added support for Python 3.12, and upgraded some necessary packages for the 3.12 version
- Added reverse colormaps for all available color maps
- Ensure data is float32 throughout the processing pipeline
- Use private VPCs
- Update
cloudpicklefor all but python 3.8
- Fixed a bug where reductions over the
bandsaxis in ImageStacks could not be visualized
- Backend changes to support performance during non-peak hours.
- Bumped cloudpickle from 1.6.0 to 3.0.9 for python 3.11 and later
- Fixed a bug in graft splicing logic
- Fixed a bug when inferring the shape of an empty ImageStack
- Added a resolution operator
- Added an
argminreduction
- base64 encode numpy arrays using the numpy save functionality instead of pickling them
- Masks are now keyword ops
- Band operations are now keyword ops
- Re-implemented the
dotoperator as a keyword operation.
- Decreased the use of pickled code and instead utilizing keyword args for most math operations
- Bumped the requirement for
shapelyin the client to >2 - Return geometries in
ImageStackas a WKT string instead of aPolygonto be compatible with various versions ofshapely
- Backend changes to increase logging and performance
- Expand the client to allow python versions >=3.8, <3.12
- Added the ~ (inversion) operator for Mosaics and ImageStacks
- Masking logic ignored prior mask on input.
- The PixelInspector now shows the lat/lon of the clicked location.
- Added memory optimizations to the backend
- Backend optimizations to help scalability
- Fixed a bug where
dc.dotdid not respect masking.
- Fixed a bug that didn't propagate tile padding through graft evaluation correctly.
- Normalized cache id generation to reduce identical data within a cache
- Addressed a bug where masks are evaluated for 1 by 1 spatial extents.
- Retry and then hide "400 Client Error" errors
- Fixed a bug that gave an error if
bandswere passed in as a list of strings toImageStack.from_product_bands() - Retry and then hide "504 Server Error" errors
- Back out some timing measurements that may be causing slowdowns when erroring
- Addressed viewing padded mosaics across the anti-meridian.
- Fixed a bug where we expected an error to be a json and it was actually a bytes string
- Addressed a rare chunked-mosaic ordering corner-case.
- Addressed a bug in
pick_bands - Removed the ApiCacheError, since not all errors returned here are cache errors, and use
.raise_for_status()instead of trying tojson.loads()the error since this was causing issues
- Nicer error messages if you don't have dynamic-compute-user as one of your groups
- Allowing relaxed scale specifications for
Mosaic.visualize
- Support to promote lists to arrays as graft elements.
- Filtering discarded compute operations, and this has been addressed
- Fixed a bug in masking where an ImageStack with one band was not able to be used as a mask
- Provide graft optimizations for simple but common patterns that can reduce performance.
- Increase cache timeout
- Forced certifi in the client to be at least the version that addresses a FOSSA vulnerability
- Return a user-readable error if the method called on a Mosaic or ImageStack is not supported by
dynamic-compute
- Removed transient errors displayed as tiles
- Fixed pixel inspector bug introduced in 0.6.1 that was causing single value reports for multiple band products
- Added pixel inspector support for boolean arrays - previously this showed as an explosion image, meaning it failed.
- Added a
compute_allmethod to ImageStackGroupBy - Added a
onemethod to ImageStackGroupBy
- Ensured that operations that return ImageStacks that should be filterable, e.g.
pick_bands, are filterable. - Fixed a bug that made it so you couldn't visualize Boolean layers
- Made frontend and backend changes to record and pass along the python version which then gets used to invoke the correct lambda function.
- Applying a mapped function (such as a reducer) to ImageStackGroupBy now returns an ImageStackGroupBy (which supports saving and loading) rather than an ImageStackGroups object (which did not support saving and loading).
- Added
__version__property to dynamic compute.
- Added support for datetime.datetimes and datetime.date objects when constructing an
ImageStackorMosaic - Added support for
.groupbyonImageStack - Added support for custom reductions (
.reduce()) onImageStackandMosaic
- Consolidated function encoding into a new method
ImageStack.visualize()now throws a descriptive error- Added tile alerts for when the token has expired
- Moved the colormaps definitions out of the
Mosaicclass and into a file co-located where they are being used - Refactored the
Mosaicclass to look and operate more likeImageStack - Moved saving and loading of grafts out of ComputeMap and into a catalog module
- Refactored the blob saving/loading functionality to use the new DYNCOMP blob type
ImageStackandMosaicnumpy functions such as min, max, median now call the masked version of each function if the ImageStack evaluates to a masked array. Also refactored these to be first class functions with docstrings and type hints.
- Added a new dl_utils module in both client and api that adds a get_product_or_fail function
- get_product_or_fail used to replace several instances of the same behavior in api
- get_product_or_fail used to cause earlier indication of bad product access at Mosaic and ImageStack construction time
- New blob module in client.earthdaily.earthone.dynamic_compute library
- New save_to_catalog and load_from_catalog methods on ComputeMap
- Error messages from .visualize now are displayed as tiles
- Pixel-wise reductions now pass through properties from the underlying image stack
- Relaxed python version requirement for
dynamic-compute
dynamic-computenow points to the AWS Catalog
- Fixed some out of date and wrong documentation
- Pixel inspector now works properly with latest dl client
- Added
.maskfunctionality toImageStackand added functionality forMosaics andImageStacks to mask each other. - Added
pixelreduction functionality toImageStack
- Fixed zero size array bug that was causing an ugly error on reductions.
- Added Pixel Inspector to DC's Map
- Added Colormap support for single band images on DC's Map
- Added Autoscale capability
- Center control now only shows in-bounds coordinates.
- Checkerboard button now works and actually produces checkerboards when appropriate
- Layers can be visualized without scales.
zinnianow handles mosaic requests for empty image collections and returns masked arrays of the appropriate size.- Added support for grafts that contain arrays, and which evaluate to arrays that are not rasters.
- Expanded the OO API to support masking, clipping.
- Adding support for simple linear algebra.
- Added support for trailing operations, including .pick_bands, .unpack_bands, .rename_bands, and .concat_bands
- Added support for ImageStacks
- Added rudimentary dynamic_compute.map functionality
- Added support for dimensionality reduction over bands in Mosaics, including sum, min, max, median, mean, and argmax
- Added support for viewing reductions over ImageStacks
- Added support for dot operations applied along the "images" axis for ImageStacks.
- Added .pick_bands, .rename_bands, .unpack_bands, and .concat_bands to ImageStacks
- Added functionality for scaling interactive map layers
- Added support for binary operations where one operand is an ImageStack and the other is a Mosaic
- .compute now support DLTIles and XYZTiles as well as AOIs
- Bumped the DL client version from 1.11 to 1.12.1 and moved from
dl.scenestodl.cataloganddl.geo. - Compute tile operations now return a detailed error message on failure
- Calls to Mosaic now return arrays in physical, rather than data, range.
- Changed default
zinniadeployment to be inappsci-production - Changed to name from
zinniatodynamic-compute - Changed how we handle caching of proxy objects -- all grafts for Mosaics or ImageStacks are set as cacheable.
dynamic_computeis now imported asearthdaily.earthone.dynamic_compute
- Addressed an error that caused map layers to be re-added instead of replaced when appropriate.
- Addressed how we handled image stacks of length zero.
- Addressed an error that caused out of bounds bboxes to be passed to an AOI object in Map().geocontext()