
Chaco CHANGELOG
===============

Release 5.0.0
-------------

New features/Improvements

* Add rectangular selection tool (#482)
* Add missing property index_range to 1D plots (#491)
* Support renderer traits (#514)

Removals/Deprecations

* Remove uses of PyArray_FromDims (#503)
* Remove unused _speedups module (#504)
* Remove SelectableOverlayPlotContainer and references to it (#574)
* Remove chaco.datamapper and subdivision code (#577)
* Remove serializable module and its tests (#598)
* Delete codecov yaml configuration file (#622)
* Remove examples for the vtk backend in chaco (#645)
* Kill chaco.shell and related code (#667)
* Remove objects/modules which explicitly raised a deprecation warning (#670)
* Remove "chaco.scatter_markers" module (#677)
* Delete "chaco.chaco_version" (#678)
* Remove deprecated "ColorMapper._map" method (#684)
* Delete sample_template.plt (#685)
* Remove ChacoPlotItem / ChacoPlotEditor (#688)
* Delete scalar_image_function_inspector_old.py (#689)
* Officially deprecated VariableSizeScatterPlot (#691)
* Remove PlotFrames (#692)
* Delete "test_style.pss" (#697)
* Remove plot_template.py (#702)
* Remove a couple redundant old files (#711)
* Delete PopupablePlot (#717)

Fixes

* Fix typo in the error name (#484)
* Fix attempts to get the shape attribute of a list or tuple. (#487)
* Fix scrollbar demo and update docstring (#489)
* Fix stacked bar plot example, by using the correct starting_value (#498)
* Limit the min zoom out factor along x axis to prevent date range error (#500)
* Do not expose 'auto' for infinite series (#501)
* Fix zoomout issues (#505)
* Fix zoom not working with contour plots (#506)
* Fix and clean up multiaxis.py example (#513)
* Enforce underscore for click command (#523)
* Handle index=None in ScatterInspector (#540)
* Have ArrayDataSource.get_data return empty(shape=0,)), not 0.0 if _data is None (#578)
* Return correct sized tuples of all 0s not None if image plot resized too small (#589)
* Resolve the NotifierNotFound error in testsuite (#601)
* Catch nans before they cause crash in auto_ticks (#636)
* Fix windows/pyqt test_dont_crash_on_click failure (#663)
* Use draw_marker_at_points if possible otherwise use draw_path_at_points in ColormappedScatterPlot (#672)
* Fix a couple of demos (#676)
* Use plot_range_event (aka event.new) not just event in stock_prices (#728)
* Fix broken test and handle case when _data is None in ArrayDataSource.get_data_mask() (#731)
* Replace [] default for data with None (#734)

Documentation/examples

* Documentation Refactor (#462)
* Setup online redirect and proper index page for docset (#517)
* Replace all jet color map use in examples with viridis (#557)
* Update various comments and docstrings (#567)
* Clean up updates for basic_elements docs pages (#570)
* Use Enthought Sphinx Theme if available. (#571)
* Fix broken image links on quickstart page (#588)
* Replace handmade api docs with autogenerated api docs (#637)
* Miscellaneous documentation fixes/changes (#642)
* Add module doc string for chaco.api (#649, #665)
* Use #: instead of # when needed (#650)
* Update modules_and_classes.rst (#652)
* Remove annotated examples from the usermanual (#653)
* Use sphinx todo for currently empty sections of docs (#654)
* Remove optparse from example (#655)
* Delete the quickstart page from the docs (#668)
* Remove references to chaco.shell from the documentation (#669)
* Update van der waal example (#680)
* Remove scipy tutorial content (#681)
* Remove chaco_talk_apr_2008 from docs (#682)
* Update hyetograph example (#687)
* Remove unused images from codebase (#712)
* Organize annotated examples (#721)
* Link to "how do i", not "faq", from home page (#722)
* Matplotlib to chaco cheatsheet in docs (#723)
* Contribute examples to etsdemo (#751)

Maintenance

* Import from traits.api instead of from traits.has_traits (#509)
* Remove commented code (#511, #556, #582, #647)
* Drop Python < 3.6 support (#554, #555)
* Remove redundant 'control' in ZoomTool (#565)
* Clean up style, fix warnings and broken links in tutorials/examples/faq (#568)
* Update copyright year in license.txt (#569)
* Remove EOF file markers (#579)
* Remove unnecessary unittest.main calls in tests (#581)
* Replace on_trait_change with observe (#585, #590, #591, #625, #630)
* Remove dummy return statements (#592, #593, #594)
* Run black on the codebase (#599)
* Remove outdated coverage badge (#623)
* Use requires_redraw when possible (#626)
* Deal with __getstate__ methods (#633)
* Dont alias traitsui.api as tui (#634)
* Use api modules for ETS packages where possible (#643)
* Remove unnecessary print statements (#646)
* Use @property decorator instead of property function (#651)
* Its TraitsUI, not Traits UI (#656)
* Remove unnecessary uses of "use_draw_order" (#661)
* Remove all uses/definitions of use_draw_order (#671)
* Import color palette from chaco.api directly (#675)
* Remove backwards compatibily imports from enable (#679)
* Move tests in "tests_with_backend" submodule into "tests" submodule (#683)
* Rename test so it is discovered by unittest discover (#693)
* Cleanup License files (#696)
* Update "super" usage (#703, #706, #725)
* Use a plot default method instead of overriding the init method in examples (#704, #709)
* Replace custom "assert_raises" with "unittest.TestCase.assertRaises" (#705)
* Concatenate change logs (#710)
* Re-export PolarLineRenderer and PolarMapper from chaco.api (#732)
* Add editable option to ci install command (#733)
* Remove calls to Component._draw_component (#737)
* Add new chaco.plots submodule (#738)
* Use mock through unittest (#740)
* Consolidate overlays into "chaco.overlays" (#741, #786)
* Replace bg_color with bgcolor (#742)
* Revive ScalyPlot (#744)
* Add/Update copyright headers (#755)
* Plot Containers Refactor (#757, #758, #764)
* Remove all definitions / uses of _draw_component (#743, #772)

Build/CI

* Update edm and install/config scripts (#492)
* Use Cython to build extension modules (#502)
* Remove Python 2.7, 3.5 testing, add PyQt 5 (#524)
* Add source click option used on cron jobs to install ets packages from source (#532)
* Switch on default warning flag for CI test command (#537)
* Use PySide2 from EDM instead of PyPI and Use the latest EDM version (3.0.1) (#538)
* Disable macOS builds on Travis CI (#543)
* Fix cron job not installing additional dependencies (#544)
* Add ci command for building documentation (#566)
* Run flake8 on CI but ignore all existing errors (#600)
* Add GitHub Actions CI workflow (#631)
* Import version from installed package if the file doesnt exist (#644)
* Skip test_dont_crash_on_click on windows/pyqt (#666)
* Cleanup ci module and setup (#695)
* Unskip no longer failing test (#714)
* Add pyproject.toml specifying numpy and cython as build deps (#730, #747, #779)

Release 4.8.0
-------------

New features/Improvements

* Refactor DataPrinter to add _build_text_from_event method (PR #450)
* Simplify controlling text of ImageInspectorOverlay (PR #431)
* 2D segment and text scatter plot types (PR #407)
* Set up Windows testing under AppVeyor (PR #445)
* Add option for aligning label in index direction in TextPlot1D (PR #430)

Fixes

* Fix a test that fails with NumPy 1.16.x (PR #471)
* Fix missing imports of SegmentPlot and TextPlot (PR #470)
* Fix circular imports in toolbar_plot, transform_color_mapper (PR #469)
* Fix deprecated logger.warn uses (PR #458)
* Fix DataBox resizing bug (PR #456)
* Do not render quiver if there is no point (PR #424)
* Use single comma-separated trait names in on_trait_change, not multiple
  arguments (PR #397)

Documentation/examples

* Add documentation for some tools (PR #451)
* Remove erroneous `label_rotation` comment (PR #447)
* Add scatter inspector example (PR #434)
* Fix float indices in Spectrum demo (PR #427)
* Fix world_map demo (PR #423)
* Fix up create_plot_snapshots script (PR #421)
* Docstring for ArrayPlotData.{set_data,update_data} (PR #399)

Maintenance

* Fix test that fails with Numpy 1.16 (PR #471)
* Update Travis CI configuration to be compatible with Ubuntu Xenial (PR #452)
* Update unittest imports (PR #446)
* Address DeprecationWarnings (PR #441)
* Use unittest-style tests (PR #440)
* Run testsuite on macOS and Python 3.6 (PR #442)
* Use standard Sphinx extensions for trait documenting (PR #436)
* Update Cython generated code to support Python 3.7 (PR #433)
* Skip DataFramePlotData tests if Pandas not installed (PR #422)

Release 4.7.2
-------------

Fixes

* Ensure contiguous inputs to points_in_polygon (#409 & #410)
* Handle multiple plots in LegendHighlighter (#403)
* Alias six.moves as sm (#401)
* Respect visibility in the LegendHighlighter (#402)
* Fix use of itertools.chain() (#394)

Release 4.7.1
-------------

New features/Improvements

* Add a inspector_event attribute to ScatterInspector to get 
  notifications when both (un)hovering or (de)selecting (PR#395).

Fixes

* Avoid datetime issue on Windows 10 (PR#387)
* Fix doc build (PR#384)
* Upcast to int_ instead of int64 to avoid bincount issue (PR#383)

Release 4.7.0
-------------

New features/Improvements

* Add DataFramePlotData class (PR#367).
* Allow user control over axis title angle (PR#363).

Fixes

* Update raise statement to be Python 3 compatible (PR#360).
* Fix missing color bar when direction is flipped (PR#341).

Maintenance

* Support Python 3 without 2to3 (PR#369).
* Update BarPlot documentation (PR#362).
* Use EDM for CI testing (PR#365).
* Address warnings coming from recent versions of Numpy (PR#350).


Release 4.6.1
-------------

Fixes

 * Copy over HOME value to git environment (PR#342).
 * Fix issue with setup.py that prevent correct versioning on non-git checkouts
   (PR#337).


Release 4.6.0
-------------

New features/Improvements

 * Fixes and improvements to contour plots: now can use non-uniformly sampled
   grids and have masked regions (PR#326).
 * Added MinorPlotAxis (PR#288).
 * Improved gather points for line plots (PR#318).
 * Added line plot downsampling via Largest Triangle Three Buckets
   algorithm (PR#317).
 * Added Dash/Zeal docset generation (PR#194).
 * Python 3 support (PR#301).
 * Use set_bounds for Zoom to reduce number of events fired (PR#233).
 * Added more color maps and a DiscreteColorMap class (PR#275).
 * A new base "1D plot" class introduced for handling one-dimensional plots,
   including refactoring the existing Jitterplot and adding 1D scatterplot
   variants that render markers, lines or text (PR#209).
 * Replaced chaco.base.bin_search by numpy.searchsorted-based routine for
   5x speedup and remove use of zip in chaco.base.arg_find_runs in favour of
   column_stack for 10x speedup in bad cases (PR#263).
 * `ImagePlot` refactored to clarify transformation applied to images and allow
   easier reuse of transformations in subclasses (PR#147).

Fixes

 * Fixed issues with contour plots on Python 3.5 (PR#329 and PR#332).
 * Fixed issue with diff of boolean arrays on newer NumPy versions (PR#329).
 * Fixed occasional IOError crashes in spectrum demo (PR#323).
 * Fixed issue with range zoom selection being non-transparent (PR#309).
 * Fixed lasso selection for newer NumPy (PR#307).
 * Fixed timescale tests and calendar timescales (PR#298).
 * Fixed selection alpha for line scatterplot (PR#287).
 * Fixed undefined variable error in DataLabel (PR#282).
 * Fixed sign inversion bug in Base1DMapper (PR#222).
 * Fixed default position attribute in BetterZoom tool (PR#241).
 * Workaround RuntimeWarnings from nanmin and nanmax in ImageData.get_bounds
   (PR #242).

Maintenance

 * Updated install instructions and quick start guide (PR#292).
 * Removed special casing of powers of 2 in tick generation (PR#314).
 * Added code coverage notification via codecov (PR#297).
 * Fixed broken documentation URLs (PR#270).
 * Use containers for Travis CI (PR#276).
 * Automatic PEP386-compliant version numbering (PR#269).
 * More comprehensive testing for AbstractDataSource subclasses. That
   includes ArrayDataSource, FunctionDataSource, GridDataSource, ImageData,
   MultiArrayDataSource (PR#244).


What's new in Chaco 4.5.0
-------------------------

Change summary since 4.4.1

New features/Improvements

 * Added perceptual colormaps by Matteo Niccoli, Dave Green and Kenneth Moreland.
 * Added `asynchronous_updates.py` demo that shows a pattern for generating
   expensive plots while keeping the interface responsive (PR#170).
 * Speeded up by 10x the data mappers of the `GridMapper` class (mapping of 2D data
   to/from screen space).


Fixes

 * Restored fast renderers for scatterplots that were unintentionally removed in
   PR#101 (PR#175).
 * Make the `alpha` attribute of scatter plots work as intended (PR#164).
 * Resume running test for empty container that has been skipped (PR#190).
 * Improved handling of missing or empty data in scatterplot (PR#210)
 * Avoid a NumPy crash when using a data source of a unicode array (PR#213).
 * PanTool with `restrict_to_data` selected works with empty data sources
   (PR#215).
 * RangeSelection properly clips bounds when leaving selection area (PR#217).
 * Fix white gap between image border and image (PR#219).
 * Fix redraw color mapped image plot when color mapper updates (PR#221)
 * Fix behaviour of mappers when stretch_data trait is False (PR#227)
 * ColormappedScatterplot now redraws when colour map’s updated event fires (PR#230)
 * Speed improvements for scatter plots with lots of points (PR#234)


Maintenance

 * Added unit tests for ColormappedScatterplot (PR#231).


Release 4.4.1
-------------
This release contains a lot of enhancements and bug fixes mostly to the OOP API of Chaco but also its shell mode.


Change summary since 4.3.0

New features

 * Improved ArrayPlotData to support changing multiple arrays without triggering a re-plot after each update. This
   prevents the plot from being temporarily out of synch, which is important if the index and the values are both
   changed to new values with different shapes (PR#124).
 * Added control of the maximum width of a tick label. Provided that hook to the TextBoxOverlay (PR#128).
 * Added control to generate fixed aspect ratio grid mappers (PR#129). This allows various 2D plots to control the
   shape of the pixels in an image.

Enhancements

 * Improved the display of multi-word titles (PR#148).
 * Minor improvements to the documentation (PR#134, PR#118).
 * Made the cmap_image_plot caching more efficient and faster in large data situations (PR#123).
 * Improved support for exporting to multipage PDF (PR#109) and drawing in landscape orientation (PR#115).
 * Added control over whether a border for an overlay should be drawn (PR#116).
 * Made LineSegmentTool work with BasePlot2D (PR#121).
 * TextBoxOverlay now exposes the text color as a top level trait (PR#120).
 * Added Travis-CI support for python 2.6 and 2.7 (PR#136, PR#145, PR#146). Github now displays the status inside
   each Pull Requests as well as in the README.rst on the project github landing page.

Fixes

 * Fixed clipping issue when exporting plot to SVG (PR#111) and PDF (PR#109).
 * Fixed export to png, bmp, jpg formats in the shell mode (PR#149).
 * Removed unexpected zoom when panning if the pan tool has restrict_to_data set to True and the plot has nonlinear
   axes (PR#150).
 * Fixed a few of failing unit tests (PR#143).
 * Fix sort_order bug (PR#141, issue#119).


Chaco 4.2.0 / Chaco 4.3.0
=========================

Enhancements
------------

 * AbstractPlotData and subclasses now implement an update_data() method which
   updates the data whilst firing only one update event.

Fixes
-----

 * Fixed UnboundLocalError in the Plot class when attempting to create a data
   source from an array of unsupported shape.
 * DataRange2D.reset and DataRange2D.refresh now work properly by operating on
   xrange and yrange, like the other settings operations.


Chaco 4.1.0
===========

Enhancements
------------

 * chaco.shell supports the Qt backend (works with IPython >= 0.12)

Fixes
-----

 * chaco.shell package updated to work with IPython >= 0.11

Chaco 3.3.2 (Oct 15, 2010)
==========================

Enhancements
------------

 * Adding hold and connectedhold render styles to FilledLinePlot
 * New FunctionImageData class which is similar to FunctionDataSource
 * Replacing all gc.save_state()/gc.restore_state() calls in Chaco with
   the new GraphicsContext context handler, using "with gc:"
 * New Xray Plot example
 * Adding Spectrum Waterfall example

Fixes
-----

 * Fixing some commented-out position traits handlers in BaseXYPlot
 * Fixing MultiLinePlot's data listener


Chaco 3.3.0 (Feb 24, 2010)
==========================

Enhancements
------------

There has been a lot of work going on in Chaco since the last release.  While
there haven't been any big new pieces built out, a lot of things have been
improved across the board.

 * Added new ToolbarPlot class which is similar to Plot, but provides a toolbar
 * Added toolbar button to copy plot data to the clipboard to the default plot toolbar
 * Plot toolbar buttons now can have labels
 * Added BetterZoom tool which is more feature rich than the SimpleZoom tool, including key bindings and configurable zoom levels.  In the next release, hopefully this will supplant or be merged with the SimpleZoom.
 * Added BetterSelectingZoom tool, based on the ZoomTool, but allows for the user to draw a zoom region
 * ScatterPlot now has a Callable attribute for the function which renders the markers. This allows for each point to be rendered differently
 * Added legend highligher tool which adds a click-to-highlight interaction to the legend
 * Added range selection tool for use with 2D image plots
 * Added a legend() command to the Chaco shell.
 * Added text color support to legends.
 * Made the PlotEditor toolkit-indepedent
 * Changed the RangeSelection tool so that the selection_completed event is fired whenever the user drags a completed selection around.


Fixes
-----

There have been a lot of minor fixes on a variety of classes as well.  A
constant push has been made to reduce the reliance of direct imports on wx,
so that users on Qt will not get any import warnings or errors.  Some of
issues that have been fixed are:

 * BarPlot now respects the fillcolor alpha value
 * FilledLinePlot now draws black lines. Previously lines would be drawn for any color, except black.
 * Fixed placement of title when orientation='top'
 * Fixed fencepost issue with generating xbounds and ybounds in Plot.img_plot().  Now xbounds and ybounds are generated with N+1 points along their respective dimension.  If the user supplies an array of xs, ys, then they are expected to have length (N+1).  This may break some existing code, but that's a Good Thing because it means the existing code wasn't quite doing the right thing anyways.
 * Wrapped a lot of direct imports of wx, so that users with only Qt will not see any import errors.
 * Fixed a bug in horizontal and vertical plot containers wherein fixed_preferred_size was not being respected during layout.
 * Fixed the correlation plot example to be more user-friendly.
 * Fixed incorrect firing of the 'updated' event and the handling of the 'track' setting in the DataRange1D class.


One final note is that the "chaco2" legacy backwards compatibility package will
be removed by the next release.  If you have any code that imports from
"chaco2" and the DeprecationWarnings haven't been sufficiently
motivating thus far, please heed them and change your imports to use
"chaco"!


Chaco 3.2.0 (July 15, 2009)
===========================

Enhancements
------------

  * Bounded grids - Horizontal and Vertical grid line start and end points can now be set to a fixed value in data space, or to be the return value of an arbitrary callable.  The start and end tick can also be configured via the data_min and data_max traits.

  * Added dictionary interface to ArrayPlotData

  * Added a Traits UI view to the ScalesAxis

  * Added a new chaco.overlays subpackage and a new overlay, the DataBox.

  * Improved appearance of PlotToolbar

  * Changed add_default_axis() in the plot_factory module to take an axis class as a keyword argument.

  * Refactored contour plots into a common base class and implemented proper event handling when their colormaps or data ranges change.

  * Changed default colormap on img_plot() and contour_plot() method of Plot to be Spectral instead of Jet.

  * Added two more color palettes to the auto color palette, and created a default_colors module.

  * Added CandlePlot renderer

  * Changed Plot Labels to able to display inside the plot area, instead of only on the outside

  * Added optional title attribute to plot legends

  * Updated all containers to respect and use the new fixed_preferred_size trait on enable.Component

  * New Examples:
    * Interval trait editor as a Chaco example (from Stefan van der Walt)
    * embedding an interactive Chaco plot inside a VTK RenderWindow using the new Enable VTK backend
    * lasso tool on an image plot
    * bounded grid
    * candle plot

Fixes
-----

  * Fixed call signature of ShowAllTickGenerator.get_ticks()

  * Plot.title_font is now a delegate to the underlying PlotLabel object (from Chris Colbert)

  * Fixed mouse event handling bug in RangeSelection (from Stefan van der Walt)

  * ImagePlots now redraw when their input data changes.

  * Fixed cached image invalidation in colormapped image plots

  * Optimized ScatterPlot.map_index() when index_only is True and the index data is sorted

  * Changed ColormappedScatterPlot to no longer incorrectly apply the fill_alpha to the outline color

  * Improved date ticking heuristics in chaco.scales subpackage, specifically eliminating the bug where all times between, midnight and 1am would be formatted at too course of a time resolution.

  * Cleanup of various examples (titles, appearance)

  * The spectrum.py (audio spectrograph) example now properly closes the audio stream.


3.1.0 (March 20, 2009)
======================

Enhancements
------------

  * Domain limits - Mappers now can declare the "limits" of their valid domain. PanTool and ZoomTool respect these limits.  (pwang)

  * Adding "hide_grids" parameter to Plot.img_plot() and Plot.contour_plot() so users can override the default behavior of hiding grids.  (pwang)

  * Refactored examples to declare a Demo object so they can be be run with the demo.py example launcher.  (vibha)

  * Adding chaco.overlays package with some canned SVG overlays. (bhendrix)

  * DragZoom now can scale both X and Y axes independently corresponding to the mouse cursor motion along the X and Y axes (similar to the zoom behavior in Matplotlib).  (pwang)

  * New Examples:
    * world map (bhendrix)
    * more financial plots (pwang)
    * scatter_toggle (pwang)
    * stacked_axis (pwang)


Fixes
-----

  * Fixing the chaco.scales TimeFormatter to use the built-in localtime() instead of the one in the safetime.py module due to Daylight Savings Time issues with timedelta. (r23231, pwang)

  * Improved behavior of ScatterPlot when it doesn't get the type of metadata it expects in its "selections" and "selection_masks" metadata keys (r23121, pwang)

  * Setting the .range2d attribute on GridMapper now properly sets the two DataRange1D instances of its sub-mappers.  (r23119, pwang)

  * ScatterPlot.map_index() now respects the index_only flag (r23060, pwang)

  * Fixed occasional traceback/bug in LinePlot that occurred when data was completely outside the visible range (r23059, pwang)

  * Implementing is_in() on legends to account for padding and alignment (caused by tools that move the legend) (r23052, bhendrix)

  * Legend behaves properly when there are no plots to display (r23012, judah)

  * Fixed LogScale in the chaco.scales package to correctly handle the case when the length of the interval is less than a decade (r22907, warren.weckesser)

  * Fixed traceback when calling copy_traits() on a DataView (r22894, vibha)

  * Scatter plots generated by Plot.plot() now properly use the "auto" coloring feature of Plot. (r22727, pwang)

  * Reduced the size of screenshots in the user manual. (r22720, rkern)
