# Release notes ## 0.2.7 ### Bug Fixes - Fix a regression introduced in 0.2.6 where `is_monotonic` was significantly degrading `.sel` performance. - Fix `xdas.concat` to gracefully handle empty inputs, preventing errors when selecting out-of-range data from a `DataCollection` (@atrabattoni). ### Documentation - Achieved **100% docstring coverage** (excluding `__magic__` and private `_methods`) (@atrabattoni). - Improved *User Guide* index (@atrabattoni). - Added new *Sampled Coordinates* page (@atrabattoni). - Enhanced *Processing* documentation (@atrabattoni). - Improved *FAQ* page (@atrabattoni). - Added missing API documentation for several methods (@atrabattoni). ### Refactoring - Achieved **100% test coverage** across the codebase (@atrabattoni). - Migrated development workflow from conda to [uv](https://docs.astral.sh/uv/) (@atrabattoni). - *Reduced* test suite execution time by **~50%** (@atrabattoni). - Migrated formatting tooling from `isort` + `black` to `ruff` **including docstring checks** (@atrabattoni). - Ensure all ruff checks pass (@atrabattoni). ## 0.2.6 ### New features - Add `xdas.open` that automatically infers which `xdas.open_*` function to use (@atrabattoni, @yetinam). - Add automatic engine detection to every `xdas.open_*` function (@atrabattoni, @yetinam). - Add `pathlib.Path` support as input for all xdas file-related functions and methods (@atrabattoni). - Add `xdas.io.compressed` that compresses a specific dataset in an HDF5 file while preserving the rest of the file structure and metadata (@marbail). - Add `xdas.concat_coords` to merge coordinates. Also `Coordinate.append` is now `Coordinate.concat` (avoid in-place confusion) and `xdas.concatenate` has now a preferred alias `xdas.concat` (@atrabattoni). ### Improvements - All `to_netcdf` methods now have a `create_dirs` argument to create intermediate directories if necessary (@aurelienfalco). - Make `DataArray.sel` handle overlaps when slicing, and `xdas.split` can split on overlaps or gaps now (@atrabattoni). - New `io.Engine` backend system to register different file formats (@atrabattoni). - Make `open_mfdataarray` raise `RuntimeError` when opening all files fails (@asladen). - Add "prodml" engine (@atrabattoni) and make "optasense" and "sintela" aliases of it (@atrabattoni). - Add the `component_strategy` argument to the `xdas.atoms.MLPicker` to choose whether to use the same component on the 3 channels or to use one channel and set the others to 0 based (@marbail). - Make `DataArray.rename` capable of renaming `dims` and `coords` (@atrabattoni). - Add `parallel` argument to most `open*` functions to let the user choose the file opening strategy (@atrabattoni). ### Bug Fixes - Fix **memory accumulation** when slicing multiple times data arrays, e.g. when using atoms (@atrabattoni). - Fix **non-terminating loaders and writers** in `xdas.processing` (@atrabattoni). - Fix/improve distance handling for: "apsensing", "febus", "optasense", "silixa", and "sintela" (@atrabattoni). - Add dim swapping handling for the "prodml" based engines with the `swapped_dims=False` kwarg (@atrabattoni). - Fix ASN ROI handling (@asladen). - Use the `annotate_batch_pre` model's function to normalize in `xdas.atoms.MLPicker` (@marbail). - Fix the RuntimeError encountered when using `open_mf*` functions in scripts due to the use of multiprocessing by using the loky library (@atrabattoni) ## 0.2.5 - Add SampleCoordinate for more SEED-like coordinates and refactor the coordinate backend (@atrabattoni). - Add `xdas.picking.tapered_selection` to extract windows around picks (@atrabattoni). - Add `create_dirs` to `.to_netcdf` methods to create intermediate directories (@aurelienfalco). - Add support for multiple ROI for ASN engine (@martijnende). - `tolerance` can now be passed as seconds for datetime64 coordinates (@martijnende, @atrabattoni) - Add support for python 3.14, numpy 2.4 and obspy 1.4.2 incompatibilities and add `xdas.__version__` (@atrabattoni). ## 0.2.4 - Add StreamWriter to write long time series to miniSEED (@marbail). - Fix OptaSense engine's wrong axis attribution (@smouellet). - Fix ASN (OptoDAS) engine: handling of roiDec (@AndresLaurine). - Fix NaN handling for several methods (@ClaudioStrumia). - Fix `InterpCoordinate.get_availabilities` (@AMordret). ## 0.2.3 - Fix Febus engine (round timestamps to closest us). - Faster `xdas.concatenate` (faster linking for efficient reading of Febus files). ## 0.2.2 - Add support for Python 3.13 - Fix bugs and dependency issues ## 0.2.1 - Add `xdas.signal.stft`. - Add inverse Fourier transforms `xdas.fft.ifft` and `xdas.fft.irfft`. - Add support for APSensing format. - Improve overlap error message. - Fix decimation of freshly opened multi-file datasets. - Fix `zerophase` keyword argument for `xdas.signal.filter`. - Fix applying FFT functions in presence of non-dimensional coordinates. ## 0.2 - Add Dask virtualization backend for non-HDF5 formats (@atrabattoni). - Add support for miniSEED format (@atrabattoni, @chauvetige). - Add support for Silixa (TDMS) format (@atrabattoni, @Stutzmann). ## 0.1.2 - Add ZeroMQ streaming capabilities (@atrabattoni). - Add support of Terra15 format (@chauvetige). - Fix Febus engine (@ClaudioStrumia). ## 0.1.1 - Add support for `hdf5plugin` compression schemes. - Drop `netCDF4` dependency and only use `h5netcdf` to fix incompatibilities. - Drop useless `dask` dependency. ## 0.1 Initial stable version.