Skip to content

Releases: descarteslabs/descarteslabs-python

Client release v1.2.0

23 Apr 22:17
Compare
Choose a tag to compare

Workflows (channel v0-14) - Added

  • 191 functions from NumPy are available for Workflows Arrays, including parts of the numpy.linalg and numpy.ma submodules. See the full list on the docs.
  • index_to_coords and coords_to_index methods on Image/ImageCollection/GeoContext for converting between geospatial and array coordinates
  • value_at function on Image and ImageCollection for extracting single pixel values at spatial coordinates.

Workflows - Fixed

  • Using datetimes as parameters to visualize behaves correctly.

Client release v1.1.3

02 Apr 18:26
Compare
Choose a tag to compare

Catalog client

  • Fixed a bug that prevented uploading ndarrays of type uint8

Workflows (channel v0-13) - Added

  • Array support for argmin, argmax, any, all
  • pick_bands supports an allow_missing kwarg to drop band names that may be missing from the data without an error.
  • wf.compute supports passing lists or tuples of items to compute at the same time. Passing multiple items to wf.compute, rather than calling obj.compute for each separately, is usually faster.
  • Casting from Bool to Int: wf.Int(True)
  • Experimental .inspect() method for small computations during interactive use.

Workflows - Changed

  • [breaking] Array no longer uses type parameters: now you construct an Array with wf.Array([1, 2, 3]), not wf.Array[wf.Int, 1]([1, 2, 3]). Remember, Array is an experimental API and will continue to make frequent breaking changes!
  • Workflows now reuses the same gRPC client by default---so repeated or parallel calls to .compute, etc. will be faster. Calling .compute within a thread pool will also be significantly more efficient.

Workflows - Fixed

  • wf.numpy.histogram correctly accepts a List[Float] as the range argument

Client release v1.1.2

13 Mar 14:55
Compare
Choose a tag to compare

1.1.2 fixes a bug which caused Workflows map layers to behave erratically when changing colormaps.

Client release v1.1.1

12 Mar 00:13
Compare
Choose a tag to compare

1.1.1 fixes a packaging issue that caused import descarteslabs.workflows to fail.

It also makes NumPy an explicit dependency. NumPy was already a transitive dependency, so this shouldn't cause any changes.

You should NOT install version 1.1.0; 1.1.1 should be used instead in all circumstances.

Client release v1.1.0

11 Mar 18:55
Compare
Choose a tag to compare

[1.1.0] - 2020-03-11

Catalog client

  • Image.upload() now emits a deprecation warning if the image has a cs_code or projection property.
    The projection defined in the uploaded file is always used and applied to the resulting image in the Catalog.
  • Image.upload_ndarray() now emits a deprecation warning if the image has both a cs_code and a projection
    property. Only one of them may be supplied, and cs_code is given preference.

Scenes

  • SceneCollection.download_mosaic has new default behavior for mask_alpha wherein the alpha band will be
    used as a mask by default if it is available for all scenes in the collection, even if it is not specified in
    the list of bands.

Workflows (channel v0-12) - Added

  • Experimental Array API following the same syntax as NumPy arrays. It supports vectorized operations, broadcasting,
    and multidimensional indexing.
    • ndarray attribute of Image and ImageCollection will return a MaskedArray.
    • Over 60 NumPy ufuncs are now callable with Workflows Array.
    • Includes other useful Array functions like min(), median(), transpose(), concatenate(), stack(), histogram(), and reshape().
  • ImageCollection.sortby_composite() for creating an argmin/argmax composite of an ImageCollection.
  • Slicing of List, Tuple, Str, and ImageCollection.
  • wf.range for generating a sequence of numbers between start and stop values.
  • ImageCollectionGroupby.mosaic() for applying ImageCollection.mosaic to each group.
  • wf.exp(), wf.square(), wf.log1p(), wf.arcsin(), wf.arccos(), and wf.arctan()
  • Datetime.is_between() for checking if a Datetime falls within a specified date range
  • FeatureCollection.contains()
  • Container operations on GeometryCollection including:
    • GeometryCollection.contains()
    • GeometryCollection.sorted()
    • GeometryCollection.map()
    • GeometryCollection.filter()
    • GeometryCollection.reduce()
  • List and Tuple can now be compared with other instances of their type via __lt__(), __eq__() etc.
  • List.__add__() and List.__mul__() for concatenating and duplicating Lists.

Workflows - Changed

  • Products without alpha band and nodata value are rejected, instead of silently producing unwanted behavior.
  • ImageCollection.concat_bands now throws a better error when trying to concatenate bands from another ImageCollection that is not the same length.
  • Any is now promotable to all other types automatically.
  • Better error when trying to iterate over Proxytypes.
  • Interactive map: calls to visualize now clear layer errors.
  • Interactive map: when setting scales, invalid values are highlighted in red.

Workflows - Fixed

  • Better errors when specifying invalid type parameters for Proxytypes that require them.
  • Field access on Feature, FeatureCollection, Geometry, and GeomeryCollection no longer fails.
  • In from_id, processing level 'cubespline' no longer fails.

Client release v1.0.0

21 Jan 03:53
Compare
Choose a tag to compare
As of January 1st, 2020, the client library no longer supports Python 2. For more information, please contact support@descarteslabs.com. For help with porting to Python 3, please visit https://docs.python.org/3/howto/pyporting.html.

Catalog client

  • There is an entirely new backend supporting asynchronous uploads of image files and ndarrays with
    the catalog client. There are minor changes to the ImageUpload class (a new events field has subsumed
    errors, and the job_id field has been removed) but the basic interface is unchanged so most
    code will keep functioning without any changes.
  • It is now possible to cancel image uploads.
  • Errors messages are now easier to read.
  • Many improvements to the documentation.
  • You can now create or retrieve an existing object using the get_or_create method.
  • Retrieving a Band or Image by name is now possible by calling get_band or get_image on the
    Product instance. You can also use the Product's named_id function to get a complete id for
    images and bands.
  • A new convenience function make_valid_name on Image and Band classes will return a sanitized
    name without invalid characters.
  • A new property ATTRIBUTES enumerates which attributes are available for a specific catalog object.
  • Trying to set an attribute that does not exist will now raise AttributeError.
  • update_related_objects_permissions() should no longer fail with a JSON serialization error.
  • Setting a read-only attribute will now raise an AttributeValidationError.
  • Saving a new object while one with the same id already exists will now raise a ConflictError
    instead of BadRequestError.
  • If a retrieved object has since been deleted from the catalog, saving any changes or trying to
    reload it will now raise a DeletedObjectError.
  • Resolution fields now accept string values such as "10m" or "0.008 degrees". If the value cannot
    be parsed, an AttributeValidationError will be raised.
  • Changes to the extra_properties attribute are now tracked correctly.

Packaging

  • This release no longer supports Python 2.
  • This package is now distributed as a Python 3 wheel which will speed up installation.

Workflows (channel v0-11) - Added

  • Handling of missing data via empty ImageCollections
    • ImageCollection.from_id returns an empty ImageCollection if no data exist for the given time/place, rather than an error
    • ImageCollection.filter returns an empty ImageCollection if the predicate is False for every Image, rather than an error
    • Image.replace_empty_with and ImageCollection.replace_empty_with for explicitly filling in missing data
    • See the Workflows guide for more information
  • Docstrings and examples on every class and function!
  • Assigning new metadata to Image properties & bandinfo: Image.with_properties(), Image.with_bandinfo()
  • Interactive map: colorbar legends on layers with colormaps (requires matplotlib)
  • Dict.from_pairs: construct a Dict from a sequence of key-value pairs
  • Map displays a fullscreen button by default ([breaking] if your code adds one, you'll now get two)
  • wf.concat for concatentating Image and ImageCollection objects
    • ImageCollection.concat now accepts Image objects; new Image.concat accepts Image or ImageCollection
  • ImageCollection.mosaic()
  • FeatureCollection.sorted(), FeatureCollection.length(), FeatureCollection.__reversed__()
  • GeometryCollection.length(), GeometryCollection.__reversed__()

Workflows - Changed

  • wf.zip now supports ImageCollection, FeatureCollection, GeometryCollection as well as List and Str
  • Get a GeoContext for the current bounds of the map in any resolution, shape, or CRS (including "utm", which automatically picks the right UTM zone for you) with wf.map.geocontext. Also now returns a Scenes GeoContext for better introspection and use with Raster.
  • Better backend type-checking displays the possible arguments for most functions if called incorrectly
  • arr_shape included when calling wf.GeoContext.compute()
  • More readable errors when communication with the backend fails
  • Interactive map: layout handles being resized, for example setting wf.map.layout.height = '1000px'
  • Any is no longer callable; Any.cast encouraged
  • remove_layer and clear_layers moved from wf.interactive.MapApp class to wf.interactive.Map (non-breaking change)
  • [possibly breaking] band renaming in binary operators only occurs when broadcasting: red + red is just red, rather than red_add_red. red + blue is still red_add_blue. Code which depends on accessing bands by name may need to change.

Workflows - Fixed

  • wf.where propagates masks correctly, and handles metadata correctly with multi-band inputs
  • processing_level="surface" actually returns surface-reflectance-processed imagery
  • ImageCollection.sorted() works properly
  • Viewing global-extent WGS84 images on the Workflows map no longer causes errors
  • List proxytype no longer infinitely iterable in Python
  • Repeated use of axis="bands" works correctly
  • ImageCollection.from_images correctly aligns the bands of the inputs
  • Numeric casting (wf.Int(wf.Float(2.2))) works as expected
  • More descriptive error when constructing an invalid wf.Datetime
  • Computing a single Bool value derived from imagery works correctly

Client release v0.28.1

10 Dec 23:20
Compare
Choose a tag to compare

Changed

  • Update workflows client channel
  • Workflows map UI is more stable: errors and layers won't fill the screen

Client release v0.28.0

09 Dec 23:56
Compare
Choose a tag to compare

Added

  • Catalog client: Added an update() method that allows you to update multiple attributes at once.

Changed

  • Catalog client: Images and Bands no longer reload the Product after calling save
  • Catalog client: Various attributes that are lists now correctly track changes when modifying them with list methods (e.g. Product.owners.append("foo"))
  • Catalog client: Error messages generated by the server have a nicer format
  • Catalog client: Fix a bug that caused waiting for tasks to never complete
  • The minimum numpy version has been bumped to 1.17.14 for Python version > 3.5, which addresses a bug with scenes.display

Workflows (channel v0-10) - Added

  • .compute() is noticeably faster
  • Most of the Python string API is now available on workflows.Str
  • Interactive map: more descriptive error when not logged in to iam.descarteslabs.com
  • Passing the wrong types into functions causes more descriptive and reliable errors

Workflows - Fixed

  • RST_STREAM errors when calling .compute() have been eliminated
  • Image/ImageCollection.count() is much faster
  • .buffer() on vector types now works correctly
  • Calling .compute() on a GeometryCollection works

Client release v0.27.0

18 Nov 21:06
Compare
Choose a tag to compare

Added

  • Catalog client: Added a MaskBand.is_alpha attribute to declare alpha channel behavior for a band.

Changed

  • The maximum number of extra_properties allowed for Catalog objects has been increased from 10 to 50.
  • Fixed bug causing SceneCollection.download to fail.

Workflows (channel v0-9) - Added

  • When you call .compute() on an Image or ImageCollection, the GeoContext is included on the result object (ImageResult.geocontext, ImageCollectionResult.geocontext)

Workflows - Fixed

  • Passing a Workflows Timedelta object (instead of a datetime.timedelta) into functions expecting it now behaves correctly
  • Arguments to the reducer function for reduce are now in the correct order

Client release 0.26.0

30 Oct 22:22
Compare
Choose a tag to compare

Added

  • A new catalog client in descarteslabs.catalog makes searching and managing products, bands and images easier. This client encompasses functionality previously split between the descarteslabs.Metadata and descarteslabs.Catalog client, which are now deprecated. Learn how to use the new API in the Catalog guide.
  • Property filtering expressions such as used in scenes.search() and FeatureCollection.filter() now support an in_() method.

Changed

  • SceneCollection.download previously always returned successfully even if one or more of the downloads failed. Now if any of the downloads fail, a RuntimeError is raised, which will detail which destination files failed and why.
  • Fixed a bug where geometries used with the Scenes client had coordinates with reduced precision.

Workflows (channel v0-8) - Added

  • Interactive parameters: add parameters to map layers and interactively control them using widgets
  • Spatial convolution with wf.conv2d
  • Result containers have helpful reprs when displayed
  • Datetime and Timedelta are unpacked into datetime.datetime and datetime.timedelta objects when computed.

Workflows - Changed

  • [breaking] Result containers moved to descarteslabs/workflows/results and renamed, appending "Result" to disambiguate (e.g. ImageResult and ImageCollectionResult)
  • [breaking] .bands and .images attributes of ImageResult and ImageCollectionResult renamed .ndarray
  • [breaking] When compute-ing an Image or ImageCollection, the order of bandinfo is only correct for Python >= 3.6
  • Interactive maps: coordinates are displayed in lat, lon order instead of lon, lat for easier copy-pasting
  • Interactive maps: each layer now has an associated output that is populated when running autoscale and deleted when the layer is removed
  • Interactive maps: Image.visualize returns a Layer object, making it easier to adjust Layer.parameters or integrate with other widgets

Workflows - Fixed

  • Composing operations onto imported Workflows no longer causes nondeterministic errors when computed
  • Interactive maps: remove_layer doesn't cause an error
  • No more errors when creating a wf.parameter for Datetime and other complex types
  • .where no longer causes a backend error
  • Calling wf.map.geocontext() when the map is not fully initialized raises an informative error
  • Operations on numbers computed from raster data (like img_collection.mean(axis=None)) no longer fail when computed
  • Colormap succeeds when the Image contains only 1 value