* The lowest workable Python 3 version has been correctly identified
as `3.3`. This is not an API change, as it didn't work in earlier
versions either.
* `markov.nodes` is now named `markov.node`
* `markov.node.Node.name` has been renamed to `markov.node.Node.value`
* `markov.graph.Graph.find_node_by_name()` has been renamed
to `markov.graph.Graph.find_node_by_value()`
* `markov.graph.Graph.remove_node_by_name()` has been renamed
to `markov.graph.Graph.remove_node_by_value()`
* `markov.graph.Graph.has_node_with_name()` has been renamed
to `markov.graph.Graph.has_node_with_value()`
* In `markov.node.Node.merge_links_from()`, the keyword argument
`merge_same_name_targets` has been renamed `merge_same_value_targets`
* `markov.graph.Graph.merge_nodes()` now preserves graph links pointing to
`kill_node`, merging them into links pointing to `keep_node`
* `SoftColor.__init__()` now raises a `TypeError` if invalid arguments
are passed to it for `red`, `green`, or `blue`.
* When called with neither `minimum` nor `maximum`,
`rand.bound_weights()` now returns the input `weights` unmodified
instead of raising a `TypeError`
* `rand._linear_interp()` now raises a `ProbabilityUndefinedError`
instead of a `ValueError` when the tested x value lies outside of the
given curve.
* SoftObject is now a new-style class
* The following names have been changed from attributes to properties
with type-enforcing setters. Their API's have not changed except
where noed:
* `SoftOptions.options`
* `SoftBool.prob_true`
* `SoftFloat.weights`
* `SoftInt.weights`
* `SoftColor.red`, `SoftColor.blue`, `SoftColor.green` now store a copy
of arguments assigned to them rather than the original. This will only
affect existing code if `SoftInt` values are created manually before being
passed to `SoftColor`'s, then and the `SoftInt` are manipulated outside of
the context of the `SoftColor` with the expectation that the `SoftColor`'s
attributes would be changed as well.