- Remove
numpy<2
restriction.
- Limit
geopandas
version to < 1.0.0
SnowMaskTask
now correctly handles temporally empty eopatches.
- Minor fixes for documentation
- Fix
numpy<2
in anticipation of numpy 2.0 release.
RayExecutor
can now forward remote kwargs to ray jobs.ImportTiffTask
no longer uses theuse_vsi
parameter. The IO part was fully off-loaded torasterio
.ImportTiffTask
andExportTiffTask
parameterfolder
was renamed topath
. The renaming is backwards compatible for now.
MorphologicalFilterTask
adapted to work on boolean values.- Added
temporal_subset
method toEOPatch
, which can be used to extract a subset of anEOPatch
by filtering out temporal slices. Also added a correspondingTemporalSubsetTask
. EOExecutor
now has an option to treatTemporalDimensionWarning
as an exception.- String representation of
EOPatch
objects was revisited to avoid edge cases where the output would print enormous objects.
The release focuses on making eo-learn
much simpler to install, reducing the number of dependencies, and improving validation of soundness of EOPatch
data.
eo-learn
is now distributed as a single package. Installation ofeo-learn-mask
and similar is no longer necessary and users are warned when such installations are detected.- Changes to
timestamps
andbbox
attributes ofEOPatch
objects:FeatureType.TIMESTAMPS
andFeatureType.BBOX
have been deprecated, data should be accessed via attributes. Feature parsers no longer return these values (for instance when callingEOPatch.get_features
).- EOPatches without temporal information now have a timestamp value of
None
, whereas a timestamp value[]
signifies that the EOPatch has a temporal dimension of 0. - Introduced a
get_timestamps
method that will fail iftimestamps
areNone
. This can be used in cases where timestamps are assumed to be present (to avoid issues with type-checking and ill formed inputs). - Loading, saving, and copying of EOPatches will take
timestamps
into account either when processing the full eopatch (i.e.features=...
) or if the selection contains a temporal feature. The behavior can be controlled via theload_timestamps
/save_timestamps
/copy_timestamps
parameter.
- Saving and loading of
FeatureType.META_INFO
now processes each feature as a separate file, allowing better filtering and preventing accidental overwriting. - The default backend for
SpatialResizeTask
has been switched tocv2
to reduce the number of dependencies. eolearn.geometry.morphology
tasks now usecv2
instead ofscikit-image
to reduce the number of dependencies. The task interfaces have been slightly adjusted.- Improved reports:
- Exception grouping is now done by exception origin instead of exception message, resulting in shorter reports.
- Added execution time statistics per node
CloudMaskTask
has been restricted to mono-temporal predictions using thes2cloudless
package. For the multi-temporal one check here.- Certain tasks (for instance
SaveTask
andLoadTask
) no longer pass arguments to the super-class via **kwargs in order to improve documentation and type-checking. SaveTask
andLoadTask
now raiseOSError
exceptions instead ofIOError
.- Project-specific and outdated EOTasks were moved to extras or to the example repository eo-learn-examples/extra-tasks.
- The submodule
eolearn.features.bands_extraction
has been renamed toeolearn.features.ndi
. - The submodule
eolearn.ml_tools.extra.plotting
has been moved toeolearn.visualization.utils
. - Compression of EOPatch files has been hardcoded. The parameter
compression_level
has been deprecated and has no effect. - Introduced experimental
zarr
support for loading/saving temporal slices of temporal features. The API might be changed in future releases. - Limited
rasterio
to 1.3.7 due to an issue with importing rasters from AWS S3 - Updated examples, simplified tests, various improvements.
- Introduced support for Python 3.11.
- Removed support for Python 3.7.
- Added T-Digest
EOTask
in the scope of the Global Earth Monitor Project, contributed by @meengel. - Used evalscript generation utility from
sentinelhub-py
in SH relatedEOTasks
. - Deprecated the
EOPatch.merge
method and extracted it as a function. - Deprecated the
OVERWRITE_PATCH
permission and enforcing the usage of explicit string permissions. - Encapsulated
FeatureDict
class asMapping
, removed inheritance fromdict
. - Switched to new-style typed annotations.
- Introduced the
ruff
python linter, removedflake8
andisort
(covered byruff
). - Fixed issue with occasionally failing scheduled builds on the
master
branch. - Various refactoring efforts and dependency improvements.
- Various improvements to tests and code.
- The codebase is now fully annotated and type annotations are mandatory for all new code.
- In the future
EOPatch
objects will require a validbbox
. For now the users are warned when no such value is provided. SaveTask
andLoadTask
now automatically save/load the bounding box whenever possible, even if not specified infeatures
parameter.CopyTask
andMergeEOPatchesTask
also always include the bounding box when possible.- The
EOPatch
attributebbox
can no longer be deleted via thedel
command. - The
EOPatch
attributetimestamp
was renamed intotimestamps
. The old name still works, but the users are notified. Similarly forFeatureType.TIMESTAMP
which was renamed toFeatureType.TIMESTAMPS
. - Feature parsers from
eolearn.core.utils.parsers
now support callables as input forallowed_feature_types
, which are used for filtration over all feature types. Due to this improvement the classFeatureTypeSet
was deprecated. - Certain rarely used methods of
FeatureType
were deprecated. Methodis_raster
has been renamed tois_array
and designates feature types that contain numpy arrays. We also addedis_image
for types that denote temporal and timeless imagery. - Contributors are no longer listed in file headers, but are instead listed in the
CREDITS.md
file in the root of the repository. - Updated
CONTRIBUTING.md
instructions. - Various other minor improvements and deprecations.
- (codebreaking) Complete overhaul of
eolearn.coregistration
. See documentation for details. - (codebreaking) Removed non-working HVPlot backend for
eolearn.visualization
. - (codebreaking) The
SpatialResizeTask
had a bug when resizing w.r.t resolution. The issue was fixed and the signature of the task was redesigned to better avoid mistakes. See documentation for details. - (codebreaking) The
EOPatch
methodsget_features
andget_feature_list
were recombined into a newget_features
method. The methodget_time_series
was removed. See documentation for details. - (codebreaking) Removed unsound
use_int_coords
option ineolearn.ml_tools.sampling.random_point_in_triangle
. - Added ability to specify query in execute method of
MeteoblueTask
. SentinelHubInputTask
no longer saves redundant data into meta-features.- Module
eolearn.core.utils.types
was moved toeolearn.core.types
. Old one will be removed in the future. - Switched
opencv-contrib-python-headless
requirement toopencv-python-headless
- Added type annotations to most of the code base.
- Various improvements to tests and code.
- Sentinel Hub IO tasks now support a custom timestamp filtration via
timestamp_filter
parameter, contributed by @ColinMoldenhauer. MergeFeatureTask
now supports theaxis
parameter.- Fix minor issues with the coregistration module.
- Prepare for future removal of
sentinelhub.os_utils
. - Fix type annotations after
mypy
update. - Improvements to tests and various minor changes.
- (codebreaking) Adapted Sentinel Hub tasks to
sentinelhub-py 3.8.0
which switched to Catalog 1.0.0. - (codebreaking) Removed support for loading pickled objects in EOPatches (deprecated since version 1.0.0).
- (codebreaking) Various improvements of
FeatureIO
class. Only affects direct use of class. - Added type annotations to majority of
eolearn.core
. The types are now exposed viapy.typed
file, which enables use ofmypy
. Added type-checking to CI for thecore
module. - Numpy-array based features can now save and load
object
populated arrays. - Improved documentation building, fixed links to GitHub.
- Improved test coverage.
- Added pre-commit hooks to repository for easier development.
- Various minor improvements.
- Corrected the default for
no_data_value
inImportFromTiffTask
andExportToTiffTask
toNone
. The previous default of0
was a poor choice in many scenarios. The switch might alter behavior in existing code. - Changed the way
SpatialResizeTask
accepts parameters for the final image size. Now supports resizing by using resolution. - Added
ExplodeBandsTask
that explodes a multi-band feature into multiple features. - Exposed resampling parameters in Sentinel Hub tasks and included a
geometry
execution parameter. - Reworked internal classes
FeatureIO
and_FeatureDict
to improve types and maintainability. - Fixed y-axis orientation of
MeteoblueRasterTask
. FilterTimeSeriesTask
adjusted to work with multiprocessing.- EOPatch plotting no longer anti-aliases by default (removes issues with phantom values in mask plots)
- Improved documentation building, fixing a few broken links.
- Improved handling of filesystem objects:
- introduced utility functions
pickle_fs
andunpickle_fs
intoeo-learn-core
, - updated all IO tasks to fully support
filesystem
as an__init__
parameter, - updated
EOExecutor
to supportfilesystem
propagation to worker processes.
- introduced utility functions
- Official support for Python
3.10
. - Moved
eolearn.coregistration.ThunderRegistrationTask
into an extension ofeo-learn-coregistration
package because it doesn't support Python3.10
. - Updated functionality of
eolearn.features.SimpleFilterTask
. It now returns a newEOPatch
and doesn't raise an error if all time slices would be filtered out. - Larger updates of
eolearn.io.ExportToTiffTask
. It doesn't allow undefinedfolder
parameter anymore, but it has better support forfilesystem
objects. - Added
eolearn.core.utils.raster.fast_nanpercentile
utility function and movedconstant_pad
function into the same module. - Suppressed a warning when saving an
EOPatch
with empty vector features. - Updated code-style checkers by including
flake8
and checks for Jupyter notebooks. - Various style improvements in example notebooks, code, and tests.
- Fixed a bug in
eolearn.io.ImportFromTiffTask
where a bounding box from the image wasn't added to the EOPatch. - Increased minimal version of
Pillow
dependency ineolearn.features
.
- Large improvements of parallelization in EOExecutor. Introduced the
eolearn.core.utils.parallelize
module, featuring tools for different parallelization modes. - Added support for session sharing in
SentinelHubInputTask
,SentinelHubEvalscriptTask
andSentinelHubDemTask
by adding asession_loader
parameter. Session sharing ofsentinelhub-py
is explained here. - Added
SpatialResizeTask
toeolearn.features.feature_manipulation
for spatially resizing EOPatch features. - Improved how
ImportFromTiffTask
reads from remote filesystems. - Switched to non-structural hashing of
EONode
class to avoid massive slowdowns in large workflows. - Improved procedure for building documentation and displaying of type annotations.
- Various minor improvements.
- Added workaround for an issue introduced by
fs==2.4.16
. - Executor progress bar improved for use-cases with many EOPatches.
LoadTask
andSaveTask
can now handle empty queries (by settingeopatch_folder=None
).- Minor improvements in code and documentation.
- Fixed an issue where vector features with empty dataframes couldn't be saved to a Geopackage.
- Memory improvement in
EOPatch
merging procedure. - Added support for
aws_session_token
, contributed by @theirix. - Fixed an issue in
ImportFromTiffTask
. - Fixed a packaging issue where some new subpackage extensions didn't work in the version
1.0.0
that was released to PyPI. eo-learn
abstract package from now on requires fixed versions ofeo-learn
subpackages.- Applied
isort
formatting on the entire package. - Minor improvements in code and documentation.
-
EOPatch
changes:- IO for vectors and meta-info switched from
pickle
to Geopackage, GeoJSON, and JSON files. Objects saved withpickle
can be loaded but the format is deprecated. - Now supports the
in
keyword for checking whether anEOPatch
contains a given feature. - Major update to
EOPatch
plotting functionality, which now features a simplermatplotlib
back-end. See example notebook for more details. - Removed some outdated
EOPatch
methods such asget_feature
,rename_feature
, etc. - Representation (
EOPatch.__repr__
method) skips empty features.
- IO for vectors and meta-info switched from
-
EOTask
changes:EOTask
method_parse_features
replaced withget_feature_parser
and additional helper methods (parse_feature
,parse_renamed_feature
,parse_features
,parse_renamed_features
).- Removed
EOTask.__mul__
as task concatenation as it was unsound.
-
EONode
is a newly introduced object for specifying computational graphs. It replaces rawEOTask
objects when building anEOWorkflow
. -
EOWorkflow
changes:LinearWorkflow
is replaced withlinearly_connect_tasks
function that prepares nodes for a linear workflow.- No longer accepts tuples in execution arguments. In cases where this is required, passing arguments to a task can be done with the new
InputTask
. EONodes
form a tree-like structure of dependencies, hence the end-nodes of a workflow contain all information. AnEOWorkflow
object can be constructed from end-nodes viafrom_endnodes
method.
-
EOExecutor
changes:- Added
RayExecutor
as an extension ofEOExecutor
for working with theray
library. - Execution arguments are now given w.r.t.
EONode
objects instead ofEOTasks
. - Now always returns results, which by default only contain statistics. Other data (for instance the final EOPatch) can be added to results with the new
OutputTask
. - Additionally, supports a
filesystem
argument for saving logs and reports. - Reports now have the option to only link to logs, greatly reducing size in case of large numbers of EOPatches. Logs files are now also more informative.
- Added
-
FeatureParser
now supports fewer input formats but handles those better. It now returns lists instead of generators. See documentation for more information. -
WorkflowResults
are re-done. They now contain execution stats of nodes (start and end times) and the outputs ofOutputTask
s in the workflow. -
FeatureType
methodis_time_dependant
renamed tois_temporal
.
- Added
LinearFunctionTask
which applies a linear function to features. MorphologicalFilterTask
moved fromml_tools
tofeatures
module.- Sampling tasks moved
geometry
toml_tools
module. Sampling tasks have also been greatly upgraded, with the main being:FractionSamplingTask
for sampling random points in a class-balanced wayBlockSamplingTask
for randomly sampling larger blocks of data (can also be 1 pixel blocks)GridSamplingTask
for deterministically sampling according to a grid.
- Removed
feature_extractor
module. - Removed unused submodules of
ml_tools
(classifier
,postprocessing
, ...) - To reduce core dependencies some functionalities have been moved to
extra
modules. - Removed deprecated and outdated methods and tasks.
- Moved many examples to new repository. The rest were updated.
- Switched to github actions for CI.
- Code was reformatted with
black
and is now checked to be compliant with the standard. - Abstract base classes are now correctly enforced.
- Added utility functions for working with S3 and AWS.
- Various minor changes.
- Copying EOPatches no longer forces loading of features if the EOPatch was loaded with
lazy_loading=True
SentinelHubInputTask
now requests bands with correct units and should now work with more data collections. The parameterbands_dtype
is now by default set toNone
, which uses the default units of each band. Note: due to changes the task no longer normalizes the output whenbands_dtype=np.uint16
is used.- Minor fixes and improvements
EOWorkflow
now automatically makes a shallow copy of eachEOPatch
before passing it to anyEOTask
in the workflow.- Streamlined naming conventions of EOTasks - every name now ends with
Task
. Old names have been deprecated. - Improved functionality of merging EOPatches, particularly of merging time-dependent features.
- Removed support for Python 3.6 and added official support for Python 3.9.
- Implemented
EOPatch.copy
andEOPatch.__delitem__
methods. - Added
eolearn.io.MeteoblueRasterTask
andeolearn.io.MeteoblueVectorTask
for obtaining weather data. Joint effort with Meteoblue. VectorToRasterTask
now supports rasterization of time-dependant vector features. Contributed by @asylve.- Fixes in
SentinelHubInputTask
. BothSentinelHubInputTask
andSentinelHubEvalscriptTask
now return EOPatches with timestamps that don't have timezone information anymore. - Changed
rasterio
dependency torasterio>=1.2.7
- All but
eolearn.core
tests ported topytest
framework. - Switched from Travis CI to GitHub actions.
- Minor fixes and improvements.
- Minor fixes and improvements:
SaveTask
andLoadTask
don't automatically store a filesystem object anymore,- fix in
ImportFromTiff
about file extensions, contributed by @rpitonak, - fix in
SentinelHubInputTask
about data collection bands handling, - fix in
GeoDBVectorImportTask
, NormalizedDifferenceIndexTask
doesn't show division warnings anymore,- improvement in
PointSamplingTask
- improvements in LULC documentation notebook.
- Added new tasks
VectorImportTask
,GeopediaVectorImportTask
, andGeoDBVectorImportTask
toeo-learn-io
. - Code improvements in LULC classification documentation notebook.
- Minor improvements and fixes.
- Changes in
eo-learn-io
tasks that interact with Sentinel Hub services:- Added
SentinelHubEvalscriptTask
that downloads data given a user-defined evalscript. - Removed all tasks that interact with Sentinel Hub OGC services. They are fully replaced by
SentinelHubInputTask
andSentinelHubEvalscriptTask
which use Sentinel Hub Process API. - Renamed
AddSen2CorClassificationFeature
toSentinelHubSen2corTask
. Now it uses Process API instead of OGC.
- Added
- Changes in Sentinel-2 cloud-masking tasks:
- Renamed
AddMultiCloudMaskTask
toCloudMaskTask
. - Removed
AddCloudMaskTask
as it is superseded byCloudMaskTask
. - Fixed problems with incompatibility with the latest
scikit-learn
version.
- Renamed
- Updated all notebooks in
eo-learn
repository. - Minor fixes and improvements:
- better handling of
KeyboardInterrupt
inEOExecutor
, - fixed plotting of raster features with binary dtype,
- documentation fixes.
- better handling of
- Added example use-case about creating a timelapse with batch processing.
- Added example use-case about crop type classification. Contributed by @Gnilliw
- Updated code to be compatible with the latest releases
sentinelhub-py
3.2.0
ands2cloudless
1.5.0
. - Fixed an issue in
eolearn.coregistration.RegistrationTask
. - Fixed an issue in
eolearn.io.ExportToTiff
with paths on Windows. - Various minor improvements.
- Switched from "data source" to "data collection" terminology according to changes in
sentinelhub-py
and Sentinel Hub services. - Improvements in
SentinelHubInputTask
to better support any type of data collection. Using newDataCollection
class fromsentinelhub-py
. - Extended
ExportToTiff
andImportFromTiff
tasks to support writing and reading from AWS S3 buckets. Implemented in cooperation with @wouellette. - Implemented
EOPatch.merge
method andMergeEOPatchesTask
task for merging the content of any number of EOPatches. Implemented in cooperation with @wouellette. - Deprecated
EOPatch.concatenate
in favour ofEOPatch.merge
. - Added
eolearn.features.DoublyLogisticApproximationTask
, contributed by @bsircelj. - Optional parameter
config
forSaveTask
andLoadTask
to enable defining custom AWS credentials. - Fixed a bug in
eolearn.features.ValueFilloutTask
. - Started releasing
eo-learn
(sub)packages also as wheels. - Minor improvements and fixes.
- Support for
geopandas
version0.8.0
- Added a notebook with an end-to-end example on how to transform a ML-model into an evalscript and run it with Sentinel Hub service
- Added
eolearn.features.ClusteringTask
, contributed by @bsircelj - An option to define a custom log filter for
EOExecutor
- Data mask obtained by
SentinelHubInputTask
has now boolean type instead of uint8 - Updates of some example notebooks
- A few minor fixes
- Added eo-learn dockerfiles and deployed official eo-learn docker images to Docker Hub
- Added
compress
parameter toExportToTiff
, contributed by @atedstone - Minor fixes
- Updated example notebooks - replaced OGC service tasks with Processing API service tasks
- Deprecated tasks that download data from Sentinel Hub OGC service
- Minor fixes in
SentinelHubInputTask
andAddCloudMaskTask
- Updates of
SentinelHubInputTask
:- Support for new s2cloudless precomputed cloud mask (more info)
- Support for
config
parameter
- Updated
SI_LULC_pipeline
notebook.
- Added support for
geopandas
version0.7.0
. - Fixed a bug in
eolearn.core.eodata_io.save_eopatch
function. - Improvement in
eolearn.mask.MaskFeature
task - it now works also works with time independent feature types. - A minor improvement in
eolearn.io.SentinelHubInputTask
task.
- Support additional data in the Processing API input task (such as sunAzimuthAngles, sunZenithAngles, viewAzimuthMean, viewZenithMean)
- Compatibility with the
sentinelhub-py
3.0 - Removed support for python 3.5
- Multiprocessing Log filtering
eolearn.io.SentinelHubInputTask
: evalscript version was not passed to the sentinel-hub service.eolearn.core.EOWorkflow
: fixed generating task dependencies.
- Processing API docs generation.
- Introduced CHANGELOG.md.