Skip to content

Latest commit

 

History

History
1328 lines (888 loc) · 51.3 KB

CHANGES.md

File metadata and controls

1328 lines (888 loc) · 51.3 KB

Full changelog

v0.15.0 (unreleased)

  • No changes yet.

v0.14.2 (unreleased)

  • Fix bug that caused demo VO Table to not be read in correctly with recent versions of Numpy and Astropy. [#1911]

v0.14.1 (unreleased)

  • Fix bug that caused the links based on join_on_key to not always work. [#1902]

v0.14.0 (2018-11-14)

  • Improved how we handle equal aspect ratio to not depend on Matplotlib. [#1894]

  • Avoid showing a warning when closing an empty tab. [#1890]

  • Fix bug that caused component arithmetic to not work if Numpy was imported in user's config.py file. [#1887]

  • Added the ability to define custom layer artist makers to override default layer artists in viewers. [#1850]

  • Fix Plot.ly exporter for categorical components and histogram viewer. [#1886]

  • Fix issues with reading very large FITS files on some systems. [#1884]

  • Added documentation about plugins. [#1837]

  • Better isolate code related to pixel selection tool in image viewer that depended on Qt. [#1763]

  • Improve handling of units in FITS files. [#1723]

  • Added documentation about creating viewers for glue using the new state-based infrastructure. [#1740]

  • Make it possible to pass the initial state of a viewer to an application's new_data_viewer method. [#1877]

  • Ensure that glue can be imported if QtPy is installed but PyQt and PySide aren't. [#1865, #1836]

  • Fix unit display for coordinates from WCS headers that don't have CTYPE but have CUNIT. [#1856]

  • Enable tab completion on Data objects. [#1874]

  • Automatically select datasets in link editor if there are only two. [#1837]

  • Change 'Export Session' dialog to offer to save with relative paths to data by default instead of absolute paths. [#1803]

  • Added a new method screenshot on GlueApplication to save a screenshot of the current view. [#1808]

  • Show the active subset in the toolbar. [#1797]

  • Refactored the viewer class base classes [#1746]:

    • glue.core.application_base.ViewerBase has been removed in favor of glue.viewers.common.viewer.BaseViewer and glue.viewers.common.viewer.Viewer.

    • glue.viewers.common.viewer.Viewer is now where the base logic is defined for using state classes in viewers (instead of glue.viewers.common.qt.DataViewerWithState).

    • glue.viewers.common.qt.DataViewerWithState is now deprecated.

  • Make it so that the modest image only resamples the data when the mouse is no longer pressed - this avoids too many refreshes when panning/zooming. [#1866]

  • Make it possible to unglue multiple links in one go. [#1809]

  • Make it so that adding a subset to a viewer no longer adds the associated data, since in some cases the viewer can handle the subset size, but not the full data. [#1807]

  • Defined a new abstract base class for all datasets, BaseData, and a base class BaseCartesianData, which can be used to implement interfaces to datasets that may be remote or may not be stored as regular cartesian data. [#1768]

  • Add a new method Data.compute_statistic which can be used to find scalar and array statistics on the data, and use for the profile viewer and the state limits helpers. [#1737]

  • Add a new method Data.compute_histogram which can be used to find histograms of specific components, with or without subsets applied. [#1739]

  • Removed Data.get_pixel_component_ids and Data.get_world_component_ids in favor of Data.pixel_component_ids and Data.world_component_ids. [#1784]

  • Deprecated Data.visible_components and Data.primary_components. [#1788]

  • Speed up histogram calculations by using the fast-histogram package instead of np.histogram. [#1806]

  • In the case of categorical attributes, Data[name] now returns a categorical_ndarray object rather than the indices of the categories. You can access the indices with Data[name].codes and the unique categories with Data[name].categories. [#1784]

  • Compute profiles and histograms asynchronously when dataset is large to avoid holding up the UI, and compute profiles in chunks to avoid excessive memory usage. [#1736, #1764]

  • Improved naming of components when merging datasets. [#1249]

  • Fixed an issue that caused residual references to viewers after they were closed if they were accessed through the IPython console. [#1770]

  • Don't show layer edit options if layer is not visible. [#1805]

  • Make the Matplotlib viewer code that doesn't depend on Qt accessible to non-Qt frontends. [#1841]

  • Avoid repeated coordinate components in merged datasets. [#1792]

  • Fix bug that caused new subset to be created when dragging an existing subset in an image viewer. [#1793]

  • Better preserve data types when exporting data/subsets to FITS and HDF5 formats. [#1800]

v0.13.4 (2018-10-19)

  • Fix bug that caused .svg icons to not be correctly installed. [#1882]

  • Fix bug that occurred in certain cases when using the state attribute limit helper with a state class that did not have a log attribute. [#1842]

  • Fix HDF5 reader for string columns. [#1840]

  • Fix visual bug in link editor in advanced mode when resizing window.

  • Fixed a bug that caused custom data importers to no longer work. [#1813]

  • Fixed a bug that caused ROIs to not be erased after selection if the active subset was not in the list of layers for the viewer. [#1801]

  • Always returned to last used folder when opening/saving files. [#1794]

  • Show correct dataset when using control-click to select to add arithmetic attributes or rename/reorder components. [#1802]

  • Improve performance when updating links and changing attributes on subsets. [#1716]

  • Fix errors that happened when clicking on the 'Export Data' and 'Define arithmetic attributes' buttons when no data was present, and fixed Qt errors that happened if the data collection changed after the 'Export Data' dialog was opened. [#1795]

  • Fixed parsing of AVM meta-data from images. [#1732]

  • Fixed compatibility with Matplotlib 3.0. [#1875]

v0.13.3 (2018-05-08)

  • Fixed a bug that caused the expression for derived attributes to not immediately be updated in the list of derived attributes. [#1708]

  • Fixed a bug that caused combo boxes with Data objects to not update when a data label was changed. [#1704]

  • Fixed a bug related to callback functions when restoring sessions. [#1695]

  • Fixed a bug that meant that setting Data.coords after adding components didn't work as expected. [#1196]

  • Fixed bugs related to components with only NaN or Inf values. [#1712]

  • Fixed a bug that caused an error when the zoom or pan tools were active and the viewer was closed. [#1712]

  • Fixed a Qt-related segmentation fault that occurred during the testing process and may also affect users. [#1703]

  • Show image layer attribute in list of layers. [#1706]

  • Fixed a bug that caused scatter plots to not revert to fixed color mode after being in linear color mode. [#1705]

v0.13.2 (2018-05-01)

  • Fixed a bug that caused the EditSubsetMode toolbar to not change when EditSubsetMode.mode was changed programatically. [#1684]

  • Fixed unintuitive behavior of single-pixel selection tool - now moving the crosshairs requires clicking and dragging. [#1684]

  • Fixed bug that caused crosshairs to not be hidden when a layer was set to not be visible [#1684]

  • Fixed a bug that caused viewers to be closed without warning when pressing delete. [#1684]

v0.13.1 (2018-04-29)

  • Fixed resetting and opening of sessions which caused Glue to quit. [#1681]

  • Fixed serialization of Data.meta when non-serializable keys or values are present. [#1681]

v0.13.0 (2018-04-27)

  • Added new perceptually uniform Matplotlib colormaps. [#1679]

  • Fixed a bug that caused vectors to not correctly be flipped when flipping the x/y limits of the plot. [#1677]

  • Added a CSV and HDF5 data/subset exporter. [#1676]

  • Started adding helpful information dialogs that can be hidden. [#1669]

  • Make it possible to have a 'None' entry in the ComponentIDComboHelper. [#1661]

  • Added a new metadata/header viewer for datasets/subsets. [#1659]

  • Re-write spectrum viewer into a generic profile viewer that uses subsets to define the areas in which to compute profiles rather than custom ROIs. [#1635]

  • Added support for PySide2 and remove support for PyQt4 and PySide. [#1662]

  • Remove support for Matplotlib 1.5. [#1662]

  • Renamed qt4_to_mpl_color to qt_to_mpl_color and mpl_to_qt4_color to mpl_to_qt_color. [#1662]

  • Improve performance when changing visual attributes of subsets. [#1617]

  • Removed glue.core.qt.data_combo_helper (we now recommend using the GUI framework-independent equivalent in glue.core.data_combo_helper). [#1625]

  • Removed glue.viewers.common.qt.attribute_limits_helper in favor of glue.core.state_objects. [#1625]

  • Removed unused function glue.utils.misc.defer. [#1625]

  • Added a new FloodFillSubsetState class to represent and calculate subsets made by a flood-fill algorithm. [#1616]

  • Added the ability to easily create viewer tools with dropdown menus. [#1634]

  • Remove the MatplotlibViewerToolbar class as it is now no longer needed - instead you can just list the matplotlib tools directly in the tools attribute of the viewer. [#1634]

  • Improve hiding/showing of side-panels. No longer hide side-panels when glue application goes out of focus. [#1535]

  • Use memory-mapping with contiguous arrays in HDF5 files, resulting in improved performance for large files. [#1628]

  • Deselect tools when the viewer focus changes. [#1584, #1608]

  • Added support for whether symbols are shown filled or not. [#1559]

  • Improved link editor to include a graph of links. [#1534]

  • Improve mouse interaction with ROIs in image viewers, including click-and-drag relocation. Allow for more customization of mouse/toolbar modes. [#1515]

  • Add a toolbar item to save data. [#1516, #1519, #1575]

  • Give instructions for how to move selections in status tip. [#1504]

  • Improve the display of data cube slice labels to include only the precision required given the separation of world coordinate values. [#1500, #1660]

  • Removed the ability to edit the marker symbol in the style dialog since this isn't recognized by any viewer anymore. [#1560]

  • Remove back/forward tools in Matplotlib viewer toolbars to declutter. [#1505]

  • Added a new component manager that makes it possible to rename, reorder, and remove components, as well as better manage derived components, including editing previous equations. [#1479]

  • Added new messages DataReorderComponentMessage and DataRenameComponentMessage which can be subscribed to. [#1479]

  • Add support for the datetime64 dtype in Data objects, and adjust Matplotlib viewers to correctly show this data. [#1510]

  • Make it possible to reorder components in Data using the new Data.reorder_components method. [#1479]

  • The default order of components has changed - coordinate components will now always come first (rather than second). [#1479]

  • Added support for scatter density maps, which is useful when making scatter plots of many points. [#1461]

  • Improve how ComponentIDComboHelper deals with non-primary components. The .visible property has been removed, and a new .derived property has been added (to show/hide derived components). Components are now split up into sections in the combo boxes. [#1476]

  • Fixed a bug that caused ghost components to be added when creating a derived component with data[...] = ... [#1476]

  • Fixed a bug that caused errors when removing items from a selection property linked to a QComboBox. [#1476]

  • Added initial support for customizing keyboard shortcuts. [#1475, #1514, #1524]

  • Added support for using relative paths in session files. [#1537]

  • Remember last session filename and filter used. [#1537]

  • EditSubsetMode is now no longer a singleton class and is instead instantiated at the Application/Session level. [#1530]

  • Improve performance of image viewer. [#1558]

  • Added new Projected3dROI and RoiSubsetState3d classes to represent 3D selections made in the projection plane. [#1522]

  • Fixed saving of sessions with BinaryComponentLink. [#1533]

  • Refactored/simplified handling of links between datasets and fixed performance issues when adding/removing links or loading data collections with many links. [#1531, #1533]

  • Significantly improve performance of link computations when the links depend only on pixel or world coordinate components. [#1585]

  • Added the ability to customize the appearance of tick and axis labels in Matplotlib plots. [#1511]

  • Added the ability to export Python scripts from the main Matplotlib-based viewers. [#1511]

  • Added a new selection mode that always forces the creation of a new subset. [#1525]

  • Added a mouse over pixel selection tool, which creates a one pixel subset under the mouse cursor. [#1619]

  • Fixed an issue that caused sliders to not be correctly updated when switching reference data in the image viewer. [#1665]

  • Fixed a bug that caused Data.meta to not be saved/restored from session files. [#1668]

  • Fixed an issue that caused an IndexError when quitting glue in some cases. [#1657]

  • Fixed a bug that caused matplotlibrc files to not be ignored. [#1649]

  • Fixed a non-deterministic error that happened when closing the TableViewer. [#7310]

  • Fixed size of markers when value for size is out of vmin/vmax range. [#1609]

  • Fix a bug that caused viewer limits to be calculated incorrectly if inf/-inf values were present in the data. [#1614]

  • Fixed a bug which caused the y-axis in the PV slice viewer to be incorrect if the WCS could not be computed. [#1615]

  • Fixed a bug that caused the WCS of a PV slice to be incorrect if the user has selected a custom order of the axes of a cube in the image viewer. [#1615]

  • Fixed ticks on log x-axis in histogram viewer. [#7310]

  • Fixed a bug that led to poor performance when slicing through data cubes. [#1554]

v0.12.5 (2018-03-10)

  • Fixed a bug which caused the current slices to be lost when adding a second dataset to the image viewer. [#1581]

  • Fixed a bug when two datasets with a different number of dimensions were in an image viewer and a subset was created. [#1577]

  • Fixed issues when attempting to close a viewer with the delete key. [#1574]

  • Disabled default Matplotlib key bindings. [#1574]

  • Fix compatibility with Matplotlib 2.2. [#1566]

  • Fix compatibility with some versions of pytest. [#1520]

  • Fix calculation of dependent_axes to account for cases where there are some non-zero non-diagonal PC values. Previously any such values resulted in all axes being returned as dependent axes even though this isn't necessary. [#1552]

  • Avoid prompting users multiple times to merge data when dragging and dropping multiple data files onto glue. [#1564]

  • Improve error message in PV slicer when _slice_index fails. [#1536]

  • Fixed a bug that caused an error when trying to save a session that included an image viewer with an aggregated slice. [#1561]

  • Fixed a bug that caused an error in the terminal if creating a data viewer failed properly (with a GUI error message). [#1501]

  • Fixed a bug that caused performance issues when hiding all image layers from an image viewer. [#1557, #1562]

  • Fixed a bug that caused layers to not always be properly removed when deleting a row from the layer list. [#1502]

  • Make JSON circular reference errors more explicit. [#1529]

v0.12.4 (2018-01-09)

  • Improve plugin loading to be less sensitive to exact versions of installed dependencies for plugins. [#1487]

v0.12.3 (2017-11-14)

  • Fixed issues with PV slicer and spectrum viewer when changing axes in the parent image viewer.

v0.12.2 (2017-11-09)

  • Fix a bug when renaming tabs through the UI. [#1470]

  • Fix a bug that caused the 1D and 2D viewers to not update correctly when the numerical values in data were changed. [#1471]

  • Fix a bug that caused exporting of subsets to not work with integer data. [#1472]

v0.12.1 (2017-10-30)

  • Fix a bug that caused glue to crash when adding components to a dataset after closing a viewer that had that data. [#1460, #1464]

v0.12.0 (2017-10-25)

  • Show a GUI error message when restoring a session via drag-and-drop if session loading fails. [#1454]

  • Don't disable layer completely if it is not enabled, just disable checkbox. Also show warnings instead of layer style editor. [#1451]

  • Generalize registry for data/subset actions to replace the former single_subset_action registry (which applied only to single subset selections). Layer actions can now be registered with the @layer_action decorator. [#1396]

  • Added support for plotting vectors in the scatter plot viewer. [#1410]

  • Added glue plugins to the Version Information dialog. [#1427]

  • Added the ability to create fixed layout tabs. [#1403]

  • Fix selection in custom viewers. [#1453]

  • Fix a bug that caused the home/reset limits button to not work correctly. [#1452]

  • Fix a bug that caused the wrong layers to be enabled when mixing image and scatter layers and setting up links. [#1451]

  • Remove 'sep' from menu on Linux. [#1394]

  • Fixed bug in spectrum tool that caused the upper range in aggregations to be incorrectly calculated. [#1402]

  • Fixed icon for scatter plot layer when a colormap is used, and fix issues with viewer layer icons not updating immediately. [#1425]

  • Fixed dragging and dropping session files onto glue (this now loads the session rather than trying to load it as a dataset). Also now show a warning when the application is about to be reset to open a new session. [#1425, #1448]

  • Make sure no errors happen if making a selection in an empty viewer. [#1425]

  • Fix creating faceted subsets on Python 3.x when no dataset is selected. [#1425]

  • Fix issues with overlaying a scatter layer on an image. [#1425]

  • Fix issues with labels for categorical axes in the scatter and histogram viewers, in particular when loading viewers with categorical axes from session files. [#1425]

  • Make sure a GUI error message is shown when adding non-1-dimensional data to a table viewer. [#1425]

  • Fix issues when trying to launch glue multiple times from a Jupyter session. [#1425]

  • Remove the ability to define the color of a subset differ from that of a subset group it belongs to - this was virtually never needed but could cause issues. [#1426]

  • Fixed a bug that caused a previously disabled image subset layer to not become visible when shown again. [#1450]

  • Added the ability to rename tabs programmatically. [#1405]

v0.11.1 (2017-08-25)

  • Fixed bug that caused ModestImage references to not be properly deleted, in turn leading to issues/crashes when removing subsets from image viewers. [#1390]

  • Fixed bug with reading in old session files with a table viewer. [#1389]

v0.11.0 (2017-08-22)

  • Added splash screen. [#694]

  • Make file extension check case-insensitive. [#1275]

  • Fixed bug that caused table viewer to not update when adding components. [#1386]

  • Fixed loading of plain (non-structured) arrays from Numpy files. [#1314, #1385]

  • Disabled layer artists can no longer be selected to avoid any confusion. [#1367]

  • Layer artist icons can now show colormaps when appropriate. [#1367]

  • Fix behavior of data wizard so that it doesn't overwrite labels set by data factories. [#1367]

  • Add a status tip for all ROI selection tools. [#1367]

  • Fixed a bug that caused the terminal to not be available after resetting or opening a session. [#1366]

  • If a subset's visual properties are changed, change the visual properties of the parent SubsetGroup. [#1365]

  • Give an error if the user selects a session file when going through the 'Open Data Set' menu. [#1364]

  • Improved scatter plot viewer to be able to show points with color or size based on other attributes. Also added a 'line' style to make line plots, and added the ability to show error bars. [#1358]

  • Changed order of arguments for data exporters from (data, filename) to (filename, data). [#1251]

  • Added registry decorators to define subset mask importers and exporters. [#1251]

  • Get rid of QTimers for updating the data collection and layer artist lists, and instead refresh whenever a message is sent from the hub (which results in immediate changes rather than waiting up to a second for things to change). [#1343]

  • Made it possible to delay callbacks from the Hub using the Hub.delay_callbacks context manager. Also fixed the Hub so that it uses weak references to classes and methods wherever possible. [#1339]

  • Added a new method DataCollection.remove_link to match existing DataCollection.add_link. [#1339]

  • Fix a bug that caused no messages to be emitted when components were removed from Data objects, and add a new DataRemoveComponentMesssage. [#1339]

  • Fix a long-standing bug which caused performance issues after linking coordinate or derived components between datasets. [#1339]

  • Added a function is_equivalent_cid that can be used to determine whether two component IDs in a dataset are equivalent. [#1339]

  • The image contrast and bias can now be set with the left click as well as right click. [#1323]

  • Updated ComponentIDComboHelper so that it can work with single datasets that aren't necessarily attached to a DataCollection. [#1296]

  • Updated bundled version of echo to include fixes to avoid circular references, which in turn caused some callback functions to not be cleaned up. [#1281]

  • Rewrote the histogram, scatter, and image viewers to use the new state infrastructure. This significantly simplifies the actual histogram viewer code both in terms of number of lines and in terms of the number of connections/callbacks that need to be set up manually. [#1278, #1289, #1388]

  • Updated EditSubsetMode so that Data objects no longer have an edit_subset attribute - instead, the current list of subsets being edited is kept in EditSubsetMode itself. We also update the subset state only once on each subset group, rather than once per dataset, which avoids doing the same update to each dataset multiple times. [#1338]

  • Remove the ability to create a new viewer by right-clicking on the canvas, since this causes confusion when trying to control-click to paste in the IPython terminal. [#1342]

  • Make process_dialog more robust. [#1333]

  • Fix example of setting up a custom preferences pane. [#1326]

  • Fix a bug that caused links to not get removed if associated datasets were removed. [#1329]

  • Fixed a bug that meant that the table viewer did not update when a NumericalDataChangedMessage message was emitted. [#1378]

  • Added new combo helpers in glue.core.data_combo_helper which are similar to those in glue.core.qt.data_combo_helper but operate on SelectionCallbackProperty and are Qt-independent. [#1346]

  • Rewrote installation instructions. [#1330]

v0.10.4 (2017-05-23)

  • Fixed a bug that caused merged datasets to crash viewers (because the visible_components attribute returned an empty list). [#1288]

v0.10.3 (2017-04-20)

  • Fixed bugs with saving and restoring of various types of subset states. [#1285]

  • Fixed a bug that caused glue to not open when IPython 4.0 was installed. [#1287]

v0.10.2 (2017-03-22)

  • Fixed a bug that caused components that were linked to then disappear from drop-down lists of available components in new viewers. [#1270]

  • Fixed a bug that caused Data.find_component_id to return incorrect results when string components were present in the data. [#1269]

  • Fixed a bug that caused errors to appear in the console log after a table viewer was closed. [#1267]

  • Fixed a bug that caused error message dialogs to not work correctly with Qt4. [#1262]

  • Fixed a deprecation warning for pandas >= 0.19. [#1263]

  • Hide common Matplotlib warnings when min/max along an axis are equal. [#1268]

  • Fixed a bug that caused sessions with table viewers that had no subsets to not be restored correctly. [#1271]

v0.10.1 (2017-03-16)

  • Fixed compatibility with session files from before v0.8. [#1243]

  • Renamed package to glue-core, since glueviz is now a meta-package (no need for a new major version since this change should be seamless to users).

v0.10.0 (2017-02-14)

  • The GlueApplication.add_data and load_data methods now return the loaded data objects. [#1239]

  • Change default name of subsets to include the word 'Subset'. [#1234]

  • Removed ginga plugin from core package and moved it to a separate repository at https://github.com/ejeschke/glue-ginga.

  • Switch from using bundled WCSAxes to using the version in Astropy, and fixed an issue that caused the frame of the axes to be too thick. [#1231]

  • Make it possible to define a default index for DataComboHelper - this makes it possible for viewers to have three DataComboHelper and ensure that they default to different attributes. [#1163]

  • Deal properly with adding Subset objects to DataComboHelper. [#1163]

  • Added the ability to export data and subset from the data collection view via contextual menus. It was previously possible to export only the mask itself, and only to FITS files, but the framework for exporting data/subsets has now been generalized.

  • When hiding layers in the RGB image viewer, make sure the current layer changes to be a visible one if possible.

  • Avoid merging IDs when creating identity links. The previous behavior of merging was good for performance but made it impossible to undo the linking by un-glueing. Derived components created by links are now hidden by default. Finally, ComponentID objects now hold a reference to the first parent data they are used in. [#1189]

  • Added a decorator that can be used to avoid circular calling of methods (can occur when dealing with callbacks). [#1207]

  • Drop support for IPython 3.x and below, and make IPython and qtconsole into required dependencies. [#1145]

  • Added new classes that can be used to hold the state of e.g. viewers and other objects. These classes allow callbacks to be attached to various properties, and can be used to define logical relations between different attributes in a GUI-independent way.

  • Fix selections when using Matplotlib 2.x, PyQt5 and a retina display. [#1236]

  • Updated ComponentIDComboHelper to no longer store (cid, data) as the userData but instead just the cid (the data is now accessible via cid.parent). [#1212]

  • Avoid duplicate toolbar in dendrogram viewer. [#1213, #1237]

  • Fixed bug that caused the contrast to change for the incorrect layer in the RGB image viewer.

  • Fixed bug that caused coordinate information to be lost when merging datasets. The original behavior of keeping the coordinate information from the first dataset has been restored. [#1186]

  • Fix Data.update_values_from_data to make sure that original component order is preserved. [#1238]

  • Fix Data.components to return original component order, not alphabetical order. [#1238]

  • Fix significant performance bottlenecks with WCS coordinate conversions. [#1185]

  • Fix error when changing the contrast radio button the RGB image viewer mode, and also fix bugs with setting the range of values manually. [#1187]

  • Fix a bug that caused coordinate axis labels to be lost during merging. [#1195]

  • Fix a bug that caused tab names to not be saved and restored to/from session files. [#1241, #1242]

v0.9.1 (2016-11-01)

  • Fixed loading of session files made with earlier versions of glue that contained selections made in 3D viewers. [#1160]

  • Fixed plotting of fit on spectrum to make sure that the two are properly aligned. [#1158]

  • Made it possible to now create InequalitySubsetStates for categorical components using e.g. d.id['a'] == 'string'. [#1153]

  • Fixed a bug that caused selections to not propagate properly between linked images and cubes. [#1144]

  • Make last interval of faceted subsets inclusive so as to make sure all values in the faceted subset range end up in a subset. [#1154]

v0.9.0 (2016-10-10)

  • Fix serialization of celestial coordinate link functions. Classes inheriting from MultiLink should now call MultiLink.init with individual components (not grouped into left/right) then the create_links method with the components separated into left/right and the methods for forward/backward transformation. The original behavior can be retained by using the multi_link function instead of the MultiLink class. [#1139]

  • Improve support for spectral cubes. [#1075]

  • Allow link functions/helpers to define a category using the category= argument (which defaults to General), and make it possible to filter by category in the link editor. [#1141]

  • Only show the 'waiting' cursor when glue is doing something. [#1097]

  • Make sure that the scatter layer artist style editor is shown when overplotting a scatter plot on top of an image. [#1134]

  • Data viewers can now make layer_style_widget_cls a dictionary in cases where multiple layer artist types are supported. [#1134]

  • Fix compatibility of test suite with pytest 3.x. [#1116]

  • Updated bundled version of WCSAxes to v0.9. [#1089]

  • Fix compatibility with pre-releases of Matplotlib 2.0. [#1115]

  • Implement new widget with better control over exporting to Plotly. The preference pane for Plotly export has now been removed in favor of this new way to set the options. [#1057]

  • Renamed the ComponentIDComboHelper and ManualDataComboHelper append methods to append_data and the remove methods to remove_data, and added a new ComponentIDComboHelper.set_multiple_data method. [#1060]

  • Fixed reading of units from FITS and VO tables, and display units in table viewer. [#1135, #1137]

  • Make use of the QtPy package to deal with differences between PyQt4, PyQt5, and PySide, instead of the custom qt-helpers package. The glue.external.qt package is now deprecated. The get_qapp and load_ui functions are now available in glue.utils.qt. [#1018, #1074, #1077, #1078, #1081]

  • Avoid raising a (harmless) error when selecting a region in between two categorical components.

  • Added a new Data method, update_values_from_data, that can be used to replicate components from one dataset into another. [#1112]

  • Refactored code related to toolbars in order to make it easier to define toolbars and toolbar modes that aren't Matplotlib-specific. [#1085, #1120]

  • Added a new table viewer. [#1084, #1123]

  • Fix saving/loading of categorical components. [#1084]

  • Make it possible for tools to define a status bar message. [#1084]

  • Added a command-line option, --no-maximized, that prevents glue from opening up with the application window maximized. [#1093, #1126]

  • When opening multiple files in one go, if one of the files fails to read, the error will now indicate which file failed. [#1104]

  • Fixed a bug that caused new subset colors to incorrectly start from the start of the color cycle after loading a session. [#1055]

  • Fixed a bug that caused the functionality to execute scripts (glue -x) to not work in Python 3. [#1101, #1114]

  • The minimum supported version of Astropy is now 1.0, and the minimum supported version of IPython is now 1.0. [#1076]

  • Show world coordinates and units in the cube slicer. [#1059, #1068]

  • Fix errors that occurred when selecting categorical data. [#1069]

  • Added experimental support for joining on multiple keys in join_on_key. [#974]

  • Fix compatibility with the latest version of ginga. [#1063]

v0.8.2 (2016-07-06)

  • Implement missing MaskSubsetState.copy. [#1033]

  • Ensure that failing data factory identifier functions are skipped. [#1029]

  • The naming of pixel axes is now more consistent between data with 3 or fewer dimensions, and data with more than 3 dimensions. The naming is now always Pixel Axis ? where ? is the index of the array, and for datasets with 1 to 3 dimensions, we add a suffix e.g. [x] to indicate the traditional axes. [#1029]

  • Implemented a number of performance improvements, including for: the check of whether points are in polygon (points_inside_poly), the selection of polygonal regions in multi-dimentional cubes when the selections are along pixel axes, the selection of points in scatter plots with one or two categorical components for rectangular, circular, and polygonal regions. [#1029]

  • Fix a bug that caused multiple custom viewer classes to not work properly if the user did not override _custom_functions (which was private). [#810]

  • Make sure histograms are updated if only the attribute changes and the limits and number of bins stay the same. [#1012]

  • Fix a bug on Windows that caused drag and dropping files onto the glue application to not work. [#1007]

  • Fix compatibility with PyQt5. [#1015]

  • Fix a bug that caused ComponentIDComboHelper to not take into account the numeric and categorical options in init. [#1014]

  • Fix a bug that caused saving of scatter plots to SVG files to crash. [#984]

v0.8.1 (2016-05-25)

  • Fixed a bug in the memoize function that caused selections using ElementSubsetState to fail when using views on the data. [#1004]

  • Explicitly set the icon size for the slicing playback controls to avoid issues when using a mix of retina and non-retina displays. [#1005]

  • Fixed a bug that caused add_datasets to crash if datasets was a list of lists of data, which is possible if a data factory returns more than one data object. [#1006]

v0.8 (2016-05-23)

  • Add support for circular and polygonal spectrum extraction. [#994, #1003]

  • Fix compatibility with latest developer version of Numpy which does not allow non-integer indices for arrays. [#1002]

  • Add a new method add_data to application instances. This allows for example additional data to be passed to glue after being launched by qglue. [#993]

  • Add playback controls to slice widget. [#971]

  • Add tooltip for data labels so that long labels can be more easily inspected. [#912]

  • Added a new helper class AttributeLimitsHelper to link widgets related to setting limits and handle the caching of the limits as a function of attribute. [#872]

  • Add Quit menu item for Linux and Windows. [#926]

  • Refactored the window for sending feedback to include more version information, and also to have a separate form for feedback and crash reports. [#955]

  • Add log= option to ValueProperty and remove mapping= option. [#965]

  • Added helper classes for ComponentID and Data combo boxes. [#891]

  • Improved new component window: expressions can now include math or numpy functions by default, and expressions are tested on-the-fly to check that there are no issues with syntax or undefined variables. [#956]

  • Fixed D3PO export when using Python 3. [#989]

  • Fixed display of certain error messages when using Python 3. [#989]

  • Add an extensible preferences window. [#988]

  • Add the ability to change the foreground and background color for viewers. [#988]

  • Fixed a bug that caused images to appear over-pixellated on the edges when zooming in. [#1000]

  • Added an option to control whether warnings are shown when passing large data objects to viewers. [#999]

v0.7.3 (2016-05-04)

  • Remove icons for actions that appear in contextual menus, since these appear too large due to a Qt bug. [#911]

  • Add missing find_spec for import hook, to avoid issues when trying to set colormap. [#930]

  • Ignore extra dimensions in WCS (for instance, if the data is 3D and the header is 4D, ignore the 4th dimension in the WCS). [#935]

  • Fix a bug that caused the merge window to appear multiple times, make sure that all components named PRIMARY get renamed after merging, and make sure that the merge mechanism is also triggered when opening datasets from the command-line. [#936]

  • Remove the scrollbars added in v0.7.1 since they cause issues on certain systems. [#953]

  • Fix saving of ElementSubsetState to session files. [#966]

  • Fix saving of Matplotlib colormaps to session files. [#967]

  • Fix the selection of the default viewer based on the data shape. [#968]

  • Make sure that no combo boxes get resized based on the content (unless strictly needed). [#978]

v0.7.2 (2016-04-05)

  • Fix a bug that caused string columns in FITS files to not be read correctly, and updated coerce_numeric to give a ValueError for string columns that can't be convered. [#919]

  • Make sure main window title is set. [#914]

  • Fix issue with FITS files that are missing an END card. [#915]

  • Fix a bug that caused values in exponential notation in text fields to lose a trailing zero (e.g. 1.000e+10 would become 1.000e+1). [#925]

v0.7.1 (2016-03-30)

  • Fix issue with small screens and layer and viewer options by adding scrollbars. [#902]

  • Fixed a failure due to a missing Qt import in glue.core.roi. [#901]

  • Fixed a bug that caused an abort trap if the filename specified on the command line did not exist. [#903]

  • Gracefully skip vector columnns when reading in FITS files. [#896]

  • Change default gray color to work on black and white backgrounds. [#906]

  • Fixed a bug that caused the color in the scatter and histogram style editors to not show the correct initial color. [#907]

v0.7 (2016-03-10)

  • Python 2.6 is no longer supported. [#804]

  • Added a generic QColorBox widget to pick colors, and an associated connect_color helper for callback properties. [#864]

  • Added a generic QColormapCombo widget to pick colormaps.

  • The artist_container argument to client classes has been renamed to layer_artist_container. [#814]

  • Added documentation about how to use layer artists in custom Qt data viewers. [#814]

  • Fixed missing newline in Data.str. [#877]

  • A large fraction of the code has been re-organized, which may lead to some imports in config.py files no longer working. However, no functionality has been removed, so this can be fixed by updating the imports to reflect the new locations.

    In particular, the following utilities have been moved:

    glue.qt.widget_properties | glue.utils.qt.widget_properties glue.qt.decorators | glue.utils.qt.decorators glue.qt.qtutil.mpl_to_qt4_color | glue.utils.qt.colors.mpl_to_qt4_color glue.qt.qtutil.qt4_to_mpl_color | glue.utils.qt.colors.qt4_to_mpl_color glue.qt.qtutil.pick_item | glue.utils.qt.dialogs.pick_item glue.qt.qtutil.pick_class | glue.utils.qt.dialogs.pick_class glue.qt.qtutil.get_text | glue.utils.qt.dialogs.get_text glue.qt.qtutil.tint_pixmap | glue.utils.qt.colors.tint_pixmap glue.qt.qtutil.cmap2pixmap | glue.utils.qt.colors.cmap2pixmap glue.qt.qtutil.pretty_number | glue.utils.qt.PropertySetMixin glue.qt.qtutil.Worker | glue.utils.qt.threading.Worker glue.qt.qtutil.update_combobox | glue.utils.qt.helpers.update_combobox glue.qt.qtutil.PythonListModel | glue.utils.qt.python_list_model.PythonListModel glue.clients.tests.util.renderless_figure | glue.utils.matplotlib.renderless_figure glue.core.util.CallbackMixin | glue.utils.misc.CallbackMixin glue.core.util.Pointer | glue.utils.misc.Pointer glue.core.util.PropertySetMixin | glue.utils.misc.PropertySetMixin glue.core.util.defer | glue.utils.misc.defer glue.qt.mime.PyMimeData | glue.utils.qt.mime.PyMimeData glue.qt.qtutil.GlueItemWidget | glue.utils.qt.mixins.GlueItemWidget glue.qt.qtutil.cache_axes | glue.utils.matplotlib.cache_axes glue.qt.qtutil.GlueTabBar | glue.utils.qt.helpers.GlueTabBar

    [#827, #828, #829, #830, #831]

    glue.clients.histogram_client | glue.viewers.histogram.client glue.clients.image_client | glue.viewers.image.client glue.clients.scatter_client | glue.viewers.scatter.client glue.clients.layer_artist.LayerArtist | glue.clients.layer_artist.MatplotlibLayerArtist glue.clients.layer_artist.ChangedTrigger | glue.clients.layer_artist.ChangedTrigger glue.clients.layer_artist.LayerArtistContainer | glue.clients.layer_artist.LayerArtistContainer glue.clients.ds9norm | glue.viewers.image.ds9norm glue.clients.profile_viewer | glue.plugins.tools.spectrum_viewer.profile_viewer glue.clients.util.small_view | glue.core.util.small_view glue.clients.util.small_view_array | glue.core.util.small_view_array glue.clients.util.visible_limits | glue.core.util.visible_limits glue.clients.util.tick_linker | glue.core.util.tick_linker glue.clients.util.update_ticks | glue.core.util.update_ticks glue.qt.widgets.histogram_widget | glue.viewers.histogram.qt glue.qt.widgets.scatter_widget | glue.viewers.scatter.qt glue.qt.widgets.histogram_widget | glue.viewers.image.qt glue.qt.widgets.table_widget | glue.viewers.table.qt glue.qt.widgets.data_viewer | glue.viewers.common.qt.data_viewer glue.qt.widgets.mpl_widget | glue.viewers.common.qt.mpl_widget glue.qt.widgets.MplWidget | glue.viewers.common.qt.mpl_widget.MplWidget glue.qt.glue_toolbar | glue.viewers.common.qt.toolbar glue.qt.custom_viewer | glue.viewers.custom.qt

    [#835]

    glue.qt.glue_application.GlueApplication | glue.app.qt.application.GlueApplication glue.qt.plugin_manager.QtPluginManager | glue.app.qt.plugin_manager.QtPluginManager glue.qt.feedback.FeedbackWidget | glue.app.qt.feedback.FeedbackWidget glue.qt.widgets.glue_mdi_area | glue.app.qt.mdi_area

    glue.qt.widgets.terminal | glue.app.qt.terminal glue.qt.qt_roi | glue.core.qt.roi glue.core.qt.simpleforms | glue.core.qt.simpleforms glue.qt.widgets.style_dialog | glue.core.qt.style_dialog glue.qt.layer_artist_model | glue.core.qt.layer_artist_model glue.qt.widgets.custom_component_widget | glue.dialogs.custom_component.qt glue.qt.link_editor | glue.dialogs.link_editor.qt glue.qt.widgets.subset_facet | glue.dialogs.subset_facet.qt glue.qt.mouse_mode | glue.viewers.common.qt.mouse_mode glue.qt.data_slice_widget | glue.viewers.common.qt.data_slice_widget glue.qt.widgets.layer_tree_widget | glue.app.qt.layer_tree_widget glue.qt.widgets.message_widget | glue.core.qt.message_widget glue.qt.widgets.settings_editor | glue.app.qt.settings_editor glue.qt.qtutil.data_wizard | glue.dialogs.data_wizard.qt.data_wizard glue.qt.mime | glue.core.qt.mime glue.qt.qtutil.ComponentIDCombo | glue.core.qt.component_id_combo glue.qt.qtutil.RGBEdit | glue.viewers.image.qt.rgb_edit.RGBEdit glue.qt.qtutil.GlueListWidget | glue.core.qt.mime.GlueMimeListWidget glue.qt.qtutil.load_ui | glue.utils.qt.helpers.load_ui

    glue.qt.qtutil.icon_path | glue.icons.icon_path glue.qt.qtutil.load_icon | glue.icons.qt.load_icon glue.qt.qtutil.symbol_icon | glue.icons.qt.symbol_icon glue.qt.qtutil.layer_icon | glue.icons.qt.layer_icon glue.qt.qtutil.layer_artist_icon | glue.icons.qt.layer_artist_icon glue.qt.qtutil.GlueActionButton | glue.app.qt.actions.GlueActionButton glue.qt.qtutil.action | glue.app.qt.actions.action glue.qt.qt_backend.Timer | glue.backends.QtTimer

    [#845]

  • Improved under-the-hood creation of ROIs for Scatter and Histogram Clients. [#676]

  • Data viewers can now define a layer artist style editor class that appears under the list of layer artists. [#852]

  • Properties of the VisualAttributes class are now callback properties. [#852]

  • Add glue.utils.qt.widget_properties.connect_value function which can take an optional value_range and log option to scale the Qt values to a custom range of values (optionally in log space). [#852]

  • Make list of data viewers sorted alphabetically. [#866]

v0.6 (2015-11-20)

  • Added experimental support for PyQt5. [#663]

  • Fix glue -t option. [#791]

  • Updated glue-deps to show PyQt/PySide versions. [#796]

  • Fix bug that caused viewers to be restored with the wrong size. [#781, #783]

  • Fixed compatibility with the latest stable version of ginga. [#797]

  • Prevent axes from moving around when data viewers are being resized, and instead make the absolute margins between axes and figure edge fixed. [#745]

  • Fixed a bug that caused image plots to not be updated immediately when changing component, and fixed a bug that caused data and attribute combo boxes to not update correctly when showing multiple datasets in an ImageWidget. [#755]

  • Added tests to ensure that we remain backward-compatible with old session files for the FITS and HDF5 factories. [#736, #748]

  • When a box has been drawn to extract a spectrum from a cube, the box can then be moved by pressing the control key and dragging it. [#707]

  • Refactored ASCII I/O to include more Astropy table formats. [#762]

  • When saving a session, if no extension is specified, the .glu extension is added. [#729]

  • Added a GUI plugin manager in the 'Plugins' menu. [#682]

  • Added an option to specify whether to use an automatic aspect ratio for image data or whether to enforce square pixels. [#717]

  • Data factories can now be given priorities to determine which ones should take precedence in ambiguous cases. The set_default_factory and get_default_factory functions are now deprecated since it is possible to achieve this solely with priorities. [#719]

  • Improved cube slider to include editable slice value as well as first/previous/next/last buttons, and improved spacing of sliders for 4+ dimensional cubes. [#690, #734]

  • Registering data factories should now always be done with the @data_factory decorator, and not by adding functions to __factories__, as was possible in early versions of Glue. [#724]

  • Made the Excel spreadsheet reader more robust: column headers no longer have to be strings, and the reader no longer expects the first sheet to be called 'Sheet1'. All sheets are now read by default. Datasets are now named as filename:sheetname. [#726]

  • Fix compatibility with IPython 4. [#733]

  • Improved reading of FITS files - all HDUs are now read by default. [#704, #732]

  • Added new widget property classes, for combo boxes (based on label instead of data) and for tab widgets. [#752]

  • Improved reading of HDF5 files - all datasets in an HDF5 file are now read by default. [#747]

  • Fix a bug that caused images to not be shown at full resolution after resizing. [#768]

  • Fix a bug that caused the color of an extracted spectrum to vary if extracted multiple times. [#743]

  • Fixed a bug that caused compressed image HDUs to not be read correctly. [#767]

  • Added two new settings settings.SUBSET_COLORS and settings.DATA_COLOR that can be used to customize the default subset and data colors. [#742]

v0.5.3 (unreleased)

  • Fix selection in scatter plots when categorical data are present. [#727]

v0.5.2 (2015-08-13)

  • Fix loading of plugins with setuptools < 11.3 [#699]

  • Fix loading of plugins when using glue programmatically rather than through the GUI [#698]

  • Backward-compatibility fixes after refactoring data_factories [#696, #703]

v0.5.1 (2015-07-06)

  • Fixed treatment of newlines when copying detailed error. [#687]

  • Fix a bug that prevented sessions from being saved with embedded files if component units were Astropy units. [#686]

  • Users should now press 'control' to drag rather than re-define subsets. [#689]

v0.5 (2015-07-03)

  • Improvements to the PyQt/PySide wrapper module (now maintained in a separate repository). [#671]

  • Fixed broken links on website. [#678]

  • Added the ability to discover plugins via entry points. [#677]

  • Added the ability to include float and string UI elements in custom viewers. [#653]

  • Added an option to bundle all data in .glu session files. [#661]

  • Added a menu_plugin registry to add custom tools to the registry. [#644]

  • Support for 'lazy-loading' plugins which means their import is deferred until they are needed. [#590]

  • Support for connecting custom importers. [#593]

  • qglue now correctly interprets HDUList objects. [#598]

  • Internal improvements to organization of domain-specific code (such as the Astronomy coordinate conversions and ginga data viewer). [#488, #585]

  • Astronomy coordinate conversions now include more coordinate frames. [#578]

  • load_ui now checks whether .ui file exists locally before retrieving it from the glue.qt.ui sub-package. [#599]

  • Improved interface for adding new components, with syntax highlighting and tab-completion. [#572, #575]

  • Improved error/warning messages. [#582]

  • Miscellaneous bug fixes. [#637, #636, #608]

  • The error console log is now available through the View menu

  • Improved under-the-hood handling of categorical ROIs. [#601]

  • Fixed compatibility with Python 2.6. [#540]

  • Python 3.x support is now stable. [#576]

  • Fixed the ability to copy detailed error messages. [#675]

  • Added instructions on how to make a fully-customized Qt viewer. [#619]

  • Fixes to the ginga plugin to support the latest version. [#584, #656]

  • Added the ability to drag circular, rectangular, and lasso selections. [#657]

  • Added the ability to reset a session. [#630]

v0.4 (Released December 22, 2015)

Release Highlights:

  • Introduced custom viewers
  • Ginga-based image viewer
  • Experimental Python 3.x support

Other Notes

  • Better testing for support of optional dependencies
  • Refactored spectrum and position-velocity features from the Image widget into plugin tools
  • Adopted contracts for contracters to add optional runtime type checking
  • Added ability to export collapsed cubes as 2D fits files
  • More flexible data parsing in qglue utility
  • Numerous bugfixes