⭐ 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
andnox
.
💥 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 theStressPost
object. 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 fromMxx
andVx
tomxx
andvx
. - 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
becomesfrom 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()
totest_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
andStressResult
->stress_post.py
,SectionProperties
->post.py
. - Generally changed type of a point from
list[float]
to atuple(float, float)
.
Other
- Restructured package by adding
src
folder.