Full Changelog

0.8 (2023-11-16)


  • The minimum required Python is now 3.9. [#517]

  • The minimum required NumPy is now 1.22. [#517]

  • The minimum required Matplotlib is now 3.5. [#517]

New Features

  • The Regions class can now be initialized without any arguments. [#527]

  • The Regions extend method now can accept another Regions object as input. [#527]

Bug Fixes

API Changes

  • The Regions class and its append and extend methods now raise a TypeError for invalid inputs. [#527]

0.7 (2022-10-27)

New Features

  • Region meta and visual metadata can be now input as a dict. [#462]

Bug Fixes

  • Fixed an issue with the CRTF for certain malformed input. [#448]

  • Fixed a bug where DS9 serialization of an empty list raised an error. [#449]

  • Added validation to RegionMeta and RegionVisual update and setdefault methods. [#463]

  • Fixed an issue reading CRTF file with labelcolor defined. [#473]

  • Fixed a bug parsing CRTF files with “:” and “.” coordinate separators. [#407]

API Changes

  • Removed the deprecated BoundingBox class. Use RegionBoundingBox instead. [#456]

0.6 (2022-03-21)

New Features

  • Added the DS9 ‘boxcircle’ point symbol. [#387]

  • Added the ability to add and subtract PixCoord objects. [#396]

  • Added an origin keyword to PolygonPixelRegion to allow specifying the vertices relative to an origin pixel. [#397]

  • Added a RegularPolygonPixelRegion class. [#398]

  • Added the ability to compare Region objects for equality. [#421]

  • Added a copy method to RegionMeta and RegionVisual. [#424]

  • Added the ability to handle DS9 elliptical and rectangular annuli and multi-annuli regions. [#436]

  • Added the ability to handle DS9 composite regions. [#436]

  • Added the ability to serialize sky regions in the DS9 file format using the coordinate frame of the SkyCoord object. [#436]

  • Added the ability to serialize multiple regions in the DS9 file format that have different coordinate frames. [#436]

  • Added the ability to parse FITS region rectangle and rotrectangle shapes. [#444]

Bug Fixes

  • Fixed the DS9 default point symbol to use ‘boxcircle’. [#387]

  • Point symbol markers are no longer filled for consistency with DS9. [#387]

  • Fixed an issue where plotting elliptical regions were incorrectly filled by default. [#389]

  • Fixed an issue where compound region colors were being set correctly. [#389]

  • Fixed an issue where sky/pixel conversions did not preserve meta and visual data for some regions. [#420, #424]

  • Fixed an issue with elliptical and rectangular annulus regions where the outer width/height could be smaller than the inner width/height. [#425]

  • Fixed an issue converting elliptical and rectangular annulus regions between pixel and sky regions. [#425]

  • Fixed the string representations of TextPixelRegion and TextSkyRegion to include quotes around the text parameter value. [#429]

  • Fixed many issues with the DS9 parser and serializer in not consistently handling or preserving the region coordinate frame or region parameter units. [#436]

  • Fixed handling of FITS shapes that are preceded by an exclamation mark. [#444]

  • Fixed a bug where written FITS region files could not be read back in. [#444]

API Changes

  • Removed the following deprecated I/O classes and functions: crtf_objects_to_string, ds9_objects_to_string, fits_region_object_to_table, read_crtf, read_ds9, read_fits, read_fits_region, write_crtf, write_ds9, write_fits, write_fits_region CRTFParser, DS9Parser, FITSRegionParser, ShapeList, and Shape. The Regions and Region objects now support this functionality via a unified I/O interface. [#386]

  • Removed the deprecated BoundingBox slices attribute. [#386]

  • The default matplotlib keywords that are used when plotting now depend on the value of self.visual['default_style']. This keyword is currently set (to a value of ‘ds9’) only when reading DS9 region files. If set to ‘ds9’, DS9 plotting defaults are used. If not set or set to ‘mpl’ or None, then the matplotlib defaults will be used, with the exception that fill is turned off for Patch and Line2D artists.

  • Renamed the BoundingBox class to RegionBoundingBox. The old name is deprecated. [#427]

  • A ValueError is raised if the radius, width, or height region parameters are not strictly positive (> 0). [#430]

  • Added a precision keyword to the DS9 serializer and writer to specify the number of decimal places in output numbers. [#436]

  • The errors keyword was removed from the DS9 parser and reader and the coordsys, radunit, and fmt keywords were removed from the DS9 serializer and writer. The new precision keyword can be used when serializing and writing DS9 regions. [#436]

  • The PixelRegion.plot() method now returns a matplotlib.artist.Artist object, which can be used in plot legends. [#441]

  • FITS region files are now always parsed and serialized as PixelRegion objects. They can be converted to SkyRegion objects using a WCS object. [#444]

0.5 (2021-07-20)


  • The infrastructure of the package has been updated in line with the APE 17 guidelines. The main changes are that the python setup.py test and python setup.py build_docs commands will no longer work. The easiest way to replicate these commands is to install the tox (https://tox.readthedocs.io) package and run tox -e test and tox -e build_docs. It is also possible to run pytest and sphinx directly. Other significant changes include switching to setuptools_scm to manage the version number, and adding a pyproject.toml to opt in to isolated builds as described in PEP 517/518. [#315]

  • Bump the minimum required version of Astropy to 3.2.

New Features

  • Added a as_mpl_selector method to the rectangular and ellipse pixel-based regions. This method returns an interactive Matplotlib selector widget. [#317]

  • Added a get_overlap_slices method to BoundingBox. [#348]

  • Added a center attribute to BoundingBox. [#348]

  • Added get_overlap_slices method to RegionMask. [#350]

  • Added get_values method to RegionMask. [#351, #353]

  • Added a Regions class with a unified I/O interface for reading, writing, parsing, and serializing regions. [#378]

  • Added serialize and write methods to all Region subclasses. [#378]

Bug Fixes

  • Fixed an issue where RegionMask.multiply fill_value was not applied to pixels outside of the mask, but within the region bounding box. [#346]

  • Fixed an issue where RegionMask.cutout would raise an error if fill_value was non-finite and the input array was integer type. [#346]

  • A ValueError is now raised when calling BoundingBox.slices when ixmin or iymin is negative. [#347]

  • Fixed an issue in the DS9 parser where uppercase coordinate frames would fail. [#237]

  • Fixed an issue where the CRTF file parser would fail if the CRTF version number was included on the first line. [#240]

  • Fixed an issue where the CRTF file parser would fail if there was a space after the region name. [#271]

  • Fixed an issue where the CRTF file parser was too restrictive about requiring the last and first polynomial coordinates to be the same. [#359, #362]

  • Fixed a bug where an EllipsePixelRegion with zero height and/or width would raise a ValueError when creating a RegionMask. [#363]

  • Fixed parsing CRTF regions files that do not have a comma after the region. [#364]

  • Fixed parsing CRTF regions files that contain a symthick value. [#365]

  • Fixed an issue where PointPixelRegion objects would not plot. [#366]

  • Fixed an issue where DS9 annulus regions with more than one annulus would not be parsed correctly. Such regions are skipped for now. [#371]

  • Fixed an issue where Angle values for SkyRegion shape parameters could be incorrectly serialized. [#380]

  • Fixed an issue where a semicolon in the DS9 text field would raise an error. [#381,#383]

  • Fixed an issue where DS9 regions without metadata would not be parsed correctly. [#382]

  • Fixed an issue parsing spaces in DS9 region metadata. [#384]

API Changes

  • Deprecated the BoundingBox slices attribute. [#348]

  • The RegionMeta and RegionVisual classes have been moved to the regions.core.metadata module. [#371]

  • Deprecated the read_fits_region and write_fits_region functions. Instead, use the read_fits and write_fits functions. Note that the write_fits function is called as write_fits(regions, filename) for consistency with the other functions that write files. [#376]

  • The following helper functions were removed from the public API: to_shape_list, to_crtf_meta, to_ds9_meta, CRTFRegionParser, DS9RegionParser, CoordinateParser, and FITSRegionRowParser. [#375]

  • Deprecated the following I/O classes and functions: crtf_objects_to_string, ds9_objects_to_string, fits_region_object_to_table, read_crtf, read_ds9, read_fits, write_crtf, write_ds9, write_fits, CRTFParser, DS9Parser, FITSRegionParser, ShapeList, and Shape. The Regions and Region objects now support this functionality via a unified I/O interface. [#378]

  • Existing ds9 and crtf region files will not be overwritten by default with the write functions. Set overwrite=True to overwrite existing files. [#378]

0.4 (2019-06-17)

New Features

  • Add region copy methods [#269]

  • Add pixel region rotate method [#265]

  • Added union and intersection methods to the BoundingBox class. [#277]

  • Add support for BOX in FITS regions [#255]

  • Add PixCoord.xy [#247]

Bug Fixes

  • Fixed a corner-case issue where RegionMask.multiply() would not set non-finite data values outside of the mask but within the bounding box to zero. [#278]

  • Fix ‘text’ renamed to ‘label’ [#234]


  • Remove astropy-healpix dependency [#258]

  • Use standalone six to avoid deprecation warnings [#235]

  • Change CRTF writer to match CASA implementation [#226]

  • Simplify annulus regions [#279]

See also: regions v0.4 merged pull requests list on Github.

0.3 (2018-09-09)

New Features

  • Changed as_patch to as_artist to accommodate non-patch artists [#218]

  • Implemented to_pixel for regions.CompoundSkyRegions, to_mask for regions.CompoundPixelRegion and to_pixel for regions.CircleSkyRegion. [#137]

  • Handling dimension and broadcast of x and y in regions.PixCoord. [#172]

  • Deserialization of CRTF file format is possible. [#173]

  • Added regions.TextPixelRegion and regions.TextSkyRegion. [#177]

  • Added Shape layer in the serialization of DS9 format. Also, implemented RegionMeta and RegionVisual to validate the meta parameters. [#179]

  • Serialization of regions.Region object to CRTF format is possible. [#186]

  • Fix mask bug for regions with negative indices. [#190]

  • Improved the plot methods for several regions. Added as_patch for annulus regions. Now, uses the parameters in the visual attributes of regions in the matplotlib plotting. Also, added mpl_properties_default method in regions.PixelRegion to set the visual parameters to that of DS9 by default. [#194]

  • Now, to_mask in regions.CompoundPixelRegion handles negative bounding box. [#195]

  • Added regions.RectangleAnnulusPixelRegion, regions.RectangleAnnulusSkyRegion, regions.EllipseAnnulusPixelRegion and regions.RectangleAnnulusSkyRegion. Also, implemented custom descriptor classes for attribute validation. [#196]

  • Implemented FITS Region Binary Table reader and writer. [#198]

  • Renamed Mask class to RegionMask and added origin arg to as_patch and plot methods in regions.Region class. [#203]

  • Support for explicit formatting directives in DS9. [#204]

See also: regions v0.3 merged pull requests list on Github.

0.2 (2017-02-16)

Changelog wasn’t filled.

See also: regions v0.2 merged pull requests list on Github.

0.1 (2016-07-26)

Changelog wasn’t filled.

See also: regions v0.1 merged pull requests list on Github.