Archive¶
These previous releases are no longer relevant to the project but are still described here for historical interest.
Note
This project was previously named stylo
v0.9.3 - 2019-01-12¶
Changed¶
When adding layers the
LayeredImage
now accepts the color as a string automatically converting it to aFillColor
behind the scenes.
v0.9.2 - 2019-01-07¶
Changed¶
Most commonly used objects have been imported into the top level namespace. This means that it is now possible to write code like the following.
import stylo as st black = st.FillColor() circle = st.Circle(fill=True) image = st.SimpleImage(circle, black)
The way stylo has been packaged has been changed. It now comes with a couple of “extras”. Instead of requiring dependencies for everything, the default installation now only contains the packages that are absolutely required to run stylo.
The other dependencies have been split into a couple of extras
testing
: The dependencies required to import items from the stylo.testing package.jupyer
: Dependencies required to use stylo interactively in a jupyter notebook.
v0.9.1 - 2018-12-27¶
There are no changes.
This release is a test to ensure that internal changes to how stylo
is
packaged and deployed are working correctly.
v0.9.0 - 2018-11-11¶
Added¶
New
stylo.math
module! Currently it contains alerp
function to do linear implementation between two valuesa
andb
New
stylo.design
module! This is the start of the “next level” in styo’s API abstracting away from the lower level objects such as shapes and colormaps.This module adds the notion of a parameter group, this is a collection of values that can be passed into functions as a single object using the dictionary unpacking syntax (
**params
)Parameter groups are defined using the
define_parameter_group
function and taking a name and a comma separated string of parameter names. There is alsodefine_time_dependent_parameter_group
that can be used to define a parameter group that depends on time.Currently there are two pre-defined paramters groups,
Position
andTrajectory
. They both combine thex
andy
values into a single object, with the second being the time dependent version of the first.Finally there are two built-in implementations of these parameter groups.
StaticPosition
andParametricPosition
the first takes two values and returns them. The second takes two functions in time and calls them at each supplied time value.
v0.8.0 - 2018-11-07¶
Added¶
New
Timeline
system! This finally introduces explicit support for animations tostylo.
v0.7.0 - 2018-10-25¶
Added¶
New
Line
shape!New
ImplicitXY
shape! Draw any curve that is implicitly defined by a function \(f(x, y)\)
Changed¶
The
Circle
andEllipse
shapes now take more arguments. By default the shapes will now draw an outline rather than a filled in shape.
v0.6.1 - 2018-10-20¶
Added¶
New
preview
keyword argument to images, set this toFalse
if you don’t want a matplotlib figure returned.New
encode
keyword argument to images, setting this toTrue
will return a base64 encoded string representation of the image in PNG format.
Fixed¶
Preview images are no longer displayed twice in jupyter notebooks
Preview images no longer display the x and y axis numbers.
v0.6.0 - 2018-10-07¶
Added¶
Users
New
Triangle
shapeShapes can now be inverted using the
~
operator.
Contributors
Added new shape
InvertedShape
which handles the inversion of a shape behind the scenes.Tests for all the composite shapes and operators.
More documentation on how to get involved
Changed¶
Users
Shapes now have defined
__repr__
methods, including shapes that have been combined, where a representation of a tree will be produced showing how the various shapes have been combined together.Preview images in Jupyter notebooks are now larger by default
This release of stylo
was brought to you thanks to contributions from
the following awesome people!
v0.5.0 - 2018-09-27¶
Added¶
Users
New Image object
LayeredImage
object that can now draw more than one objectAdded an introductory tutorial for first time users to the documentation
Functions from the
stylo.domain.transform
package can now be applied to shapes, meaning that most images can now be made without handling domains directly.
Contributors
Added a
Drawable
class, this allows a domain, shape and colormap to be treated as a single entity.Added a
render_drawable
function that takes a drawable and some existing image data and applies it to the data.Added a
get_real_domain
function that given a width, height and scale returns aRectangularDomain
with appropriate aspect ratio, \((0, 0)\) at the centre of the image and the scale corresponding to the interval \([ymin, ymax]\)We now make use of the
[scripts]
section ofPipfile
so running common commands is now easier to rememberpipenv run test
: to run the test suitepipenv run lint
: to lint the codebasepipenv run docs
: to run a full build of the documentationpipenv run docs_fast
: to run a less complete but faster build of the documentation.
Changed¶
Users
Altered
SimpleImage
to no longer take a domain, reducing the cognitive load on first time users. It now instead takes an optionalscale
variable to control the size of the domain underneath. This also means that the domain now automatically matches the aspect ratio of the image so no more distortion in non-square images.
Contributors
The tests now take advantage of multi-core machines and should now run much faster
Building the docs now takes advantage of multi-core machines and should now run much faster.
Fixed¶
Contributors
Fixed crashes in
exampledoc.py
andapidoc.py
for first time usersFixed issue with
sed
on a Mac for people running thedevenv-setup.sh
script
This release of stylo
was brought to you thanks to contributions from
the following awesome people!
v0.4.2 - 2018-09-17¶
Added¶
Image
objects can now take asize
keyword argument to adjust the size of the matplotlib preview plots
v0.4.1 - 2018-09-17¶
Fixed¶
Fixed an issue with
setup.py
that meant most of the code wasn’t published to PyPi!
v0.4.0 - 2018-09-16¶
Out of the ashes of the previous version rises the biggest release to date! Stylo has been rewritten from the ground up and should now be easier to use, more modular and easier to extend!
None (or very little) of the original code remains and not everything has been reimplemented yet so some of the features listed below may not be available in this version. There is a lot more work to be done particularly in the tests and docs departments however core functionality is now in place and it’s been long enough since the previous release.
I’m hoping that from now on releases will be smaller and more frequent as what is now here is refined and tested to create a stable base from which Stylo can be extended.
Added¶
Users
One of the main ideas behind the latest incarnation of stylo is the idea of
interfaces borrowed from Java. Where you have an object such as Shape
and all shapes have certain behaviors in common represented by methods on an
interface. Then there are a number of implementations that provide the details
specific to each shape.
In stylo this is modelled by having a number of abstract classes that define the interfaces that represent different parts of the stylo image creation process. Then regular classes inherit from these to provide the details.
With that in mind this release provides the following “interfaces”.
New
RealDomain
andRealDomainTransform
interfaces, these model the mapping of a continuous mathematical domain \(D \subset \mathbb{R}^2\) onto a discrete grid of pixels.New
Shape
interface this models the mapping of the grid of values generated by a domain into a boolean numpy array representing which pixels are a part of the shape.New
ColorSpace
system this currently doesn’t do much but should allow support for the use of different color representations. Current only 8^bit RGB values are supported.New
ColorMap
interface, this represents the mapping of the boolean numpy array generated by theShape
interface into a numpy array containing the color values that will be eventually interpreted as an image.New
Image
interface. Implementations of this interface will implement common image creation workflows as well as providing a unified way to preview and save images to a file.
With the main interfaces introduced here is a (very) brief introduction to each of the implementations provided in this release
RealDomain
RectangularDomain
: Models a rectangular subset of the :math`xy`^plane \([a, b] \times [c, d] \subset \mathbb{R}^2\)SquareDomain
: Similar to above but in the cases where \(c = a\) and \(d = b\)UnitSquare
: Similar to above but the case where \(a = 0\) and \(b = 1\)
RealDomainTransform
HorizontalShear
: Given a domain this applies a horizontal shear to itRotation
: Given a domain this rotates it by a given angleTranslation
: Given a domain this applies a translation to itVerticalShear
: Given a domain this applies a vertical shear to it
Shape
Square
Rectangle
Circle
Ellipse
ColorSpace
RGB8
: 8^bit RGB valued colors
ColorMap
FillColor
: Given a background and a foreground color. Color allFalse
pixels with the background color and color all theTrue
pixels the foreground color.
Image
SimpleImage
: Currently the only image implementation, this implements one of the simplest workflows that can result in an interesting image. Take aDomain
, pass it to aShape
and then apply aColorMap
to the result.
Extenders/Contributors
From the beginning this new attempt at stylo
has been designed with
extensibility in mind so included in the library are also a number of utilities
aimed to help you develop your own tools that integrate well with the rest of
stylo.
Domains and DomainTransforms
While stylo
only currently ships with RealDomain
and
RealDomainTransform
interfaces it is developed in a way to allow the
addition of new “families” of domain. If you want to create your own stylo
provides the following functions:
define_domain
: This will write your base domain class (like theRealDomain
) just give it a name and a list of parameters.define_domain_transform
: The will write theDomainTransform
base class for you.
In addition to defining new families stylo
provides a few helper
classes to help you write your own domains and transforms for the existing
RealDomain
family
PolarConversion
: If your domain is only “interesting” in cartesian coordinates this helper class will automatically write the conversion to polar coordinates for you.CartesianConversion
: If your domain is only “interesting” in polar coordinates this helper class will automatically write the conversion to cartesian coordinates for you.
stylo.testing
stylo
also comes with a testing package that provides a number of
utilities to help you ensure that any extensions you write will integrate well
with the rest of stylo
BaseRealDomainTest
: This is a class that you can base your test case on for any domains in theRealDomain
family to ensure that they function as expected.define_domain_test
: Similar to thedefine_domain
anddefine_domain_transform
functions this defines a base test class to ensure that domains in your new family work as expected.BaseShapeTest
Basing your test case on this for any new shapes will ensure that your shapes will function as expected by the rest ofstylo
define_benchmarked_example
: This is for those of you wishing to contribute an example to the documentation, using this function with your example code will ensure that your example is automatically included in the documentation when it is next built.
stylo.testing.strategies
This module defines a number of hypothesis strategies for common data types in
stylo
. Using these (and hypothesis) in your test cases where possible
will ensure that your objects will work with the same kind of data as
stylo
itself.
Removed¶
Everything mentioned below.
v0.3.0 - 2017-12-09¶
Added¶
New Domain class, it is responsible for generating the grids of numbers passed to Drawables when they are mapped onto Images. It replaces most of the old decorators.
Drawables are now classes! Any drawable is now a class that inherits from Drawable, it brings back much of the old Puppet functionality with some improvements.
More tests!
Changed¶
ANDing Images (a & b) has been reimplemented so that it hopefully makes more sense. The alpha value of b is used to scale the color values of a.
Along with the new Domain system mapping Drawables onto Images has been reworked to hopefully make coordinate calculations faster
Removed¶
stylo/coords.py has been deleted, this means the following functions and decorators no longer exist + mk_domain - Domains are now a class + cartesian (now built into the new Domain object) + polar (now built into the new Domain object) + extend_periocally (now the .repeat() method on the new Domain object) + translate (now the .transform() method on the new Domain object) + reflect (not yet implemented in the new system)
v0.2.3 - 2017-11-15¶
Added¶
Image objects can now be added together, this is simply the sum of the color values at each pixel
Image objects can now be subtracted, which is simply the difference of the colour values at each pixel
Changed¶
Renamed hex_to_rgb to hexcolor. It now also can cope with rgb and rgba arguments, with the ability to promote rgb to rgba colors
v0.2.2 - 2017-10-30¶
Added¶
Keyword argument ‘only’ to the ‘polar’ decorator which allows you to ignore the x and y variables if you dont need them
Fixed¶
Forgot to expose the objects from interpolate.py to the top level stylo import
Examples in the documentation and enabled doctests for them
v0.2.1 - 2017-10-29¶
Fixed¶
Stylo should now also work on python 3.5
Removed¶
Deleted stylo/motion.py as its something better suited to a plugin
Deleted Pupptet, PuppetMaster and supporting functions as they are broken and better to be rewritten from scratch
v0.2.0 - 2017-10-27¶
Added¶
Sampler object which forms the basis of the new Driver implementations
Channel object which can manage many Sampler like objects to form a single ‘track’ of animation data
A very simple Driver object which allows you to collect multiple Channel objects into a single place
linear, quad_ease_in, quad_ease_out interpolation functions
Docs
Added the following reference pages
Image
Drawable
Primitive
Sampler
A How To section
How To invert the colours of an Image
Changed¶
Image.__and__() now uses a new method which produces better results with colour images
Fixed¶
Numpy shape error in Image.__neg__()
Removed¶
stylo.prims.thicken was redundant so it has been removed
v0.1.0 - 2017-08-02¶
Initial Release