sdof


Namesdof JSON
Version 0.0.10 PyPI version JSON
download
home_page
SummaryLightning-fast integration of single degree-of-freedom systems.
upload_time2024-01-29 10:30:12
maintainer
docs_urlNone
author
requires_python
licenseBSD 2-Clause License Copyright (c) 2023, Claudio M. Perez Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
keywords dynamics integration seismic earthquake-engineering
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # `sdof`

<img align="left" src="https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/spectrum.svg" width="250px" alt="SDOF logo">

Lightning-fast integration of single degree-of-freedom systems.

<br>

<div style="align:center">

[![Latest PyPI version](https://img.shields.io/pypi/v/sdof?logo=pypi&style=for-the-badge)](https://pypi.python.org/pypi/sdof)
<span class="badge-npmversion"><a href="https://npmjs.org/package/sdof" title="View this project on NPM"><img src="https://img.shields.io/npm/v/sdof.svg?logo=npm&style=for-the-badge" alt="NPM version" /></a></span>

</div>

-------------------------------------------------

This package solves scalar differential equations of the form

$$
m \ddot{u} + c \dot{u} + k u = f(t)
$$

Integration is carried out using a Generalized - $\alpha$ integrator that
is implemented under the hood in highly optimized multi-threaded C code. 

Generalized - $\alpha$ is an implicit method that allows for high frequency energy
dissipation and second order accuracy. With the right selection of parameters,
the method can be specialized to the Hibert-Hughes-Taylor (HHT), or Newmark
families of integration schemes.

<hr />



## Python API

```python
import numpy as np
from sdof import integrate, peaks, spectrum

k  = 10.0
c  = 0.1592
m  = 0.2533
f  = np.sin(np.linspace(0, 5*np.pi, 100))
dt = 5*np.pi/100


u, v, a = integrate(f, dt, k, c, m)

D, V, A = spectrum(f, dt, periods=(0.02, 3.0, 100), damping=[0.02, 0.05])
```

<!--


## Integrator (Adapted from OpenSees docs)

<table>
<tbody>
<tr class="odd">
<td><p><code class="parameter-table-variable">alphaM</code></p></td>
<td><p>$\alpha_M$ factor</p></td>
</tr>
<tr class="even">
<td><p><code class="parameter-table-variable">alphaF</code></p></td>
<td><p>$\alpha_F$ factor</p></td>
</tr>
<tr class="odd">
<td><p><code class="parameter-table-variable">gamma</code></p></td>
<td><p>$\gamma$ factor</p></td>
</tr>
<tr class="even">
<td><p><code class="parameter-table-variable">beta</code></p></td>
<td><p>$\beta$ factor</p></td>
</tr>
</tbody>
</table>

<ol>
<li>$\alpha_F$ and
  $\alpha_M$ are defined differently that in the
  paper, we use $\alpha_F = (1-\alpha_f)$ and
  $\alpha_M=(1-\gamma_m)$ where
  $\alpha_f$ and $\alpha_m$
  are those used in the paper.</li>

<li>Like Newmark and other implicit schemes, the unconditional
  stability of this method applies to linear problems. There are no
  results showing stability of this method over the wide range of
  nonlinear problems that potentially exist. Experience indicates that the
  time step for implicit schemes in nonlinear situations can be much
  greater than those for explicit schemes.</li>

<li>$\alpha_M = 1.0, \alpha_F = 1.0$ produces the Newmark Method.</li>
<li>$\alpha_M = 1.0$ corresponds to the HHT method.</li>
<li>The method is second-order accurate provided $\gamma = \dfrac{1}{2} + \alpha_M - \alpha_F$</li>
<li>The method is unconditionally stable provided $\alpha_M \ge \alpha_F \ge \dfrac{1}{2}, \quad \beta \ge \dfrac{1}{4} +\dfrac{1}{2}(\gamma_M - \gamma_F)$</li>

<li>$\gamma$ and $\beta$
  are optional. The default values ensure the method is unconditionally
  stable, second order accurate and high frequency dissipation is
  maximized.</li>
</ol>
<p>The defaults are:</p>
<dl>
<dt></dt>
<dd>

$$\gamma = \dfrac{1}{2} + \gamma_M - \gamma_F$$

</dd>
</dl>
<p>and</p>
<dl>
<dt></dt>
<dd>

$$\beta = \dfrac{1}{4}(1 + \gamma_M - \gamma_F)^2$$

</dd>
</dl>

### Theory

The generalized $\alpha$ method is a one
step implicit method for solving the transient problem which attempts to
increase the amount of numerical damping present without degrading the order of
accuracy. In the HHT method, the same Newmark approximations are used:

<dl>
<dt></dt>
<dd>

$$u_{t+\Delta t} = u_t + \Delta t \dot u_t + [(0.5 - \beta)
\Delta t^2] \ddot u_t + [\beta \Delta t^2] \ddot u_{t+\Delta t}$$

</dd>
</dl>
<dl>
<dt></dt>
<dd>

$$\dot u_{t+\Delta t} = \dot u_t + [(1-\gamma)\Delta t] \ddot
u_t + [\gamma \Delta t ] \ddot u_{t+\Delta t} $$

</dd>
</dl>
<p>but the time-discrete momentum equation is modified:</p>

$$R_{t + \alpha_M \Delta t} = F_{t+\Delta t}^{\mathrm{ext}} - M \ddot
u_{t + \alpha_M \Delta t} - C \dot u_{t+\alpha_F \Delta t} -
F^{\mathrm{int}}(u_{t + \alpha_F \Delta t})
$$

where the displacements and velocities at the intermediate point are
given by:

$$u_{t+ \alpha_F \Delta t} = (1 - \alpha_F) u_t + \alpha_F
u_{t + \Delta t}$$

$$\dot u_{t+\alpha_F \Delta t} = (1-\alpha_F) \dot u_t +
\alpha_F \dot u_{t + \Delta t}$$

$$\ddot u_{t+\alpha_M \Delta t} = (1-\alpha_M) \ddot u_t +
\alpha_M \ddot u_{t + \Delta t}$$

<p>Following the methods outlined for Newmarks method, linearization of
the nonlinear momentum equation results in the following linear
equations:</p>

$$K_{t+\Delta t}^{*i} d u_{t+\Delta t}^{i+1} = R_{t+\Delta
t}^i$$

$$K_{t+\Delta t}^{*i} = \alpha_F K_t + \alpha_F \frac{\gamma}{\beta \Delta t} C_t + \alpha_M\frac{1}{\beta \Delta t^2}M$$

<p>and</p>

$$R_{t+\Delta t}^i = F_{t + \Delta t}^{\mathrm{ext}} - F(u_{t + \alpha
F \Delta t}^{i-1})^{\mathrm{int}} - C \dot u_{t+\alpha F \Delta t}^{i-1} - M
\ddot u_{t+ \alpha M \Delta t}^{i-1}$$

The linear equations are used to solve for 

$$u_{t+\alpha_F \Delta t}, \dot u_{t + \alpha_F \Delta t} \ddot u_{t+ \alpha M \Delta t}$$

Once convergence has been achieved the displacements,
velocities and accelerations at time $t + \Delta t$ can be computed.

## Compiling

The main integrator is implemented in standard C and can be compiled
as either a Python extension, or Javascript library (via WASM).

### Python

```
pip install .
```

### Javascript

- Install `emscripten` from [here](https://emscripten.org/)
- run `make`. This creates the following files:
  - `dist/fsdof.wasm` - Web assembly - compiled library,
  - `dist/fsdof.js` - interface to binary `fsdof.wasm`

- to test, you can use Python to start an HTTP server in the current directory
  as follows:
  ```shell
  python -m http.server .
  ```


## References

<p>J. Chung, G.M.Hubert. "A Time Integration Algorithm for Structural
   Dynamics with Improved Numerical Dissipation: The
   Generalized - $\alpha$ Method" ASME Journal of
   Applied Mechanics, 60, 371:375, 1993.</p>

<hr />

<p>Code Developed by: <span style="color:blue">fmk</span></p>

-->

## See Also

- [`mdof`](https://pypi.org/project/mdof)
- [`opensees`](https://pypi.org/project/opensees)

## Support

<table align="center">
<tr>

  <td>
    <a href="https://peer.berkeley.edu">
    <img src="https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/peer-black-300.png"
         alt="PEER Logo" width="200"/>
    </a>
  </td>

  <td>
    <a href="https://dot.ca.gov/">
    <img src="https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/Caltrans.svg.png"
         alt="Caltrans Logo" width="200"/>
    </a>
  </td>

  <td>
    <a href="https://peer.berkeley.edu">
    <img src="https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/brace2_logo-new3_ungrouped.svg"
         alt="BRACE2 Logo" width="200"/>
    </a>
  </td>
 
 </tr>
</table>


            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "sdof",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "dynamics,integration,seismic,earthquake-engineering",
    "author": "",
    "author_email": "\"Claudio M. Perez\" <50180406+claudioperez@users.noreply.github.com>, Chrystal Chern <52893467+chrystalchern@users.noreply.github.com>",
    "download_url": "",
    "platform": null,
    "description": "# `sdof`\r\n\r\n<img align=\"left\" src=\"https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/spectrum.svg\" width=\"250px\" alt=\"SDOF logo\">\r\n\r\nLightning-fast integration of single degree-of-freedom systems.\r\n\r\n<br>\r\n\r\n<div style=\"align:center\">\r\n\r\n[![Latest PyPI version](https://img.shields.io/pypi/v/sdof?logo=pypi&style=for-the-badge)](https://pypi.python.org/pypi/sdof)\r\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/sdof\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/sdof.svg?logo=npm&style=for-the-badge\" alt=\"NPM version\" /></a></span>\r\n\r\n</div>\r\n\r\n-------------------------------------------------\r\n\r\nThis package solves scalar differential equations of the form\r\n\r\n$$\r\nm \\ddot{u} + c \\dot{u} + k u = f(t)\r\n$$\r\n\r\nIntegration is carried out using a Generalized - $\\alpha$ integrator that\r\nis implemented under the hood in highly optimized multi-threaded C code. \r\n\r\nGeneralized - $\\alpha$ is an implicit method that allows for high frequency energy\r\ndissipation and second order accuracy. With the right selection of parameters,\r\nthe method can be specialized to the Hibert-Hughes-Taylor (HHT), or Newmark\r\nfamilies of integration schemes.\r\n\r\n<hr />\r\n\r\n\r\n\r\n## Python API\r\n\r\n```python\r\nimport numpy as np\r\nfrom sdof import integrate, peaks, spectrum\r\n\r\nk  = 10.0\r\nc  = 0.1592\r\nm  = 0.2533\r\nf  = np.sin(np.linspace(0, 5*np.pi, 100))\r\ndt = 5*np.pi/100\r\n\r\n\r\nu, v, a = integrate(f, dt, k, c, m)\r\n\r\nD, V, A = spectrum(f, dt, periods=(0.02, 3.0, 100), damping=[0.02, 0.05])\r\n```\r\n\r\n<!--\r\n\r\n\r\n## Integrator (Adapted from OpenSees docs)\r\n\r\n<table>\r\n<tbody>\r\n<tr class=\"odd\">\r\n<td><p><code class=\"parameter-table-variable\">alphaM</code></p></td>\r\n<td><p>$\\alpha_M$ factor</p></td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td><p><code class=\"parameter-table-variable\">alphaF</code></p></td>\r\n<td><p>$\\alpha_F$ factor</p></td>\r\n</tr>\r\n<tr class=\"odd\">\r\n<td><p><code class=\"parameter-table-variable\">gamma</code></p></td>\r\n<td><p>$\\gamma$ factor</p></td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td><p><code class=\"parameter-table-variable\">beta</code></p></td>\r\n<td><p>$\\beta$ factor</p></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n\r\n<ol>\r\n<li>$\\alpha_F$ and\r\n  $\\alpha_M$ are defined differently that in the\r\n  paper, we use $\\alpha_F = (1-\\alpha_f)$ and\r\n  $\\alpha_M=(1-\\gamma_m)$ where\r\n  $\\alpha_f$ and $\\alpha_m$\r\n  are those used in the paper.</li>\r\n\r\n<li>Like Newmark and other implicit schemes, the unconditional\r\n  stability of this method applies to linear problems. There are no\r\n  results showing stability of this method over the wide range of\r\n  nonlinear problems that potentially exist. Experience indicates that the\r\n  time step for implicit schemes in nonlinear situations can be much\r\n  greater than those for explicit schemes.</li>\r\n\r\n<li>$\\alpha_M = 1.0, \\alpha_F = 1.0$ produces the Newmark Method.</li>\r\n<li>$\\alpha_M = 1.0$ corresponds to the HHT method.</li>\r\n<li>The method is second-order accurate provided $\\gamma = \\dfrac{1}{2} + \\alpha_M - \\alpha_F$</li>\r\n<li>The method is unconditionally stable provided $\\alpha_M \\ge \\alpha_F \\ge \\dfrac{1}{2}, \\quad \\beta \\ge \\dfrac{1}{4} +\\dfrac{1}{2}(\\gamma_M - \\gamma_F)$</li>\r\n\r\n<li>$\\gamma$ and $\\beta$\r\n  are optional. The default values ensure the method is unconditionally\r\n  stable, second order accurate and high frequency dissipation is\r\n  maximized.</li>\r\n</ol>\r\n<p>The defaults are:</p>\r\n<dl>\r\n<dt></dt>\r\n<dd>\r\n\r\n$$\\gamma = \\dfrac{1}{2} + \\gamma_M - \\gamma_F$$\r\n\r\n</dd>\r\n</dl>\r\n<p>and</p>\r\n<dl>\r\n<dt></dt>\r\n<dd>\r\n\r\n$$\\beta = \\dfrac{1}{4}(1 + \\gamma_M - \\gamma_F)^2$$\r\n\r\n</dd>\r\n</dl>\r\n\r\n### Theory\r\n\r\nThe generalized $\\alpha$ method is a one\r\nstep implicit method for solving the transient problem which attempts to\r\nincrease the amount of numerical damping present without degrading the order of\r\naccuracy. In the HHT method, the same Newmark approximations are used:\r\n\r\n<dl>\r\n<dt></dt>\r\n<dd>\r\n\r\n$$u_{t+\\Delta t} = u_t + \\Delta t \\dot u_t + [(0.5 - \\beta)\r\n\\Delta t^2] \\ddot u_t + [\\beta \\Delta t^2] \\ddot u_{t+\\Delta t}$$\r\n\r\n</dd>\r\n</dl>\r\n<dl>\r\n<dt></dt>\r\n<dd>\r\n\r\n$$\\dot u_{t+\\Delta t} = \\dot u_t + [(1-\\gamma)\\Delta t] \\ddot\r\nu_t + [\\gamma \\Delta t ] \\ddot u_{t+\\Delta t} $$\r\n\r\n</dd>\r\n</dl>\r\n<p>but the time-discrete momentum equation is modified:</p>\r\n\r\n$$R_{t + \\alpha_M \\Delta t} = F_{t+\\Delta t}^{\\mathrm{ext}} - M \\ddot\r\nu_{t + \\alpha_M \\Delta t} - C \\dot u_{t+\\alpha_F \\Delta t} -\r\nF^{\\mathrm{int}}(u_{t + \\alpha_F \\Delta t})\r\n$$\r\n\r\nwhere the displacements and velocities at the intermediate point are\r\ngiven by:\r\n\r\n$$u_{t+ \\alpha_F \\Delta t} = (1 - \\alpha_F) u_t + \\alpha_F\r\nu_{t + \\Delta t}$$\r\n\r\n$$\\dot u_{t+\\alpha_F \\Delta t} = (1-\\alpha_F) \\dot u_t +\r\n\\alpha_F \\dot u_{t + \\Delta t}$$\r\n\r\n$$\\ddot u_{t+\\alpha_M \\Delta t} = (1-\\alpha_M) \\ddot u_t +\r\n\\alpha_M \\ddot u_{t + \\Delta t}$$\r\n\r\n<p>Following the methods outlined for Newmarks method, linearization of\r\nthe nonlinear momentum equation results in the following linear\r\nequations:</p>\r\n\r\n$$K_{t+\\Delta t}^{*i} d u_{t+\\Delta t}^{i+1} = R_{t+\\Delta\r\nt}^i$$\r\n\r\n$$K_{t+\\Delta t}^{*i} = \\alpha_F K_t + \\alpha_F \\frac{\\gamma}{\\beta \\Delta t} C_t + \\alpha_M\\frac{1}{\\beta \\Delta t^2}M$$\r\n\r\n<p>and</p>\r\n\r\n$$R_{t+\\Delta t}^i = F_{t + \\Delta t}^{\\mathrm{ext}} - F(u_{t + \\alpha\r\nF \\Delta t}^{i-1})^{\\mathrm{int}} - C \\dot u_{t+\\alpha F \\Delta t}^{i-1} - M\r\n\\ddot u_{t+ \\alpha M \\Delta t}^{i-1}$$\r\n\r\nThe linear equations are used to solve for \r\n\r\n$$u_{t+\\alpha_F \\Delta t}, \\dot u_{t + \\alpha_F \\Delta t} \\ddot u_{t+ \\alpha M \\Delta t}$$\r\n\r\nOnce convergence has been achieved the displacements,\r\nvelocities and accelerations at time $t + \\Delta t$ can be computed.\r\n\r\n## Compiling\r\n\r\nThe main integrator is implemented in standard C and can be compiled\r\nas either a Python extension, or Javascript library (via WASM).\r\n\r\n### Python\r\n\r\n```\r\npip install .\r\n```\r\n\r\n### Javascript\r\n\r\n- Install `emscripten` from [here](https://emscripten.org/)\r\n- run `make`. This creates the following files:\r\n  - `dist/fsdof.wasm` - Web assembly - compiled library,\r\n  - `dist/fsdof.js` - interface to binary `fsdof.wasm`\r\n\r\n- to test, you can use Python to start an HTTP server in the current directory\r\n  as follows:\r\n  ```shell\r\n  python -m http.server .\r\n  ```\r\n\r\n\r\n## References\r\n\r\n<p>J. Chung, G.M.Hubert. \"A Time Integration Algorithm for Structural\r\n   Dynamics with Improved Numerical Dissipation: The\r\n   Generalized - $\\alpha$ Method\" ASME Journal of\r\n   Applied Mechanics, 60, 371:375, 1993.</p>\r\n\r\n<hr />\r\n\r\n<p>Code Developed by: <span style=\"color:blue\">fmk</span></p>\r\n\r\n-->\r\n\r\n## See Also\r\n\r\n- [`mdof`](https://pypi.org/project/mdof)\r\n- [`opensees`](https://pypi.org/project/opensees)\r\n\r\n## Support\r\n\r\n<table align=\"center\">\r\n<tr>\r\n\r\n  <td>\r\n    <a href=\"https://peer.berkeley.edu\">\r\n    <img src=\"https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/peer-black-300.png\"\r\n         alt=\"PEER Logo\" width=\"200\"/>\r\n    </a>\r\n  </td>\r\n\r\n  <td>\r\n    <a href=\"https://dot.ca.gov/\">\r\n    <img src=\"https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/Caltrans.svg.png\"\r\n         alt=\"Caltrans Logo\" width=\"200\"/>\r\n    </a>\r\n  </td>\r\n\r\n  <td>\r\n    <a href=\"https://peer.berkeley.edu\">\r\n    <img src=\"https://raw.githubusercontent.com/claudioperez/sdof/master/docs/assets/brace2_logo-new3_ungrouped.svg\"\r\n         alt=\"BRACE2 Logo\" width=\"200\"/>\r\n    </a>\r\n  </td>\r\n \r\n </tr>\r\n</table>\r\n\r\n",
    "bugtrack_url": null,
    "license": "BSD 2-Clause License  Copyright (c) 2023, Claudio M. Perez  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ",
    "summary": "Lightning-fast integration of single degree-of-freedom systems.",
    "version": "0.0.10",
    "project_urls": {
        "documentation": "https://claudioperez.github.io/sdof",
        "repository": "http://github.com/claudioperez/sdof"
    },
    "split_keywords": [
        "dynamics",
        "integration",
        "seismic",
        "earthquake-engineering"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1ccc59a32f519498f20bfa9c9fcd42a95ec3424f6a2874eb85ab6e8928681c75",
                "md5": "770fe899f0ac7b2d174118094939461c",
                "sha256": "78abf7c42ef4e01a12b448328557f67c983f0d7bc78275df5d8fc0ff910287b2"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "770fe899f0ac7b2d174118094939461c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 40773,
            "upload_time": "2024-01-29T10:30:12",
            "upload_time_iso_8601": "2024-01-29T10:30:12.515616Z",
            "url": "https://files.pythonhosted.org/packages/1c/cc/59a32f519498f20bfa9c9fcd42a95ec3424f6a2874eb85ab6e8928681c75/sdof-0.0.10-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cb245f9470af512f5cbbd03277dea058fd7099abb98de5150196e180d0474cfa",
                "md5": "1e74400d6c7fe0c17958102903ce690f",
                "sha256": "8465a637599117f53d620a5c3b400953cf3a47f400bb6edefe8f4eba0a566411"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1e74400d6c7fe0c17958102903ce690f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 31216,
            "upload_time": "2024-01-29T10:30:14",
            "upload_time_iso_8601": "2024-01-29T10:30:14.139058Z",
            "url": "https://files.pythonhosted.org/packages/cb/24/5f9470af512f5cbbd03277dea058fd7099abb98de5150196e180d0474cfa/sdof-0.0.10-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec48c47c35da774d25a57cd9b0bdd4d437ee3cc51d0afdc876f45e3c240ef408",
                "md5": "4f7c18d583c1ebfa25c7cb11d2c6aed4",
                "sha256": "ebb464af84bba08c73cfa9d7991991c103d793f945c8e5df820f281e9f904bdd"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "4f7c18d583c1ebfa25c7cb11d2c6aed4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 40772,
            "upload_time": "2024-01-29T10:30:15",
            "upload_time_iso_8601": "2024-01-29T10:30:15.311094Z",
            "url": "https://files.pythonhosted.org/packages/ec/48/c47c35da774d25a57cd9b0bdd4d437ee3cc51d0afdc876f45e3c240ef408/sdof-0.0.10-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb2189a6c7ab908881e496d09f048c61cf4e3a9b24651e3892646a94ed421c8c",
                "md5": "de404ae3eab3183d4b0051ce9142c0d3",
                "sha256": "a10cb3ecb49709da7b7aad6f5a85acd271437519fc6cb762e8ddb0d7561e64cf"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "de404ae3eab3183d4b0051ce9142c0d3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 31218,
            "upload_time": "2024-01-29T10:30:16",
            "upload_time_iso_8601": "2024-01-29T10:30:16.607467Z",
            "url": "https://files.pythonhosted.org/packages/fb/21/89a6c7ab908881e496d09f048c61cf4e3a9b24651e3892646a94ed421c8c/sdof-0.0.10-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "66a0efda85ac1abf411fb95a6394429916bf825602a96b6e177f86c391bbde38",
                "md5": "a1bb9c58c2e5d4540eca06c67e698510",
                "sha256": "4e55d82a4543604af14d5ea6385a171f8cfece6103849842ea70a4bb9ab4d707"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp37-cp37m-win32.whl",
            "has_sig": false,
            "md5_digest": "a1bb9c58c2e5d4540eca06c67e698510",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 40762,
            "upload_time": "2024-01-29T10:30:17",
            "upload_time_iso_8601": "2024-01-29T10:30:17.950977Z",
            "url": "https://files.pythonhosted.org/packages/66/a0/efda85ac1abf411fb95a6394429916bf825602a96b6e177f86c391bbde38/sdof-0.0.10-cp37-cp37m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e61dff6d69a9f1f6852aaa617b956aec82f678fa21780032a708662b9f4978d9",
                "md5": "b9fd0c68c69ca10d21d2da7782b9b480",
                "sha256": "54c952dbef2414fd92af7bc375128f0263ea4ad1168543e17ab609318ed40af9"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b9fd0c68c69ca10d21d2da7782b9b480",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 31210,
            "upload_time": "2024-01-29T10:30:19",
            "upload_time_iso_8601": "2024-01-29T10:30:19.405743Z",
            "url": "https://files.pythonhosted.org/packages/e6/1d/ff6d69a9f1f6852aaa617b956aec82f678fa21780032a708662b9f4978d9/sdof-0.0.10-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2984d2e9b208f141401eb30ddfbb598f7d4c8e12452e8808897aa9dffa11d467",
                "md5": "3de259082a33362052d131448a586ede",
                "sha256": "760757b23260220105e729979119e76653e8d7d6454d4210661d455ca5f00f02"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "3de259082a33362052d131448a586ede",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 40760,
            "upload_time": "2024-01-29T10:30:20",
            "upload_time_iso_8601": "2024-01-29T10:30:20.655280Z",
            "url": "https://files.pythonhosted.org/packages/29/84/d2e9b208f141401eb30ddfbb598f7d4c8e12452e8808897aa9dffa11d467/sdof-0.0.10-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "50ae95b039761734640b4b509dfb60bf8af1428e7f63841994faea35d07b7b55",
                "md5": "f7110adee91f5cb924e00bc2ed25bc39",
                "sha256": "bbc08a6c79db39ffee415f1c1e259299927da481b901eb8c9a798d75ba5abd77"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f7110adee91f5cb924e00bc2ed25bc39",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 31208,
            "upload_time": "2024-01-29T10:30:21",
            "upload_time_iso_8601": "2024-01-29T10:30:21.702611Z",
            "url": "https://files.pythonhosted.org/packages/50/ae/95b039761734640b4b509dfb60bf8af1428e7f63841994faea35d07b7b55/sdof-0.0.10-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b1626a5af25e3324dd27cb496f76035c90cf1419f0b7870ff89a0b9eaed999e7",
                "md5": "a5e1b89f96234241d32c63834adad12c",
                "sha256": "5b0ac8dbd690ea212539a57d29df7e965ec79fa60592f268ca1f50fa9b48c366"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "a5e1b89f96234241d32c63834adad12c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 40757,
            "upload_time": "2024-01-29T10:30:23",
            "upload_time_iso_8601": "2024-01-29T10:30:23.553338Z",
            "url": "https://files.pythonhosted.org/packages/b1/62/6a5af25e3324dd27cb496f76035c90cf1419f0b7870ff89a0b9eaed999e7/sdof-0.0.10-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ae6f6a45057d43dc1368f6e413e77f21bd7f345c8515c56eee8e1c4c3222ed81",
                "md5": "93bed21f6fffc35e45cc6b596274d0f1",
                "sha256": "23f42d38ee0643010f7d9d845e8e263e1d06b24c7b2997f6065e37a3d9499d2d"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "93bed21f6fffc35e45cc6b596274d0f1",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 31209,
            "upload_time": "2024-01-29T10:30:25",
            "upload_time_iso_8601": "2024-01-29T10:30:25.318141Z",
            "url": "https://files.pythonhosted.org/packages/ae/6f/6a45057d43dc1368f6e413e77f21bd7f345c8515c56eee8e1c4c3222ed81/sdof-0.0.10-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "baa0138d60e6562d67658cef0c1b82537b5c55bede2389356180e35bab4b7aff",
                "md5": "73bba6cb2ab55e131c3cc3e21726b491",
                "sha256": "4b0fbfc624bab303ebb3b15e0f77bca99eb25dee3a515373eba7d4ceafc9a408"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-pp37-pypy37_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "73bba6cb2ab55e131c3cc3e21726b491",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": null,
            "size": 31269,
            "upload_time": "2024-01-29T10:30:26",
            "upload_time_iso_8601": "2024-01-29T10:30:26.951321Z",
            "url": "https://files.pythonhosted.org/packages/ba/a0/138d60e6562d67658cef0c1b82537b5c55bede2389356180e35bab4b7aff/sdof-0.0.10-pp37-pypy37_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "df368c2194317ccb0cbb10ac3e18e96e43029316a078c92743994ed9a287ddae",
                "md5": "77e4fcf2935fe143da6942d8e7a6e033",
                "sha256": "3eac4ceef9678b16292f8009320cb2e24ee28c63ec3cb0e0b69b1ec0426ca567"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-pp38-pypy38_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "77e4fcf2935fe143da6942d8e7a6e033",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": null,
            "size": 31267,
            "upload_time": "2024-01-29T10:30:28",
            "upload_time_iso_8601": "2024-01-29T10:30:28.582600Z",
            "url": "https://files.pythonhosted.org/packages/df/36/8c2194317ccb0cbb10ac3e18e96e43029316a078c92743994ed9a287ddae/sdof-0.0.10-pp38-pypy38_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eed13c2e49e4118106948cab5492ec54731ae1700659aeae58f951efcaa72c90",
                "md5": "ea2645622ad9553f5705bae9c3cf0205",
                "sha256": "ac76d60c8d3517015461a8c2e8572a31a4eb998fb22f9c8e0da69f680a77a444"
            },
            "downloads": -1,
            "filename": "sdof-0.0.10-pp39-pypy39_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ea2645622ad9553f5705bae9c3cf0205",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": null,
            "size": 31267,
            "upload_time": "2024-01-29T10:30:30",
            "upload_time_iso_8601": "2024-01-29T10:30:30.009039Z",
            "url": "https://files.pythonhosted.org/packages/ee/d1/3c2e49e4118106948cab5492ec54731ae1700659aeae58f951efcaa72c90/sdof-0.0.10-pp39-pypy39_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-29 10:30:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "claudioperez",
    "github_project": "sdof",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "sdof"
}
        
Elapsed time: 0.18348s