Skip to content

Latest commit

 

History

History
349 lines (264 loc) · 13.5 KB

CHANGELOG.md

File metadata and controls

349 lines (264 loc) · 13.5 KB

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 Linear joint!
  • New sub-package: optimization.collections. optimization.collections.Agent and optimization.collections.MutableAgent are two new classes that should standardize the format of optimization, related to (#5).
    • Agent is immutable and inherits from a namedtuple. It is recommended to use it, as it is a bit faster.
    • MutableAgent is mutable. It may be deprecated/removed if Agent is satisfactory.
  • New sub-package: geometry.
    • It introduces two new functions line_from_points and circle_line_intersection.
  • New examples:
  • Linkage.set_completely is a new method combining both Linkage.set_num_constraints and Linkage.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_optimization return an array of MutableAgent.
    • particle_swarm_optimization return an array of one Agent.
    • 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_repr takes (index, swarm) as input argument. swarm is (score, dim, pos) for each agent for this iteration.
  • repr_polar_swarm reload 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 geometry module is now a package (pylinkage/geometry)
    • New package pylinkage/linkage:
      • pylinkage/linkage.py separated and inserted in this package.
    • New package: pylinkage/joints
      • Joints definition are in respective files.
    • New package pylinkage/optimization/
      • pylinkage/optimizer.py split and inserted in.
      • Trials-and-errors related functions goes to grid_search.py.
      • Particle swarm optimization is at particle_swarm.py.
      • New file utils.py for generate_bounds.
    • Tests follow the same renaming.
    • From the user perspective, no change (execution may be a bit faster)
    • source/ renamed to sphinx/ because it was confusing and only for Sphinx configuration.
  • Transition from Numpydoc to reST for docstrings (#12).
  • __secant_circles_intersections__ renamed to secant_circles_intersections (in pylinkage/geometry/secants.py).

Fixed

  • swarm_tiled_repr in visualizer.py was wrongly assigning dimensions.
  • Setting locus_highlight in plot_static_linkage would result in an error.
  • Pivot.reload was returning arbitrary point when we had an infinity of solutions.
  • The highlighted locus was sometimes buggy in plot_static_linkage in visualizer.py.

Deprecated

  • Using tqdm_verbosity is deprecated in favor of using disable=True in a tqdm object.
  • The Pivot class is deprecated in favor of the Revolute class. The name "Pivot joint" is not standard. Related to #13.
  • The hyperstaticity method is renamed indeterminacy in Linkage (linkage.py)

Removed

  • Drops support for Python 3.7 and 3.8 as both versions reached end-of-life.
  • movement_bounding_bow is replaced by movement_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.toml is now the official definition of the package.
  • Linkage.hyperstaticity now clearly outputs a warning when used.

Changed in 0.5.3

  • master branch is now main.
  • docs/example/fourbar_linkage.py can now be used as a module (not the target but anyway).
  • docs/examples moved to examples/ (main folder).
    • Now docs/ only contains sphinx documentation.
  • docs/examples/images moved to images/.

Fixed in 0.5.3

  • Setting a motor with a negative rotation angle do no longer break get_rotation_period (#7).
  • Pivot.reload and Linkage.__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_convergence is 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

[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 Linkage instead of from pylinkage.linkage import Linkage.
  • Each module had his header improved.
  • The generate_bounds functions is a simple way to generate bounds before optimization.
  • The order_relation arguments of particle_swarm_optimization and trials_and_errors_optimization let you choose between maximization and minimization problem.
  • You can specify a custom order relation with trials_and_errors_optimization.
  • The verbose argument in optimizers can disable verbosity.
  • Static joints can now be defined implicitly.
  • The utility module provides two useful decorators kinematic_minimization and kinematic_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_optimization eval_func signature is now similar to the one ot trials_and_errors optimization. Wrappers are no longer needed!
  • The trials_and_errors_optimization function now asks for bounds instead of dilatation and compression factors.
  • In trials_and_errors_optimization absolute step delta_dim is now replaced by number of subdivisions divisions.

Fixed in 0.5.0

  • After many hours of computations, default parameters in particle_swarm_optimization are much more efficient. With the demo fourbar_linkage, the output wasn't even convergent sometimes. Now we have a high convergence rate (~100%), and results equivalent to the trials_and_errors_optimization (in the example).
  • variator function of optimizer module 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.py is back!
  • Documentation published to GitHub pages! It is contained in the docs/ folder.
  • setup.cfg now include links to the website.

Changed in 0.4.1

  • Examples moved from pylinkage/examples/ to docs/examples/.
  • Tests moved from pylinkage/tests/ to tests/.

[0.4.0] - 2021-07-06

Added in 0.4.0

  • The bounding_box method 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_SWITCHER variable of visualizer.py.
  • movement_bounding_box in visualizer.py to get the bounding box of multiple loci.
  • parameters is optional in trials_and_errors_optimization (former exhaustive_optimization)
  • pylinkage/tests/test_optimizer.py for testing the optimizers, but it is a bit ugly as for now.
  • Flake8 validation in tox.ini

Fixed in 0.4.0

  • set_num_constraints in Linkage was misbehaving due to update 0.3.0.
  • Cost history is no longer plotted automatically after a PSO.

Changed in 0.4.0

  • exhaustive_optimization is now known as trials_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_pos method of Linkage is now known as get_coords for consistency.
  • Parameters renamed, reorganized and removed in particle_swarm_optimization to align to PySwarms.
  • README.md updated 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

  • Joint objects now have a get_constraints method, consistent with their set_constraints one.
  • Linkage now has a get_num_constraints method 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 method set_num_constraints behaviour changed! You should now add flat=False to come back to the previous behavior.
  • pylinkage/examples/fourbar_linkage.py expanded and finished.
  • The begin parameter of article_swarm_optimization is no longer mandatory. linkage.get_num_constraints() will be used if begin is not provided.
  • More flexible package version in environment.yml
  • Output file name now is formatted as "Kinematic {linkage.name}" in plot_kinematic_linkage function of pylinkage/visualizer.py
  • Python 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, function plot_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.md could not be seen in PyPi.
  • Various types

[0.2.1] - 2021-06-16

Added in 0.2.1

  • swarm_tiled_repr function for pylinkage/visualizer.py, for visualization of PySwarms.
  • EXPERIMENTAL! hyperstaticity method Linkage's hyperstaticity (over constrained) calculation.

Changed in 0.2.1

  • pylinkage/exception.py now handles exceptions in another file.
  • Documentation improvements.
  • Python style improvements.
  • .gitignore now modified from the standard GitHub gitignore example for Python.

Fixed in 0.2.1

  • circle method of Pivot in pylinkage/linkage.py. It was causing errors
  • tox.ini now fixed.

[0.2.0] - 2021-06-14

Added in 0.2.0

  • pylinkage/vizualizer.py view your linkages using matplotlib!
  • Issue templates in .github/ISSUE_TEMPLATE/
  • .github/workflows/python-package-conda.yml: conda tests with unittest workflow.
  • CODE_OF_CONDUCT.md
  • MANIFEST.in
  • README.md
  • environment.yml
  • setup.cfg now replaces setup.py
  • tox.ini
  • CHANGELOG.md

Changed in 0.2.0

  • .gitignore Python Package specific extensions added
  • MIT LicenseLICENSE
  • lib/pylinkage/
  • tests/pylinkage/tests/
  • Revamped package organization.
  • Cleared setup.py

[0.0.1] - 2021-06-12

Added in 0.0.1

  • lib/geometry.py as a mathematical basis for kinematic optimization
  • lib/linkage.py, linkage builder
  • lib/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.