Skip to main content

Python bindings and tools based on the DSS C-API project, the customized OpenDSS implementation from DSS-Extensions.org

Project description

Builds PyPI Install with conda conda package version Supports Linux Supports macOS Supports Microsoft Windows

DSS Python: Extended bindings for an implementation of EPRI's OpenDSS

Python bindings and misc tools for using the OpenDSS (EPRI Distribution System Simulator) engine through the alternative/unofficial implementation from the DSS C-API library. Based on DSS C-API, CFFI and NumPy, aiming for enhanced performance and full compatibility with the official COM object API on Windows, Linux and MacOS. Support includes Intel-based (x86 and x64) processors, as well as ARM processors for Linux and macOS (including Apple M1 and later).

Please see FAQ for a couple of notes. Check also the other projects from DSS-Extensions.org:

  • DSS C-API library: the base library that exposes a modified version of EPRI's OpenDSS through a more traditional C interface, built with the open-source Free Pascal compiler instead of Delphi. As of 2022, this base library includes several extensive changes, while retaining very good compatibility.
  • dss.hpp: header-only library for C++, hosted within DSS C-API (include/ directory). Allows using DSS C-API more comfortably from C++, abstract memory management and low-level details such as API conventions of the DSS C-API library.
  • OpenDSSDirect.py: if you don't need COM compatibility, or just would like to check its extra funcionalities. You can mix DSS Python and OpenDSSDirect.py -- for example, if you have old code using the official COM objects, you could quickly switch to DSS Python with very few code changes, and then use opendssdirect.utils to generate some DataFrames.
  • OpenDSSDirect.jl is a Julia module, created by Tom Short (@tshort), migrated with the help of Dheepak Krishnamurthy (@kdheepak) to DSS C-API instead of the DDLL in Feb 2019.
  • DSS Sharp is available for .NET/C#, packaged on NuGet, also mimics the COM classes (drop-in replacement for OpenDSSengine.DLL). The current version is now multi-platform too! Soon it will be possible to use it via COM.
  • DSS MATLAB presents multi-platform integration (Windows, Linux, MacOS) with DSS C-API and is also very compatible with the API of the official OpenDSS COM classes.

Version 0.12.1 is based on OpenDSS revision 3460 (few commits after OpenDSS v9.4.1.2, but we pick and choose when to port certain features). While we plan to add a lot more funcionality into DSS Python, the main goal of creating a COM-compatible API has been reached in 2018. If you find an unexpected missing feature, please report it! Currently missing features that will be implemented eventualy are plotting (partial implementation available) and diakoptics (planned for future version).

This module mimics the COM structure (as exposed via win32com or comtypes) -- see The DSS instance for some docs -- effectively enabling multi-platform compatibility at Python level. Compared to other options, it provides easier migration from code that uses the official OpenDSS through COM. Most of the COM documentation can be used as-is, but instead of returning tuples or lists, this modules returns/accepts NumPy arrays for numeric data exchange, which is usually preferred by the users.

The module depends on CFFI, NumPy and, optionally, SciPy.Sparse for reading the sparse system admittance matrix. Pandas and matplotlib might be added as optional dependencies to enable plotting and other features.

Brief release history

  • 2022-07-16 / version 0.12.1: Very minor release to address a bug found in v0.12.0, to add the Storages API, and include the property descriptions/help.
  • 2022-07-14 / version 0.12.0: Major release merging parallel features, multiple DSS engine instances, ZIP file support, incremental Y matrix updates, new API functions, partial plotting support, better performance, and so on. General usage examples for the new features will be incrementally added to https://github.com/dss-extensions/dss-extensions
  • 2021-03-09 / version 0.10.7-1: Very minor release to fix issues with some of the energy meter reports.
  • 2020-12-28 / version 0.10.7: Maintenance release to match DSS C-API 0.10.7, based on on OpenDSS revision 2963. Includes fixes and new features from the official OpenDSS.
  • 2020-07-31 / version 0.10.6: Maintenance release to match DSS C-API 0.10.6, based on on OpenDSS revision 2909. New important settings: DSS.LegacyModels and DSS.Error.ExtendedErrors.
  • 2020-03-03 / version 0.10.5: Maintenance release to match DSS C-API 0.10.5, based on on OpenDSS revision 2837. Temporarily drops the v8 parallel-machine functions, as well as conda packages on Windows.
  • 2019-11-16 / version 0.10.4: Maintenance release to match DSS C-API 0.10.4.
  • 2019-05-22 / version 0.10.3: Some important fixes, better general performance, new API extensions, new features ported from COM and the OpenDSS version 8 codebase.
  • 2019-02-28 / version 0.10.2: Some small fixes, adds the missing CtrlQueue.Push, faster LoadShapes and new property DSS.AllowEditor to toggle editor calls.
  • 2019-02-17 / version 0.10.1: Integrate DSS C-API changes/fix, some small fixes, and more error-checking.
  • 2018-11-17 / version 0.10.0: Lots of changes, fixes and new features. Check the new changelog document for a list.
  • 2018-08-12 / version 0.9.8: Reorganize modules (v7 and v8), adds 8 missing methods and new backend methods for OpenDSSDirect.py v0.3+. Integrates many fixes from DSS_CAPI and the upstream OpenDSS.
  • 2018-04-30 / version 0.9.7: Fix some of the setters that used array data.
  • 2018-04-05 / version 0.9.6: Adds missing ActiveCircuit.CktElements[index] (or ...CktElements(index)) and ActiveCircuit.Buses[index] (or ...Buses(index)).
  • 2018-03-07 / version 0.9.4: Allows using len on several classes, fixes DSSProperty, and includes COM helpstrings as docstrings. Contains changes up to OpenDSS revision 2152.
  • 2018-02-16 / version 0.9.3: Integrates COM interface fixes from revision 2136 (First Next iteration on some elements)
  • 2018-02-12 / version 0.9.2: Experimental support for OpenDSS-PM (at the moment, a custom patch is provided for FreePascal support) and port COM interface fixes (OpenDSS revision 2134)
  • 2018-02-08 / version 0.9.1: First public release (OpenDSS revision 2123)

Missing features and limitations

Most limitations are inherited from dss_capi, i.e., these are not implemented:

  • DSSEvents from DLL/ImplEvents.pas: seems too dependent on COM.
  • DSSProgress from DLL/ImplDSSProgress.pas: would need a reimplementation depending on the target UI (GUI, text, headless, etc.).
  • OpenDSS-GIS features are not implemented since they're not open-source.

In general, the DLL from dss_capi provides more features than both the official Direct DLL and the COM object.

Extra features

Besides most of the COM methods, some of the unique DDLL methods are also exposed in adapted forms, namely the methods from DYMatrix.pas, especially GetCompressedYMatrix (check the source files for more information).

Since no GUI components are used in the FreePascal DLL, we map nearly all OpenDSS errors to Python exceptions, which seems a more natural way of working in Python. You can still manually trigger an error check by calling the function CheckForError() from the main module or manually checking the DSS.Error interface.

Installing

On all major platforms, you can install directly from pip:

    pip install dss_python

Or, if you're using the Anaconda distribution, you can try:

    conda install -c dss-extensions dss_python

Binary wheels are provided for all major platforms (Windows, Linux and MacOS) and many combinations of Python versions (3.5 to 3.10). If you have issues with a specific version, please open an issue about it. Conda packages support at least Python 3.7 to 3.10 (varying according to the release).

After a successful installation, you can then import the dss module from your Python interpreter.

Building

Get the repository:

    git clone https://github.com/dss-extensions/dss_python.git

Assuming you successfully built or downloaded the DSS C-API DLLs (check its repository for instructions), keep the folder organization as follows:

dss_capi/
dss_python/

Open a command prompt in the dss_python subfolder and run the build process:

python setup.py build
python setup.py install

If you are familiar with conda-build, there is a complete recipe to build DSS C-API, KLUSolve(X) and DSS Python in the conda subfolder.

Example usage

If you were using win32com in code like:

import win32com.client 
dss_engine = win32com.client.gencache.EnsureDispatch("OpenDSSEngine.DSS")

or comtypes (incidentally, comtypes is usually faster than win32com, so we recommend it if you need the official OpenDSS COM module):

import comtypes.client
dss_engine = comtypes.client.CreateObject("OpenDSSEngine.DSS")

you can replace that fragment with:

from dss import DSS as dss_engine

If you need the mixed-cased handling (that is, you were not using early bindings with win32com), add a call to dss.use_com_compat().

Assuming you have a DSS script named master.dss, you should be able to run it as shown below:

from dss import DSS as dss_engine

dss_engine.Text.Command = "compile 'c:/dss_files/master.dss'"
dss_engine.ActiveCircuit.Solution.Solve()
voltages = dss_engine.ActiveCircuit.AllBusVolts

for i in range(len(voltages) // 2):
    print('node %d: %f + j%f' % (i, voltages[2*i], voltages[2*i + 1]))

Testing

Since the DLL is built using the Free Pascal compiler, which is not officially supported by EPRI, the results are validated running sample networks provided in the official OpenDSS distribution. The only modifications are done directly by the script, removing interactive features and some other minor issues. Most of the sample files from the official OpenDSS repository are used for validation.

The validation scripts is tests/validation.py and requires the same folder structure as the building process. You need win32com to run it on Windows.

As of version 0.11, the full validation suite can be run on the three supported platforms. This is possible by saving the official COM DLL output and loading it on macOS and Linux. We hope to fully automate this validation in the future.

Roadmap: docs and plotting

Besides bug fixes, the main funcionality of this library is mostly done. Notable desirable features that may be implemented are:

Expect news about these items by version 0.13.

While the base library (DSS C-API) will go through some API changes before v1.0, those do not affect usage from the Python side.

Questions?

If you have any question, feel free to open a ticket on GitHub (here or at https://github.com/dss-extensions/dss-extensions), or contact directly me through email (pmeira at ieee.org). Please allow me a few days to respond.

Credits / Acknowlegement

DSS Python is based on EPRI's OpenDSS via the dss_capi project, so check its licensing information too.

This project is licensed under the (new) BSD, available in the LICENSE file. It's the same license OpenDSS uses (OPENDSS_LICENSE). OpenDSS itself uses KLUSolve and SuiteSparse, licensed under the GNU LGPL 2.1.

I thank my colleagues at the University of Campinas, Brazil, for providing feedback and helping me test this package during its inception in 2016-2017, as well as the many users and collaborators that have been using this or other DSS Extensions since the public releases in 2018.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dss_python-0.13.0.dev0-cp37-abi3-win_amd64.whl (17.2 MB view details)

Uploaded CPython 3.7+Windows x86-64

dss_python-0.13.0.dev0-cp37-abi3-win32.whl (15.9 MB view details)

Uploaded CPython 3.7+Windows x86

dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_28_x86_64.whl (20.3 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.28+ x86-64

dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20.3 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (19.0 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ i686

dss_python-0.13.0.dev0-cp37-abi3-macosx_12_0_arm64.whl (6.1 MB view details)

Uploaded CPython 3.7+macOS 12.0+ ARM64

dss_python-0.13.0.dev0-cp37-abi3-macosx_10_15_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.7+macOS 10.15+ x86-64

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: dss_python-0.13.0.dev0-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 17.2 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.12

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1957b84c8532dbde9a6f05e6140664bd72566f97ceea3e5adc7b4752e3874abf
MD5 dd5abddda53fd53c0138190a848372e4
BLAKE2b-256 9528a56e29b5737a13d5cb5f476aa014a727bfc19eafb142d0ebbe8b9c5cb9d5

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-win32.whl.

File metadata

  • Download URL: dss_python-0.13.0.dev0-cp37-abi3-win32.whl
  • Upload date:
  • Size: 15.9 MB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.12

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 3481801edc8cae7d0bedc49737a7411b9a800d297887f13de95e260e791c9e17
MD5 1713a71844895b10434978a27e943b42
BLAKE2b-256 c943bed07b56c4859af54b119507bf6423cec6d2a4ee6493e40890c271ad9577

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 20.3 MB
  • Tags: CPython 3.7+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.12

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7bff9b46155d4a29f77ef0c470b50c1b602799c6ed21afa4486a2775886bc943
MD5 b78d1beb7f9e8b88ab1e7ec0479d131a
BLAKE2b-256 95df1961336f4d5d373d2a20695f25b9aad5c243a0b2cb702dfd2dc7cf980f2f

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54f1be7633baba1ba4cd3ef8f19d9a08450706589815e6f7a8f1fc20b35ceea9
MD5 0a36093b63e67e61485e2d71b0527d48
BLAKE2b-256 456676b96fc42e7075acc5812c0e99c57c2554aa278a571356753861da71d92a

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1b8512aa57e96c81df74f5931786326448a06768b12b74d76023f6399a100451
MD5 982133b3ebff7c4d349f7ef1fcc021fc
BLAKE2b-256 9a3f5ebecbce479b562b5ab3653634bba25295748d9c83ee5e3348b55c5813cd

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-macosx_12_0_arm64.whl.

File metadata

  • Download URL: dss_python-0.13.0.dev0-cp37-abi3-macosx_12_0_arm64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.7+, macOS 12.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.12

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 6644c623ec0c3a3885102c3a2268ad23100eff928ce6cd8e5a04a55d5a116c61
MD5 9268aa85b25a863243e92a15a1ca595e
BLAKE2b-256 74ec95df0f9e762a3bf9b8a7dba5f1f1d5af0c05e26a6154cb63430f2bf3233f

See more details on using hashes here.

File details

Details for the file dss_python-0.13.0.dev0-cp37-abi3-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: dss_python-0.13.0.dev0-cp37-abi3-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 6.4 MB
  • Tags: CPython 3.7+, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.12

File hashes

Hashes for dss_python-0.13.0.dev0-cp37-abi3-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3124bbdbeb0b863f8db2b219ab9576bbb050445149a0678d58700d6d82099e5e
MD5 68e709c77f4967fe51995366b5c4c14d
BLAKE2b-256 e2c8ee5eab7290288bfbfd666e0ade8c77c1a18ae235c99dd52eb9b7a78334a4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page