Getting started#

pytest Documentation Status

SDyPy - Structural Dynamics Python#

This package has the goal to defragment the open source effort in the scientific field of structural dynamics. Our goal is to speed-up the development and implementation of scientific methods. This an open and free initiative, we stand up for:

  • free MIT license,

  • open development,

  • open accepting of contributions,

  • open decision making,

  • multi-institutional engagement.

SDyPy depends on core SciPy stack packages, please use those packages where possible. If you would like an extension to be implemented, if it is general and not related to structural dynamics, consider implementing it into the SciPy stack.

Installation and basic usage#

Install this package by:

pip install sdypy

The sdypy offers a convenient way to access the functionality of the namespace packages.

First import the sdypy package:

import sdypy as sd

Access the EMA module:

model = sd.EMA.Model(FRF_matrix, freq_array)

or the io module:

uff_obj = sd.io.uff.UFF('file.uff')

or the FRF module:

frf_obj = sd.FRF.FRF(sampling_freq, excitation, response)

or the excitation module:

gausian_signal = sd.excitation.random_gaussian((N, PSD, fs))

or the view and model modules.

The umbrella also surfaces the SEP 5 unified-timeseries standard and its compliance validator as sd.sep005 (the standalone sdypy-sep005 package):

sd.sep005.assert_sep005(timeseries)   # raises on non-compliance

Unlike the six namespace sub-packages, sep005 is a cross-cutting data-format standard (see SEP 5), not a sdypy.* namespace package; it is exposed here for discoverability.

Package integration in SDyPy#

The existing efforts in the field of structural dynamics are included in SDyPy according to the level of integration (see SEP 1).

  • 1st level (part of SDyPy repository or organization):
    • sdypy-EMA (Experimental Modal Analysis in Python)

    • sdypy-io (Input/Output for Structural Dynamics)

    • sdypy-FRF (Frequency Response Function estimation)

    • sdypy-excitation (Excitation signals as used in structural dynamics and vibration fatigue)

    • sdypy-view (Visualization of structural dynamics data)

    • sdypy-model (Modeling of structural dynamics data)

  • 2nd level (namespace package in independent repository):

  • 3rd level (packages that correspond to the SDyPy template):
    • pyExSi (Excitation signal generator)

    • FLife (Vibration fatigue life in the spectral domain)

    • pyIDI (Image-Based Displacement Identification)

    • pyUFF (Universal File Format in Python)

    • pyFRF (Frequency Response Function estimation)

  • 4th level (these packages are developed completely independently but might be useful for 3rd, 2nd and 1st level packages):
    • pyFBS (Frequency Based Substructuring and Transfer Path Analysis)

    • speckle_pattern (Speckle pattern generation for DIC)

    • pyNNST (Obtaining non-stationary index for time-series)

    • python-acoustics (Useful tools for acousticians)

    • pyTrigger (Software trigger for data acquisition)

    • AMfe (Finite Element Research Code)

Contributing and development#

Contributions are welcome — see CONTRIBUTING.rst.

Development of the core umbrella is spec-driven (OpenSpec) and governed by the SEPs. Contributors and AI coding agents should start from AGENTS.md in the repository root: it is the canonical, tool-agnostic guide to the package layout, environment, commands, and required workflow. (Claude Code loads it automatically via CLAUDE.md.) The measurable requirements and how each is verified are catalogued in REQUIREMENTS.md.

SDyPy pull request guidelines#

Pull requests are always welcome, and the SDyPy community appreciates any help you give. Note that a code of conduct applies to all spaces managed by the SDyPy project, including issues and pull requests: sdypy/sdypy.

When submitting a pull request, we ask you check the following:

  1. Unit tests, documentation, and code style are in order. For details, please see follow the SciPy notes: scipy/scipy.

    It’s also OK to submit work in progress if you’re unsure of what this exactly means, in which case you’ll likely be asked to make some further changes.

  2. The contributed code will be licensed under SDyPy’s license, sdypy/sdypy. If you did not write the code yourself, you ensure the existing license is compatible and include the license information in the contributed files, or obtain a permission from the original author to relicense the contributed code.

Acknowledgements#

Substantial portions of this document were adapted from the SciPy project’s contributing document.