Skip to content

v3.0.0

Compare
Choose a tag to compare
@github-actions github-actions released this 03 Oct 05:55
· 346 commits to refs/heads/master since this release

⭐ Highlights

  • New, unambiguous section property retrieval with get() methods, see an example here.
  • Improved stress plotting options (new colorbar features, mesh opacity, plot selected materials), see an example here.
  • Improved documentation style and automation.
  • sectionproperties API now has full typing coverage.
  • Significantly expanded examples in the documentation.
  • Add support for Python 3.11.
  • Improved workflow, CI and contributor experience by introducing poetry and nox.

💥 Breaking Changes

  • Update section property get() methods behaviour as per #287 to circumvent confusion surrounding material weighted properties. An analysis without material properties uses the get_{property}() syntax, while an analysis with material properties typically uses the get_e{property}() syntax with the added option of retrieving transformed section properties. See here for a list of the new get() methods and here for a discussion surrounding this issue.
  • Stress plotting methods have been simplified to improve maintainability and code repetition. You can now plot stress results by using the plot_stress() or plot_stress_vector() methods that belong to the StressPost object.
  • get_stress_at_point() method removed, use the more versatile get_stress_at_points() method instead.
  • Pythonic renaming of methods and variables, e.g. get_As() becomes get_as() for retrieving shear areas, moments and shears change from Mxx and Vx to mxx and vx.
  • Concrete section library - renamed argument names to be more pythonic, reinforcement now requires an area and diameter.
  • Dropped support for Python 3.8 (#289).

🚀 Features

  • Packaging and dependency management with poetry.
  • Improve length/readability of imports by placing key classes in __init__.py files, e.g. from sectionproperties.pre.library.primitive_sections import rectangular_section becomes from sectionproperties.pre.library import rectangular_section
  • Significant analysis performance and readability improvements (#293, #298) thanks to @TLCFEM.
  • Allow unlipped cee and zed sections (#300), thanks to @smith120bh.
  • Export analysis results to fibre sections that can be used by the suanPan FEM platform (#295), thanks to @TLCFEM.
  • Allow spline options to be specified when importing .dxf files (#292), thanks to @ccaprani.
  • Improved plotting options, including colorbar string formatting, mesh opacity options, custom colorbar limits, custom colorbar label, option to only plot selected materials (#291).
  • Added option to specify minimum mesh angle (#290).
  • Added support for Python 3.11 (#289).

🐛 Fixes

  • Fix symmetric difference operation not auto-detecting holes in the geometry (#297), thanks to @connorferster.
  • Provide clarity on how to create arbitrary sections without a facet list (#294).
  • CGS solver fix (#268), thanks to @simo-11.

🚨 Testing

  • Use nox & nox-poetry for testing.
  • Move test_plastic_centroid() to test_plastic.py.
  • Various tests added.

👷 Continuous Integration

  • Add poetry integration and detailed contributor guidelines.
  • Added labeller and release drafter automation.
  • Added pre-commit checks.
  • Updated all workflows.

📚 Documentation

  • Changed documentation theme to furo.
  • General overhaul of the documentation.
  • Auto-generate API documentation using sphinx.ext.autodoc.
  • Auto-generate images in documentation using the matplotlib plot directive.
  • Change examples from sphinx gallery to jupyter notebook style with nbsphinx.
  • Add intersphinx mappings.

💄 Style

  • Fully implement typing.
  • Added flake8 linter to pre-commit.
  • Added darglint docstring linter to pre-commit.
  • Added isort to pre-commit.
  • Added pyupgrade to pre-commit.
  • General refactor to improve readability and maintainability, e.g. reduce amount of code in section.py: PlasticSection -> plastic_section.py, StressPost and StressResult -> stress_post.py, SectionProperties -> post.py.
  • Generally changed type of a point from list[float] to a tuple(float, float).

Other

  • Restructured package by adding src folder.