Skip to content
Back to top
View this page

# 1.0.0 (2026-01-15)

- Raise an error when inserting a transform before the first coordinate frame. [#654]

- Remove `with_units` argument from `__call__` and `invert`. Use the Shared API functions instead, `pixel_to_world` and `world_to_pixel`. [#635]

- Adjust and fix tests. Replace `logging` with `warnings`. [#659]

- Update the Native API. [#660]

- Update doc dependencies to remove `sphinx-tabs` in favor of `sphinx-inline-tabs`. [#676]

- Enable `MyPy` type checking. [#657]

# 0.26.1 (2025-11-19)

- Fix an indexing bug in `spectroscopy.SellmeierZemax` where the output `n` for array-type wavelength inputs had the correct shape, but had the same value for all elements. [#642]

- Deprecate the private `_toindex` function in favor of a public `to_index` function. [#619]

# 0.26.0 (2025-09-18)

- Fix the computation of `lon_pole` for Zenitahl projections and declination of +/-90 deg. [#616]

- Enable `inputs_mapping` in `selector.LabelMapperArray`. [#626]

- Deprecate `with_units` argument in favor of the high level Shared API. [#634]

# 0.25.1 (2025-06-20)

- Relax the oldest allowed numpy version to 1.25 [#607]

# 0.25.0 (2025-06-19)

- Removed from PyPi

- Reorganize documentation to have two separate introductions (user and developer) [#604]

- Test with latest version of Python and drop Python 3.10 [#569]

- Fix API issue with `wcs.numerical_inverse`. [#565]

- Switch to using a new sphinx theme and clean up the documentation. [#580]

- Fix bug where “vector” (shape (n,) not shape (1, n)) arrays would loose all their entries except the first if `with_units=True` was used. [#563]

- Bugfix for `__call__` and `invert` incorrectly handling units when involving “parameterless” transforms. [#562]

- Refactor `wcs.coordinate_frames` into its own sub-module. [#567]

- Bugfix for `outside_footprint` modifying the input coordinates. [#595]

- Derive the longitude of the celestial pole from the supplied projection. [#600]

- Add `FITSImagingWCSTransform`. [#602]

# 0.24.0 (2025-02-04)

- Coordinate frames now have a “native” order and then are sorted based on `axes_order`. [#457]

- `WCS.numerical_inverse` no longer accepts high level objects (`with_units=` is not supported) use `WCS.inverse`. [#457]

- `CoordinateFrame.coordinates` has been replaced by `CoordinateFrame.to_high_level_coordinates` [#457]

- `CoordinateFrame.to_quantity` has been replaced by `CoordinateFrame.from_high_level_coordinates`. [#457]

- Inputs to `CelestialFrame`, such as `axes_names` are now explicitly in lon, lat order and will re sorted based on `axes_order=`. [#457]

- Implement code linting and automatic formatting. [#544]

- Refactor `WCS` to use a `Pipeline` base class which adds basic checks to ensure that the pipeline is valid. These include checking for duplicate frame names and that the last transform is `None`. [#545]

- Bugfix for `WCS.invert` and `WCS.to_fits` that prevented evaluation when the attached bounding box happened to have units on its values. [#554]

# 0.23.0 (skipped)

This was skipped to avoid issues with an ongoing JWST release.

# 0.22.0 (2024-12-19)

- Replace usages of `copy_arrays` with `memmap` [#503]

- Fix an issue with units in `wcs_from_points`. [#507]

- Fix incorrect units being returned in the low level WCS API. [#512]

- Synchronize `region.py` with the copies of it in JWST and Romancal. [#517]

- Add support for compound bounding boxes and ignored bounding box entries. [#519]

- Add `gwcs.examples` module, based on the examples located in the testing `conftest.py`. [#521]

- Force `bounding_box` to always be returned as a `F` ordered box. [#522]

- Move the bounding box attachment to the forward transform property. [#532]

- Adjust `world_to_array_index_values` to round to integer coordinates as specified by APE 14. [#525]

- Add warning filter to asdf extension to prevent the `bounding_box` order warning for gwcs objects originating from a file. [#526]

- Fixed a bug where evaluating the inverse transform did not respect the bounding box. [#498]

- Improved reliability of inside/outside footprint computations when evaluating inverse transform with bounding box. [#536]

# 0.21.0 (2024-03-10)

- Improve documentation. [#483]

- Add a minimum version requirement for `asdf-wcs-schemas`. [#491]

- Fix `WCS.__str__` for instances without transforms. [#489]

# 0.20.0 (2023-11-29)

- Replace `pkg_resources` with `importlib.metadata`. [#478]

- Serialize and deserialize `pixel_shape` with asdf. [#480]

# 0.19.0 (2023-09-15)

## Bug Fixes

- Synchronize `array_shape` and `pixel_shape` attributes of WCS objects. [#439]

- Fix failures and warnings with numpy 2.0. [#472]

## other

- Remove deprecated old `bounding_box`. The new implementation is released with astropy v 5.3. [#458]

- Refactor `CoordinateFrame.axis_physical_types`. [#459]

- `StokesFrame` uses now `astropy.coordinates.StokesCoord`. [#452]

- Dropped support for Python 3.8. [#451]

- Fixed a call to `astropy.coordinates` in `wcstools.wcs_from_points`. [#448]

- Code and docstrings clean up. [#460]

- Register all available asdf extension manifests from `asdf-wcs-schemas` except 1.0.0 (which contains duplicate tag versions). [#469]

- Register empty extension for 1.0.0 to avoid warning about a missing extension when opening old files. [#475]

# 0.18.3 (2022-12-23)

## Bug Fixes

- Fixed a bug in the estimate of pixel scale in the iterative inverse code. [#423]

- Fixed constant term in the polynomial used for SIP fitting. Improved stability and accuracy of the SIP fitting code. [#427]

# 0.18.2 (2022-09-07)

## Bug Fixes

- Corrected the reported requested forward SIP accuracy and reported fit residuals by `to_fits_sip()` and `to_fits()`. [#413, #419]

- Fixed a bug due to which the check for divergence in `_fit_2D_poly()` and hence in `to_fits()` and `to_fits_sip()` was ignored. [#414]

## New Features

# 0.18.1 (2022-03-15)

## Bug Fixes

- Remove references to the `six` package. [#402]

# 0.18.0 (2021-12-22)

## Bug Fixes

- Updated code in `region.py` with latest improvements and bug fixes from `stsci.skypac.regions.py` [#382]

- Added support to `_compute_lon_pole()` for computation of `lonpole` for all projections from `astropy.modeling.projections`. This also extends support for different projections in `wcs_from_fiducial()`. [#389]

## New Features

- Enabled `CompoundBoundingBox` support for wcs. [#375]

- Moved schemas to standalone package `asdf-wcs-schemas`. Reworked the serialization code to use ASDF converters. [#388]

# 0.17.1 (2021-11-27)

## Bug Fixes

- Fixed a bug with StokesProfile and array types. [#384]

# 0.17.0 (2021-11-17)

## Bug Fixes

- `world_axis_object_components` and `world_axis_object_classes` now ensure unique keys in `CompositeFrame` and `CoordinateFrame`. [#356]

- Fix issue where RuntimeWarning is raised when there are NaNs in coordinates in angle wrapping code [#367]

- Fix deprecation warning when wcs is initialized with a pipeline [#368]

- Use `CD` formalism in `WCS.to_fits_sip()`. [#380]

## New Features

- `wcs_from_points` now includes fitting for the inverse transform. [#349]

- Generalized `WCS.to_fits_sip` to be able to create a 2D celestial FITS WCS from celestial subspace of the `WCS`. Also, now `WCS.to_fits_sip` supports arbitrary order of output axes. [#357]

## API Changes

- Modified interface to `wcs_from_points` function to better match analogous function in astropy. [#349]

- `Model._BoundingBox` was renamed to `Model.ModelBoundingBox`. [#376, #377]

# 0.16.1 (2020-12-20)

## Bug Fixes

- Fix a regression with `pixel_to_world` for output frames with one axis. [#342]

# 0.16.0 (2020-12-18)

## New Features

- Added an option to `to_fits_sip()` to be able to specify the reference point (`crpix`) of the FITS WCS. [#337]

- Added support for providing custom range of degrees in `to_fits_sip`. [#339]

## Bug Fixes

- `bounding_box` now works with tuple of `Quantities`. [#331]

- Fix a formula for estimating `crpix` in `to_fits_sip()` so that `crpix` is near the center of the bounding box. [#337]

- Allow sub-pixel sampling of the WCS model when computing SIP approximation in `to_fits_sip()`. [#338]

- Fixed a bug in `to_fits_sip` due to which `inv_degree` was ignored. [#339]

# 0.15.0 (2020-11-13)

## New Features

- Added `insert_frame` method to modify the pipeline of a `WCS` object. [#299]

- Added `to_fits_tab` method to generate FITS header and binary table extension following FITS WCS `-TAB` convention. [#295]

- Added `in_image` function for testing whether a point in world coordinates maps back to the domain of definition of the forward transformation. [#322]

- Implemented iterative inverse for some imaging WCS. [#324]

# 0.14.0 (2020-08-19)

## New Features

- Updated versions of schemas for gwcs objects based on latest versions of transform schemas in asdf-standard. [#307]

- Added a `wcs.Step` class to allow serialization to ASDF to use references. [#317]

- `wcs.pipeline` now is a list of `Step` instances instead of a (frame, transform) tuple. Use `WCS.pipeline.transform` and `WCS.pipeline.frame` to access them. [#319]

## Bug Fixes

- Fix a bug in polygon fill for zero-width bounding boxes. [#293]

- Add an optional parameter `input_frame` to `wcstools.wcs_from_fiducial`. [#312]

# 0.13.0 (2020-03-26)

## New Features

- Added two new transforms - `SphericalToCartesian` and `CartesianToSpherical`. [#275, #284, #285]

- Added `to_fits_sip` method to generate FITS header with SIP keywords [#286]

- Added `get_ctype_from_ucd` function. [#288]

## Bug Fixes

- Fixed an off by one issue in `utils.make_fitswcs_transform`. [#290]

# 0.12.0 (2019-12-24)

## New Features

- `gwcs.WCS` now supports the `world_axis_object_components` and `world_axis_object_classes` methods of the low level WCS API as specified by APE 14.

- Removed astropy-helpers from package. [#249]

- Added a method `fix_inputs` which returns an unique WCS from a compound WCS by fixing inputs. [#254]

- Added two new transforms - `ToDirectionCosines` and `FromDirectionCosines`. [#256]

- Added new transforms `WavelengthFromGratingEquation`, `AnglesFromGratingEquation3D`. [#259]

- `gwcs.WCS` now supports the new `world_axis_names` and `pixel_axis_names` properties on `LowLevelWCS` objects. [#260]

- Update the `StokesFrame` to work for arrays of coordinates and integrate with APE 14. [#258]

- Added `Snell3D`, `SellmeierGlass` and `SellmeierZemax` transforms. [#270]

## API Changes

- Changed the initialization of `TemporalFrame` to be consistent with other

    coordinate frames. [#242]

## Bug Fixes

- Ensure that `world_to_pixel_values` and `pixel_to_world_values` always accept and return floats, even if the underlying transform uses units. [#248]

# 0.11.0 (2019/07/26)

## New Features

- Add a schema and tag for the Stokes frame. [#164]

- Added `WCS.pixel_shape` property. [#233]

## Bug Fixes

- Update util.isnumerical(…) to recognize big-endian types as numeric. [#225]

- Fixed issue in unified WCS API (APE14) for transforms that use `Quantity`. [#222]

- Fixed WCS API issues when `output_frame` is 1D, e.g. `Spectral` only. [#232]

# 0.10.0 (12/20/2018)

## New Features

- Initializing a `WCS` object with a `pipeline` list now keeps the complete `CoordinateFrame` objects in the `WCS.pipeline`. The effect is that a `WCS` object can now be initialized with a `pipeline` from a different `WCS` object. [#174]

- Implement support for astropy APE 14 (https://doi.org/10.5281/zenodo.1188875). [#146]

- Added a `wcs_from_[points` function which creates a WCS object two matching sets of points `(x,y)` and `(ra, dec)`. [#42]

# 0.9.0 (2018-05-23)

## New Features

- Added a `TemporalFrame` to represent relative or absolute time axes. [#125]

- Removed deprecated `grid_from_domain` function and `WCS.domain` property. [#119]

- Support for Python 2.x, 3.0, 3.1, 3.2, 3.3 and 3.4 was removed. [#119]

- Add a `coordinate_to_quantity` method to `CoordinateFrame` which handles converting rich coordinate input to numerical values. It is an inverse of the `coordinates` method. [#133]

- Add a `StokesFrame` which converts from ‘I’, ‘Q’, ‘U’, ‘V’ to 0-3. [#133]

- Support serializing the base `CoordinateFrame` class to asdf, by making a specific tag and schema for `Frame2D`. [#150]

- Generalized the footrpint calculation to all output axes. [#167]

## API Changes

- The argument `output="numerical_plus"` was replaced by a bool argument `with_units`. [#156]

- Added a new flag `axis_type` to the footprint method. It controls what type of footprint to calculate. [#167]

## Bug Fixes

- Fixed a bug in `bounding_box` definition when the WCS has only one axis. [#117]

- Fixed a bug in `grid_from_bounding_box` which caused the grid to be larger than the image in cases when the bounding box is on the edges of an image. [#121]

# 0.8.0 (2017-11-02)

- `LabelMapperRange` now returns `LabelMapperRange._no_label` when the key is not within any range. [#71]

- `LabelMapperDict` now returns `LabelMapperDict._no_label` when the key does not match. [#72]

- Replace `domain` with `bounding_box`. [#74]

- Added a `LabelMapper` model where `mapper` is an instance of `Model`. [#78]

- Evaluating a WCS with bounding box was moved to `astropy.modeling`. [#86]

- RegionsSelector now handles the case when a label does not have a corresponding transform and returns RegionsSelector.undefined_transform_value. [#86]

- GWCS now deals with axes types which are neither celestial nor spectral as “unknown” and creates a transform equivalent to the FITS linear transform. [#92]

# 0.7 (2016-12-23)

## New Features

- Added `wcs_from_fiducial` function to wcstools. [#34]

- Added `domain` to the WCS object. [#36]

- Added `grid_from_domain` function. [#36]

- The WCS object can return now an `SkyCoord` or `Quantity` object. This is triggered by a new parameter to the `__call__` method, `output` which takes values of “numericals” (default) or “numericals_plus”. [#64]

## API_Changes

- Added `atol` argument to `LabelMapperDict`, representing the absolute tolerance [#29]

- The `CoordinateFrame.transform_to` method was removed [#64]

## Bug Fixes

- Fixed a bug in `LabelMapperDict` where a wrong index was used.[#29]

- Changed the order of the inputs when `LabelMapperArray` is evaluated as the inputs are supposed to be image coordinates. [#29]

- Renamed variables in read_wcs_from_header to match loop variable [#63]

# 0.5.1 (2016-02-01)

## Bug Fixes

- Added ASDF requirement to setup. [#30]

- Import OrderedDict from collections, not from astropy. [#32]

# 0.5 (2015-12-28)

Initial release on PYPI.