Changelog
All notable changes to pylinkage are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.6.0] - 2024-10-02
Added
New joint: the
Linearjoint!New sub-package: optimization.collections.
optimization.collections.Agentandoptimization.collections.MutableAgentare two new classes that should standardize the format of optimization, related to (#5).Agentis immutable and inherits from a namedtuple. It is recommended to use it, as it is a bit faster.MutableAgentis mutable. It may be deprecated/removed ifAgentis satisfactory.
New sub-package: geometry.
It introduces two new functions
line_from_pointsandcircle_line_intersection.
New examples:
examples/strider.pyfrom leggedsnake, based on the Strider Linkage.examples/inverted_stroke_engine.pyis a demo of a four-stroke engine featuring a Linear joint.
Linkage.set_completelyis a new method combining bothLinkage.set_num_constraintsandLinkage.set_coords.New exception
NotCompletelyDefinedError, when a joint is reloading but its anchor coordinates are set to None.Some run configuration files added for users of PyCharm:
Run all tests with “All Tests”.
Regenerate documentation with “Sphinx Documentation”.
Changed
Optimization return type changed (#5):
trials_and_error_optimizationreturn an array ofMutableAgent.particle_swarm_optimizationreturn an array of oneAgent.It should not be a breaking change for most users.
Changes to the “history” style.
It is no longer a global variable in example scripts.
It was in format iterations[dimensions, score], now it is a standard iterations[score, dimensions, initial pos].
repr_polar_swarm(in example scripts) changed to follow the new format.swarm_tiled_reprtakes (index, swarm) as input argument. swarm is (score, dim, pos) for each agent for this iteration.
repr_polar_swarmreload frame only when a new buildable linkage is generated.This makes the display much faster.
For each iteration, you may see linkages that do not exist anymore.
Folders reorganization:
The
geometrymodule is now a package (pylinkage/geometry)New package
pylinkage/linkage:pylinkage/linkage.pyseparated and inserted in this package.
New package:
pylinkage/jointsJoints definition are in respective files.
New package
pylinkage/optimization/pylinkage/optimizer.pysplit and inserted in.Trials-and-errors related functions goes to
grid_search.py.Particle swarm optimization is at
particle_swarm.py.New file
utils.pyforgenerate_bounds.
Tests follow the same renaming.
From the user perspective, no change (execution may be a bit faster)
source/renamed tosphinx/because it was confusing and only for Sphinx configuration.
Transition from Numpydoc to reST for docstrings (#12).
__secant_circles_intersections__renamed tosecant_circles_intersections(inpylinkage/geometry/secants.py).
Fixed
swarm_tiled_reprinvisualizer.pywas wrongly assigning dimensions.Setting
locus_highlightinplot_static_linkagewould result in an error.Pivot.reloadwas returning arbitrary point when we had an infinity of solutions.The highlighted locus was sometimes buggy in
plot_static_linkageinvisualizer.py.
Deprecated
Using
tqdm_verbosityis deprecated in favor of usingdisable=Truein a tqdm object.The
Pivotclass is deprecated in favor of theRevoluteclass. The name “Pivot joint” is not standard. Related to #13.The
hyperstaticitymethod is renamedindeterminacyinLinkage(linkage.py)
Removed
Drops support for Python 3.7 and 3.8 as both versions reached end-of-life.
movement_bounding_bowis replaced bymovement_bounding_box(typo in function name).
[0.5.3] - 2023-06-23
Added in 0.5.3
We now checked compatibility with Python 3.10 and 3.11.
pyproject.tomlis now the official definition of the package.Linkage.hyperstaticitynow clearly outputs a warning when used.
Changed in 0.5.3
masterbranch is nowmain.docs/example/fourbar_linkage.pycan now be used as a module (not the target but anyway).docs/examplesmoved toexamples/(main folder).Now
docs/only contains sphinx documentation.
docs/examples/imagesmoved toimages/.
Fixed in 0.5.3
Setting a motor with a negative rotation angle do no longer break
get_rotation_period(#7).Pivot.reloadandLinkage.__find_solving_order__were raising Warnings (stopping the code), when they should only print a message (intended behavior).Fixed many typos in documentation as well as in code.
The
TestPSO.test_convergenceis now faster on average, and when it fails in the first time, it launches a bigger test.Minor linting in the demo file
docs/example/fourbar_linkage.py.
Deprecated in 0.5.3
Using Python 3.7 is officially deprecated (end of life by 2023-06-27). It will no longer be tested, use it at your own risks!
[0.5.2] - 2021-07-21
Added in 0.5.2
You can see the best score and best dimensions updating in
trials_and_errors_optimization.
Changed in 0.5.2
The optimizer tests are 5 times quicker (~1 second now) and raise less false positive.
The sidebar in the documentation makes navigation easier.
A bit of reorganization in optimizers, it should not affect users.
[0.5.1] - 2021-07-14
Added in 0.5.1
The trial and errors optimization now have a progress bar (same kind of the one in particle swarm optimization), using tqdm.
Changed in 0.5.1
matplotlib and tqdm now required.
[0.5.0] - 2021-07-12
End of alpha development! The package is now robust enough to be used by a mere human. This version introduces a lot of changes and simplifications, so everything is not perfect yet, but it is complete enough to be considered a beta version.
Git tags will no longer receive an “-alpha” mention.
Added in 0.5.0
It is now possible and advised to import useful functions from pylinkage.{object}, without full path. For instance, use
from pylinkage import Linkageinstead offrom pylinkage.linkage import Linkage.Each module had his header improved.
The
generate_boundsfunctions is a simple way to generate bounds before optimization.The
order_relationarguments ofparticle_swarm_optimizationandtrials_and_errors_optimizationlet you choose between maximization and minimization problem.You can specify a custom order relation with
trials_and_errors_optimization.The
verboseargument in optimizers can disable verbosity.Staticjoints can now be defined implicitly.The
utilitymodule provides two useful decoratorskinematic_minimizationandkinematic_optimizatino. They greatly simplify the workflow of defining fitness functions.Versioning is now done thanks to bump2version.
Changed in 0.5.0
The
particle_swarm_optimizationeval_funcsignature is now similar to the one ottrials_and_errorsoptimization. Wrappers are no longer needed!The
trials_and_errors_optimizationfunction now asks for bounds instead of dilatation and compression factors.In
trials_and_errors_optimizationabsolute stepdelta_dimis now replaced by number of subdivisionsdivisions.
Fixed in 0.5.0
After many hours of computations, default parameters in
particle_swarm_optimizationare much more efficient. With the demofourbar_linkage, the output wasn’t even convergent sometimes. Now we have a high convergence rate (~100%), and results equivalent to thetrials_and_errors_optimization(in the example).variatorfunction ofoptimizermodule was poorly working.The docstrings were not displayed properly in documentation, this is fixed.
[0.4.1] - 2021-07-11
Added in 0.4.1
The legend in
visualizer.pyis back!Documentation published to GitHub pages! It is contained in the
docs/folder.setup.cfgnow include links to the website.
Changed in 0.4.1
Examples moved from
pylinkage/examples/todocs/examples/.Tests moved from
pylinkage/tests/totests/.
[0.4.0] - 2021-07-06
Added in 0.4.0
The
bounding_boxmethod of geometry allows computing the bounding box of a 2D points finite set.You can now customize colors of linkage’s bars with the
COLOR_SWITCHERvariable ofvisualizer.py.movement_bounding_boxinvisualizer.pyto get the bounding box of multiple loci.parametersis optional intrials_and_errors_optimization(formerexhaustive_optimization)pylinkage/tests/test_optimizer.pyfor testing the optimizers, but it is a bit ugly as for now.Flake8 validation in
tox.ini
Fixed in 0.4.0
set_num_constraintsinLinkagewas misbehaving due to update 0.3.0.Cost history is no longer plotted automatically after a PSO.
Changed in 0.4.0
exhaustive_optimizationis now known astrials_and_errors_optimizattion.Axes on linkage visualization are now named “x” and “y”. It was “Points abcsices” and “Ordinates”.
A default view of the linkage is displayed in
plot_static_linkage.Default padding in linkage representation was changed from an absolute value of 0.5 to a relative 20%.
Static view of linkage is now aligned with its kinematic one.
get_posmethod ofLinkageis now known asget_coordsfor consistency.Parameters renamed, reorganized and removed in
particle_swarm_optimizationto align to PySwarms.README.mdupdated consequently to the changes.
Removed in 0.4.0
Legacy built-in Particle Swarm Optimization, to avoid confusion.
We do no longer show a default legend on static representation.
[0.3.0] - 2021-07-05
Added in 0.3.0
Jointobjects now have aget_constraintsmethod, consistent with theirset_constraintsone.Linkagenow has aget_num_constraintsmethod as syntactic sugar.Code vulnerabilities checker
Walkthrough’s example has been expanded and now seems to be complete.
Changed in 0.3.0
Linkage’s methodset_num_constraintsbehaviour changed! You should now addflat=Falseto come back to the previous behavior.pylinkage/examples/fourbar_linkage.pyexpanded and finished.The
beginparameter ofarticle_swarm_optimizationis no longer mandatory.linkage.get_num_constraints()will be used ifbeginis not provided.More flexible package version in
environment.ymlOutput file name now is formatted as “Kinematic {linkage.name}” in
plot_kinematic_linkagefunction ofpylinkage/visualizer.pyPython 3.6 is no longer tested in
tox.ini. Python 3.9 is now tested.
Fixed in 0.3.0
When linkage animation was saved, last frames were often missing in
pylinkage/visualizer.py, functionplot_kinematic_linkage.
[0.2.2] - 2021-06-22
Added in 0.2.2
More continuous integration workflows for multiple Python versions.
Fixed in 0.2.2
README.mdcould not be seen in PyPi.Various types
[0.2.1] - 2021-06-16
Added in 0.2.1
swarm_tiled_reprfunction forpylinkage/visualizer.py, for visualization of PySwarms.EXPERIMENTAL!
hyperstaticitymethodLinkage’s hyperstaticity (over constrained) calculation.
Changed in 0.2.1
pylinkage/exception.pynow handles exceptions in another file.Documentation improvements.
Python style improvements.
.gitignorenow modified from the standard GitHub gitignore example for Python.
Fixed in 0.2.1
circlemethod ofPivotinpylinkage/linkage.py. It was causing errorstox.ininow fixed.
[0.2.0] - 2021-06-14
Added in 0.2.0
pylinkage/vizualizer.pyview your linkages using matplotlib!Issue templates in
.github/ISSUE_TEMPLATE/.github/workflows/python-package-conda.yml: conda tests with unittest workflow.CODE_OF_CONDUCT.mdMANIFEST.inREADME.mdenvironment.ymlsetup.cfgnow replacessetup.pytox.iniCHANGELOG.md
Changed in 0.2.0
.gitignorePython Package specific extensions addedMIT License→LICENSElib/→pylinkage/tests/→pylinkage/tests/Revamped package organization.
Cleared
setup.py
[0.0.1] - 2021-06-12
Added in 0.0.1
lib/geometry.pyas a mathematical basis for kinematic optimizationlib/linkage.py, linkage builderlib/optimizer.py, with Particle Swarm Optimization (built-in and PySwarms), and exhaustive optimization.MIT License.requirements.txt.setup.py.tests/__init__.py.tests/test_geometry.py.tests/test_linkage.py..gitignore.