:star: Highlights
- New, unambiguous section property retrieval with `get()` [methods](https://sectionproperties.readthedocs.io/en/latest/user_guide/results.html#retrieving-section-properties), see an example [here](https://sectionproperties.readthedocs.io/en/latest/examples/results/get_results.html).
- Improved [stress plotting options](https://sectionproperties.readthedocs.io/en/latest/user_guide/results.html#plot-stress-contours) (new colorbar features, mesh opacity, plot selected materials), see an example [here](https://sectionproperties.readthedocs.io/en/latest/examples/results/plot_stress.html).
- Improved [documentation](https://sectionproperties.readthedocs.io/en/latest/index.html) style and automation.
- `sectionproperties` API now has full typing coverage.
- Significantly expanded [examples](https://sectionproperties.readthedocs.io/en/latest/examples.html) in the documentation.
- Add support for Python 3.11.
- Improved workflow, CI and contributor experience by introducing `poetry` and `nox`.
:boom: 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](https://sectionproperties.readthedocs.io/en/latest/user_guide/results.html#retrieving-section-properties) for a list of the new `get()` methods and [here](https://sectionproperties.readthedocs.io/en/latest/user_guide/results.html#how-material-properties-affect-results) 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).
:rocket: 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](https://github.com/TLCFEM/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).
:bug: 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.
:rotating_light: Testing
- Use `nox` & `nox-poetry` for testing.
- Move `test_plastic_centroid()` to `test_plastic.py`.
- Various tests added.
:construction_worker: Continuous Integration
- Add `poetry` integration and detailed contributor guidelines.
- Added labeller and release drafter automation.
- Added pre-commit checks.
- Updated all workflows.
:books: Documentation
- Changed documentation theme to [furo](https://github.com/pradyunsg/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.
:lipstick: 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.