v3.0.0
·
584 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.
sectionpropertiesAPI 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
poetryandnox.
💥 Breaking Changes
- Update section property
get()methods behaviour as per #287 to circumvent confusion surrounding material weighted properties. An analysis without material properties uses theget_{property}()syntax, while an analysis with material properties typically uses theget_e{property}()syntax with the added option of retrieving transformed section properties. See here for a list of the newget()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()orplot_stress_vector()methods that belong to theStressPostobject. get_stress_at_point()method removed, use the more versatileget_stress_at_points()method instead.- Pythonic renaming of methods and variables, e.g.
get_As()becomesget_as()for retrieving shear areas, moments and shears change fromMxxandVxtomxxandvx. - 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__.pyfiles, e.g.from sectionproperties.pre.library.primitive_sections import rectangular_sectionbecomesfrom 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
.dxffiles (#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-poetryfor testing. - Move
test_plastic_centroid()totest_plastic.py. - Various tests added.
👷 Continuous Integration
- Add
poetryintegration 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
matplotlibplot directive. - Change examples from sphinx gallery to jupyter notebook style with
nbsphinx. - Add
intersphinxmappings.
💄 Style
- Fully implement typing.
- Added
flake8linter to pre-commit. - Added
darglintdocstring linter to pre-commit. - Added
isortto pre-commit. - Added
pyupgradeto pre-commit. - General refactor to improve readability and maintainability, e.g. reduce amount of code in
section.py:PlasticSection->plastic_section.py,StressPostandStressResult->stress_post.py,SectionProperties->post.py. - Generally changed type of a point from
list[float]to atuple(float, float).
Other
- Restructured package by adding
srcfolder.