Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Changes are grouped as follows

  • Added for new features.
  • Changed for changes in existing functionality.
  • Deprecated for soon-to-be removed features.
  • Removed for now removed features.
  • Fixed for any bug fixes.
  • Security in case of vulnerabilities.

[0.3.21] - 2023-07-13

Fixed

  • Bump dependencies in order to not depend on grpcio-tools 1.48

[0.3.20] - 2023-08-22

Fixed

  • SearchSpec objects will now raise an error if given more than one identifier to search by. This was never supported.
  • Documentation improvements.

[0.3.19] - 2023-04-21

Added

  • TracesAPI.get_trace_bounds and TracesAPI.get_array now support pre-stack data.

[0.3.18] - 2023-03-22

Fixed

  • gRPC errors not getting converted to cognite.seismic.data_classes.errors types when client retries enabled.

[0.3.17] - 2023-03-20

Changed

  • Changed the name of the version header to help with internal usage metrics.

[0.3.16] - 2023-03-01

Changed

  • The dependency on protobuf has been reverted back to version 3 for compatibility with apache-beam.

[0.3.15] - 2023-02-27

Added

  • The sdk will now include its version as headers in all calls.

[0.3.14] - 2023-01-25

Added

  • Prestack migrated SegY file support. Files can now have a specified seismic data type (poststack or prestack, defaulting to poststack) by using the cognite.seismic.data_classes.SeismicDataType during registration. traces.get_segy and traces.stream_traces now accept a trace_group_extent to filter on sub-traces, using the cognite.seismic.SeismicTraceGroupExtent type.

[0.3.13] - 2022-11-11

Added

  • Survey, Partition, SourceSegyFile, Seismic, SeismicStore can be searched for by last_modified. Survey and Partition search() accepts a last_modified argument of type SearchSpecLastModified, while SourceSegyFile, Seismic, and SeismicStore search() search_spec argument can accept the same.

[0.3.12] - 2022-11-04

Changed

  • Dependency on protobuf is reverted back to version 3 instead of 4

[0.3.11] - 2022-10-14

Changed

  • traces.get_segy will now automatically try to resume downloads if the connection resets
  • Streaming endpoints will now raise exceptions from cognite.seismic.errors instead of native grpc exceptions, similar to the existing behavior of non-streaming endpoints.
  • Survey, Partition, SourceSegyFile, Seismic, SeismicStore objects now have a last_modified field.

[0.3.10] - 2022-09-30

Changed

  • SearchSpec’s are now frozen dataclasses, which in particular makes them hashable.

[0.3.9] - 2022-09-08

Fixed

  • Searching for job status now works correctly.

[0.3.8] - 2022-09-05

Fixed

  • Searching for surveys by exact name now works correctly.

[0.3.7] - 2022-08-11

Added

  • Seismic3dExtent now has utility methods to simplify working directly with extents. get_inline and get_xline enumerate all inlines or crosslines. get_inline_range and get_xline_range calculate the minimum and maximum values of inlines or crosslines. get_bounding_box calculates a bounding box that fits all traces specified in the extent.

[0.3.6] - 2022-08-05

Added

Surveys can now by searched for by geometry

[0.3.5] - 2022-08-01

Added

  • Seismics can be searched for by seismic store using SearchSpecSeismicStore.

[0.3.4] - 2022-07-29

Fixed

  • file.search properly raises NotFoundError rather than a gRPC NotFound status.

[0.3.3] - 2022-07-22

Added

  • It is now possible to search for jobs by a source segy file’s integer id, instead of its (legacy) uuid.

[0.3.2] - 2022-07-18

Added

  • SeismicStore and Seismic objects now have the following methods available, stream_traces, get_trace_bounds, get_array.

[0.3.1] - 2022-07-11

Added

  • SeismicStore objects now have a survey_id field containing the numeric id of the containing survey (in addition to the old-style uuid in survey_uuid).

[0.3.0] - 2022-07-07

Major new release including support for 2D seismic files. See the documentation for a more exhaustive overview of all the changes.

Added

  • It is now possible to specify the dimensionality of registered files, and to control which trace headers should be used to index traces, by passing arguments to the file.register method.
  • The new traces API has been added as a unified way to stream trace data from both 2D and 3D objects, replacing the old volume_seismic API. The get_volume function is replaced with the stream_traces function, while get_volume_size is replaced by get_trace_bounds. get_array has also been generalized to support 2D data.
  • The SeismicExtent class hierarchy has been added as a flexible way to describe exactly which traces to include in a given request. It supports both 2D and 3D data, and also subsumes the old VolumeDef schema which it replaces for 3D data.
  • Similarly, the SeismicCutout class hierarchy has been added to describe how seismics are cut out from their seismic stores.

Changed

  • seismicstore.search, seismic.search, and file.search use a search_spec argument for distinguishing between search types rather than having a mode argument as a switch. get_all was removed in favor of SearchSpecGetAll.
  • File ids and survey ids are now internal, numeric ids by default. The old uuid-style ids are still avaible through the uuid property.
  • Project name is now required when initializing the API client.
  • in_wkt argument replaced with coverage_format for methods using coverage.
    • coverage_format expects one of "wkt" or "geojson", defaulting to the latter.

Removed

  • All v0 apis were removed. All v1 apis were renamed (e.g. client.file_seismic is now client.file).
  • The volume_seismic API has been removed in favor of traces API
  • The VolumeDef json schema has been removed in favor of SeismicExtent.
  • The File class has been removed in favor of SourceSegyFile, which is better adapted to the 2D / 3D split.
  • Removed the deprecated argument include_coverage from SeismicAPI.search and SeismicStoreAPI.search.
  • Removed backwards compatibility for v1 Survey APIs.

[0.2.103] - 2022-07-07

Added

  • file_seismic.search now supports searching for files by the containing survey
  • The SeismicStore class now has a crs attribute

[0.2.102] - 2022-05-13

Added

  • SeismicStore has field ingested_source_file which includes more information about the file, primarily concerned with adding 2D data support.

[0.2.101] - 2022-05-12

Changed

  • seismics.get raises specific exceptions (NotFoundError, InternalError, ValueError) instead of Exception.

[0.2.100] - 2022-05-04

Fixed

  • Remove unnecessary argument dimensions from file.ingest

[0.2.99] - 2022-05-03

Added

  • seismicstore.search has a new ‘file’ mode which searchs for seismic stores by file.

[0.2.98] - 2022-04-19

Changed

  • The volume_seismic API now supports geometric filters

[0.2.97] - 2022-04-11

Fixed

  • Fixed a protocol error causing files to be registered with the wrong dimensions.

[0.2.96] - 2022-03-18

Deprecated

  • survey_v1.register is deprecated and will be removed in version 0.3. Use survey_v1.create instead.

[0.2.95] - 2022-03-29

Added

  • Enum to represent dimensionality of the seismic file.

Changed

  • Registering a file allows the specifying the dimensionality of the data.

[0.2.94] - 2022-03-24

Fixed

  • Internal fixes to survey_v1

[0.2.93] - 2022-03-16

Added

  • Add cloud_storage_path to SourceSegyFile

[0.2.92] - 2022-03-15

Added

  • SourceSegyFile, SegyOverrides have a __repr__
  • File, SeismicStore, Seismic, Partition now quote strings in __repr__.

[0.2.91] - 2022-03-14

Changed

  • file_seismic search and get return the new data type SourceSegyFile instead of File. This is a breaking change.

[0.2.90] - 2022-02-07

Changed

  • survey_v1 edit now interfaces with SeismicService.EditSurvey. The signature has been modified to conform with the new interface.

[0.2.89] - 2022-02-04

Fixed

  • The volume_seismic API’s get_volume_size now works also with z_range = None.

[0.2.88] - 2022-01-24

Changed

  • The seismic service will now respect step sizes in get_volume calls. The volume_seismic API’s get_volume_size and get_array methods have been updated to take this into account. Calling get_array with a step size will now fail with older sdk versions.

[0.2.87] - 2021-11-18

Added

  • survey_v1 now has the create method that interfaces with SeismicService.CreateSurvey. The previously-used register method interfaces with IngestionService.RegisterSurvey and will be deprecated.

Changed

  • survey_v1 delete now also interfaces with SeismicService.DeleteSurvey. Its behaviour should be backwards-compatible.

[0.2.86] - 2021-11-29

Changed

  • The File API’s register method now allows crs to be None. If so, the crs will be taken from the file’s survey.

[0.2.85] - 2021-10-28

Added

  • Introduced dedicated exception types for the GRPC status codes ALREADY_EXISTS and FAILED_PRECONDITION. These errors are usually returned when API requests would create an object with an identifier that is already present in the service, and when a deletion requests attempts to delete an object that contains other objects that must be removed first, respectively.

[0.2.84] - 2021-10-26

Fixed

  • File.repr() no longer throws exception

[0.2.83] - 2021-10-01

Fixed

  • Use the certifi Python package for root certificates to improve compatibility with Let’s Encrypt certificates over GRPC’s default root certificates.

[0.2.82] - 2021-09-22

Fixed

  • Improved support for OIDC tokens. oidc_token callables that automatically return refreshed tokens as the old ones expire will now be correctly used to obtain new tokens for every call.

[0.2.81] - 2021-09-07

Added

  • SDK support for OpenID Connect authentication. OIDC may not be supported by the service yet.

[0.2.80] - 2021-09-01

Added

  • The V1 Survey API now has the ability to request a specific source for a survey’s coverage (custom or calculated) when searching/listing. If no source is specified, the default behavior is to prioritize custom coverage.
  • Seismic objects returned from the seismic.get/search APIs now include ‘trace_count’ and ‘created_empty’ fields, indicating the number of traces in the seismic object, and whether the seismic object was created empty to serve as a placeholder or not.

[0.2.79] - 2021-08-23

Added

  • The V1 Survey API now has the ability to search by metadata using the survey_contains_exact_metadata argument, which filters surveys depending on whether their metadata is an exact superset of the provided metadata. It is case sensitive.

[0.2.78] - 2021-08-11

Changed

  • Partition objects will no longer have a populated seismics field, as it has been deprecated. The seismic_ids field will have a list of seismic ids that are included in the partition, and seismics can be searched for by partition id.

[0.2.77] - 2021-08-02

Added

  • seismic.create has a new parameter copy_metadata which, when true, will ignore the provided metadata and instead copy it from the underlying seismic store.

[0.2.76] - 2021-07-13

Added

  • seismic.create has a new parameter empty which, when true, will create an empty seismic object

[0.2.75] - 2021-07-12

Fixed

  • seismicstore.edit metadata error

[0.2.74] - 2021-07-12

Fixed

  • seismicstore.edit syntax error

[0.2.73] - 2021-07-09

Changed

  • Allow grpc maximum message size to be configured when initializing client, e.g, CogniteSeismicClient(..., max_message_size_MB=20). Please be mindful when configuring the maximum message size to be above the default of 10MB that the client may incur significant memory costs if a message is received whose size is now accepted by that new maximum. This property acts as a safety valve to prevent excessive memory usage in the unlikely event of the client receiving a significantly large message.

[0.2.72] - 2021-06-30

Added

  • Keyword argument no_retries on client constructor that disables auto-retry on failure

[0.2.71] - 2021-06-29

Changed

  • Restore survey_* as args for v1 Survey APIs, for backwards compatibility until the next minor version bump.
  • Restore client.seismics and client.seismicstores for the same reason.

[0.2.70] - 2021-06-22

Changed

  • search and list for seismics and seismic stores now returns a generator instead of a list.

[0.2.69] - 2021-05-28

Changed

  • In v1, renamed most file_id, survey_name etc to just id and name where appropriate.
    • For example, methods on client.file generally will omit the file_ prefix.
  • Renamed client.seismics to client.seismic, and client.seismicstores to client.seismicstore.

[0.2.68] - 2021-06-04

Added

  • Now supports specifying custom survey coverage: If a custom_coverage argument is provided to survey.register() or survey.edit(), this custom coverage will now be used as the survey coverage.

[0.2.67] - 2021-05-31

Changed

  • The horizon parameter to slab.get() has been renamed to surface.

Fixed

  • slab.get() now works properly if inline_range or xline_range are omitted.

[0.2.66] - 2021-05-25

Changed

  • CogniteSeismicClient base_url param now takes any valid URL, including scheme (e.g. https) and port number. An unspecified schemes default to https, a missing URL defaults to api.cognitedata.com, and an unspecified port defaults to 443. Paths and query parameters are discarded.

Deprecated

  • CogniteSeismicClient’s port and is_insecure params are deprecated. Port and protocol information should go in base_url.

[0.2.65] - 2021-05-20

Fixed

  • survey.register() now also properly handles the absence of the optional crs argument.

[0.2.64] - 2021-05-10

Fixed

  • survey.edit() now properly handles the absence of the optional crs argument.

[0.2.63] - 2021-05-06

Deprecated

  • file.grant_access() and file.revoke_access() are now deprecated.

[0.2.62] - 2021-05-04

Added

  • Survey queries now support specifying a user-defined affine transformation between bin grid (inline, xline) coordinates and projected (x, y) coordinates, to be used by all files and seismic objects in this survey.

[0.2.61] - 2021-05-03

Fixed

  • Setting the source_group_scalar_override parameter on file.edit and file.register calls should no longer raise a ValueError.

[0.2.60] - 2021-04-29

Added

  • file.edit() and file.register() now accept and return new source_group_scalar_override field, file.get() now also returns source_group_scalar_override field

[0.2.59] - 2021-04-27

Added

  • file_seismic now has list, get and search endpoints
  • The v1 api has an overview in the examples section

[0.2.58] - 2021-04-19

Added

  • Files and Surveys now support external IDs

[0.2.57] - 2021-03-26

Fixed

  • seismicstore.get() now retrieves volume definitions as well

[0.2.56] - 2021-03-24

Fixed

  • Fixed an issue where using slab api with constant z would always result in an exception

[0.2.55] - 2021-03-24

Changed

  • Slab API’s returned array dims are now (inline, crossline, z_offset)

[0.2.54] - 2021-03-24

Changed

  • Slab API now returns flattened numpy array indexed by z offset

[0.2.53] - 2021-03-22

Added

  • The seismic slab API has been added

[0.2.52] - 2021-03-12

Added

  • The v1 volume_seismic API has a new method get_volume_size, to estimate the transferred size of the traces returned by get_volume

[0.2.51] - 2021-03-12

Changed

  • Listing and searching seismic stores now defaults to omitting volumedefs, making the operation faster on average.
  • Seismic store list has the argument include_volume_definitions which, when set to true, includes volumedefs in the response.

[0.2.43] - 2021-03-04

Fixed:

  • Fix a bug in the coverage argument for SeismicStore and Seismic.

[0.2.41] - 2021-03-02

Changed

  • file.register and file.edit functions now support cdp_x_offset and cdp_y_offset arguments for files with custom cdp_x and cdp_y offsets.

[0.2.40] - 2021-02-24

Removed

  • include_coverage argument on SeismicStore and Seismic search(). Use coverage_crs and coverage_format instead.

Added

  • Can specify the CRS and format of coverage on Seismic(Store) methods get, list, search.
    • coverage_format is currently either “geojson” or “wkt”, and defaults to WKT.
    • coverage_crs defaults to the seismic(store)’s CRS.

Fixed

  • Geometry.geojson is now a native Python object instead of a Protobuf Struct

[0.2.39] - 2021-02-15

Changed

  • The v1 volume_seismic API’s get_array method now produces a masked numpy array, masks indicating where no traces exist in the seismic data set.

Fixed

  • The CDF_PROJECT environment variable / project constructor is now documented.
  • The v1 seismics.create API would fail to create seismics from volumedef based cutouts. This has been remedied.

[0.2.38] - 2021-02-05

Added

  • The v1 survey API now includes access to spatial coverage data for the surveys.

[0.2.37] - 2021-02-03

Added

  • The new function client.volume_seismic.get_array() will fetch trace data into a numpy array.

Changed

  • All instances of “crossline” in the v1 sdk were renamed to “xline”
  • The VolumeDef schema can now optionally include a sample_count, giving the number of samples in each trace.

[0.2.36] - 2021-01-21

Fixed

  • Improve VolumeDef range helpers

[0.2.35] - 2021-01-21

Added

  • VolumeDef utils, including get_crossline_range() and get_inline_range().
  • A short explanation on how to use VolumeDefs, located under “VolumeDef Schema” in the docs

[0.2.34] - 2020-01-20

Changed

  • The default CRS for the result of the file.get_file_coverage() operation is now the file’s default CRS. Previously it defaulted to EPSG:23031 (ED50/UTM 31N). Note that the CRS of the result was always included in the response.

Fixed

  • client.seismics.get() now includes the volume definition.
  • client.partition.get() now accepts either one of the id or external_id arguments.

[0.2.33] - 2021-01-14

Fixed

  • Resolve another issue with seismic store search operations

[0.2.32] - 2021-01-15

Fixed

  • Improve handling of geojson for seismic data coverage retrieval

[0.2.31] - 2021-01-15

Added

  • New argument include_coverage on seismic search() that includes coverage

[0.2.30] - 2021-01-14

Fixed

  • Resolve an issue with seismic store search operations

[0.2.29] - 2021-01-11

Added

  • Error types (NotFoundError, TransientError, InternalError, AuthenticationError, InvalidArgumentError, PermissionError). This should allow for easier error handling in scripts. They are subclasses of the existing SeismicServiceError, so no changes should be needed.

[0.2.28] - 2021-01-04

Added

  • Updated protobuf for ingestion status
  • JobAPI.status can now take file_id and seismicstore_id as args.

[0.2.27] - 2021-01-04

Changed

  • Updated protobuf for ingestion status
  • JobAPI.status now also returns logs from ingestion of file.

[0.2.26] - 2020-12-16

Added

  • New api module added - survey_v1

[0.2.24] - 2020-12-08

Changed

  • Updated protobuf type for line ranges for seismics

[0.2.23] - 2020-12-07

Added

  • VolumeDef has new methods count_line_traces() and count_total_traces() that parse the volume definition to determine how many ‘live’ traces exist on that object.
  • Getting a SeismicStore with include_volume_definitions=True enables access to these new methods via SeismicStore.inline_volume_def and SeismicStore.crossline_volume_def.

Changed

  • Renamed the argument for VolumeDef constructor to json_payload from json

[0.2.18] - 2020-11-25

Added

  • search_seismic_store now has a new argument include_volume_definition. If set to false, will omit fetching volume definitions (inline and crossline).

[0.2.21] - 2020-11-25

Added: Tenant/project name

The CogniteSeismicClient now accepts the project id as an argument during construction. In time, this project id argument will be required when constructing a seismic client. For now, a warning will be printed if the client does not have a known project id.

There are two ways to set the project name for the client:

  • Through the constructor as described above. For example, CogniteSeismicClient(api_key=”…”, base_url=”api.cognitedata.com”, project=”public-data”).
  • Through the environment variable COGNITE_PROJECT. The value of this environment variable will be used by the client if the project argument is not defined.

[0.2.4] - 2020-10-26

Changed

We now wrap all V1 API endpoint objects as Python data types, with full type hints available.

  • Primitive fields (e.g. id or external_id) will need no changes
  • Lists and non-nested dicts will need minimal changes – cannot use ProtoBuf methods anymore, but can use all Python methods for the appropriate objects.
  • GeoJson objects are still returned as ProtoBuf Structs – this may change in the future.

[0.2] - 2020-10-14

There were several inconsistencies in the naming convention in v0.1 version. The naming convention of endpoints/parameters was modified with the following rules in v0.2:

  • All mentions of “iline” changed to “inline”.
  • All mentions of “crossline” changed to “xline”.
  • All named “id” or “name” arguments have been renamed to include the object they identify, ie “file_id”, “file_name”, “survey_id” or “survey_name”, as appropriate for the API method they belong to.

[0.1.26] - 2020-05-22

Changed

  • Add wrapper for traces to extract X/Y from the header

[0.1.18] - 2020-05-05

Changed

  • Added support for listing files regardless of survey attachment

[0.1.17] - 2020-04-08

Changed

  • Modified return types of
    • file.get_segy
    • file.get_segy_by_lines
    • file.get_segy_by_geometry
    • slice.get_inline
    • slice.get_crossline
    • slice.get_arbitrary_line
    • volume.get_cube_by_lines
    • volume.get_cube_by_geometry
    • volume.get
    • time_slice.get_time_slice_by_lines
    • time_slice.get_time_slice_by_geometry endpoints from list to generator.
  • Changed Trace3DList, Trace2DList and SurfacePointList classes to extend from CustomList(object).

Added

  • Added CustomList class with load method to save the data from generator.

[0.0.1] - 2019-02-15

Added

  • Initial release