Release Notes#
0.3.0 (February 17, 2025)#
What’s New#
CLI#
Added
--workers
option to the CLI for running multiple morphs in parallel.Renamed
--ramp-in
and--ramp-out
as--ease-in
and--ease-out
.Added
--ease
option to the CLI, which is shorthand for--ease-in --ease-out
.
Documentation#
Added Tutorials page to the documentation.
Added Shape Creation tutorial.
Added section to the documentation with ideas of how to use Data Morph in the classroom.
Updated contribution instructions in Custom Datasets tutorial.
Included reference to article on the creation of Data Morph in the documentation header.
Included reference to Data Morph: A Cautionary Tale of Summary Statistics (conference talk) in the documentation header.
Added contributing guidelines and code of conduct.
Configured canonical URL.
Morphing#
Reworked GIF creation logic to write only one PNG for distinct frames in the animation and use frequency counts to determine frame duration for speed improvements and less I/O.
Added three new datasets: soccer, pi, and gorilla. See the
DataLoader
for visuals.Added four new shapes:
Club
,FigureEight
,Spade
, andSpiral
.Refactored some shape logic to use more
numpy
for speed improvements.Added
center
property toInterval
andBoundingBox
to simplify shape calculations.Made it possible to unpack the bounds from the
BoundingBox
.Switched from
tqdm
to progress bars powered byrich
.Renamed the
ramp_in
andramp_out
arguments toDataMorpher.morph()
asease_in
andease_out
.Added
Shape.get_name()
method andShape.name
attribute to replace__str__()
shape naming logic, which removed some redundancies inShapeFactory
.Refactored the shape code into separate modules per shape.
Renamed
get_values()
asget_summary_statistics()
.Improved variable names in several spots for more readable code.
Plotting#
Added
show_bounds
parameter toDataset.plot()
to visualize the automatically-calculated bounds.Added
title
parameter toDataset.plot()
with default showing the name and number of points.Switched from using Matplotlib’s
tight_layout()
to constrained layout.Added
style_context()
context manager for plotting in a Data Morph style.Added test suite for
plotting.style
module.Changed plot layouts for
DataLoader.plot()
andShapeFactory.plot_available_shapes()
.Adjusted grid of datasets in the documentation to use tighter plot bounds.
Tooling#
Added new GitHub Actions workflow to run Data Morph on new/altered datasets, shapes, or core logic.
Switched to trusted publishing on PyPI via GitHub Actions.
Added PR and issue templates.
Added
pytest-xdist
to dev dependencies and reworked the test suite to make it faster.Switched from
black
toruff
formatting in pre-commit setup and included additional rulesets.Added
pyproject-fmt
pre-commit hook.Refactored shape tests.
Bug Fixes#
Addressed compatibility issues with
numpy>=2.0.0
.Assorted performance and code quality improvements after running additional
ruff
rules.Fixed some incorrect return types.
Dependency Updates#
Replaced
tqdm
dependency withrich
.Replaced
pytweening
dependency with functions inplotting.animation
.Replaced
sphinxarg.ext
Sphinx extension withsphinx_argparse_cli
.Changed the minimum Sphinx version to 7.2.6.
Changed the minimum
pydata-sphinx-theme
version to 0.15.3.Updated pre-commit hooks to the latest versions.
Factored out
scipy
dependency.Updated GitHub Actions workflows for Node 16 deprecation.
Enabled Dependabot on GitHub Actions and switched to use commit hashes for versioning.
Updated Python testing matrix to include Python 3.9 through 3.13.
0.2.0 (September 24, 2023)#
What’s New#
Created 5 new target shapes:
Diamond
,Heart
,LeftParabola
,RightParabola
,Rings
.Created 3 new datasets: bunny, Python logo (TM), SuperDataScience logo. Logos are used with permission.
Made it possible to install via
conda
.Configured versioned documentation hosted in GitHub Pages.
Generated a CLI reference page in the documentation.
Provided a custom dataset creation tutorial to the documentation.
Included logo and badges in README.
Included an example using easing for the animation to the documentation.
Included reference to article on the creation of Data Morph in the documentation.
Configured codecov reporting on test coverage with actions to validate the config both periodically and upon change.
Incorporated metavar indicators for some CLI options.
Added a test of the frame freezing functionality in the
DataMorpher
.Added a test for the
ShapeFactory.plot_available_shapes()
method used in the documentation.Added a test for the
PointCollection.plot()
method used in the documentation.
Bug Fixes#
Fixed links to Autodesk assets after change to their website.
Corrected missing type references in the documentation.
Addressed a bug in the
DataMorpher
that caused frame recording to miss first frame (initial dataset).Fixed a bug in the
DataMorpher
that wasn’t properly decreasing the temperature in the simulated annealing process.Reduced point size for datasets displayed in the documentation so points appear with some separation and stay true to their subjects.
Fixed bug in logic for padding statistics in plots that would use incorrect spacing in some cases.
Dependency Updates#
Changed the minimum Sphinx version to 7.2.1.
Changed the minimum
pytweening
version to 1.0.5.Switched from
isort
andflake8
toruff
in pre-commit setup.Updated pre-commit hooks to the latest versions and to use the new upstream
numpydoc
validation hook.
0.1.0 (April 1, 2023)#
This is the first release of Data Morph, which is a spinoff of jmatejka/same-stats-different-graphs. Data Morph extends the original premise from the Autodesk Research paper to be more general. The core improvements include:
Created a modular package, moving away from functional programming to object-oriented programming.
Introduction of
Shape
classes both for resuability of the code and to decouple the shapes from the original “datasaurus” dataset and its hardcoded values. Morphing is now possible from any input dataset to the target shapes. See theShapeFactory
documentation for visuals.Creation of
Dataset
to hold the data along with bounds needed for morphing and plotting and the name.Morph and plot bounding logic for automatic calculation of values needed for simulated annealing and plot limits.
Fun new starter datasets: cat, dog, music, panda, and sheep. See the
DataLoader
documentation for visuals.Easier application of plotting theme.
Documentation with Sphinx.
Testing suite with pytest.
Replaced center shape with
Scatter
and included a newRectangle
shape.