Skip to main content

glm Python library

Project description

glm PyPI Python version compatibility status Build Status

A fast GridLAB-D to JSON (and back) parser.

  • Fast GLM to JSON converter.
    • Supports nested objects, schedules, definitions, directives, modules, includes and clock objects
  • Fast JSON to GLM converter.
  • Native support for Python, returns nested dictionaries.

  • Descriptive error messages when unable to parse a GridLAB-D model file.

  • Tested on all examples in the GridLAB-D source repository.

Install

Go to the latest releases page for the Python or the CLI for various operating systems.

Python

You can pip install the package from PyPI or using the wheel (files with extension .whl) after downloading it or directly from the URL from the releases page.

The following installs the latest glm package for Windows, MacOSX or Linux from PyPI. This will work for Python2 or Python3.

pip install glm

This also installs the glm2json and json2glm cli utilities.

CLI

If you want to use the CLI, you can unzip the file from the releases page for your operating system. There will be two executables in the folder, glm2json and json2glm. On Windows, you may have to rename the files to add the .exe at the end of the executable in order to run it from a Windows CMD prompt. You will be able to run it from a Git Bash prompt without renaming it. You can use the following commands to download and unzip the files on the respective operating systems.

Windows

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
curl -LO "https://github.com/NREL/glm/releases/download/$VERSION/glm-windows-amd64.zip"
unzip glm-windows-amd64.zip

OSX

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
curl -LO "https://github.com/NREL/glm/releases/download/$VERSION/glm-osx-amd64.tar.xz"
tar -zxvf glm-osx-amd64.tar.xz

Linux

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
curl -LO "https://github.com/NREL/glm/releases/download/$VERSION/glm-linux-amd64.tar.xz"
tar -zxvf glm-linux-amd64.tar.xz

The contents of the compressed archive will contain a command line executable, and a module that can be imported into Python.

Documentation

You can use this from the command line as follows:

Usage:
  glm2json [required&optional-params]
Convert from glm/json to json/glm
  Options(opt-arg sep :|=|spc):
  -h, --help                            write this help to stdout
  --version           bool    false     write version to stdout
  -p=, --pathToFile=  string  REQUIRED  set pathToFile
  --pretty            bool    false     set pretty
./glm2json --path-to-file ./tests/data/4node.glm --pretty                                                                                                                            ✔  10397  18:20:47
{
  "clock": {
    "timestamp": "2000-01-01 0:00:00",
    "timezone": "EST+5EDT"
  },
  "includes": [],
  "objects": [
    {
      "name": "overhead_line_conductor:100",
      "attributes": {
        "name": "PhaseCond",
        "geometric_mean_radius": "0.0244 ft",
        "resistance": "0.306"
      },
      "children": []
    },
    {
      "name": "overhead_line_conductor:101",
      "attributes": {
        "name": "NeutralCond",
        "geometric_mean_radius": "0.00814 ft",
        "resistance": "0.592"
      },
      "children": []
    },
    {
      "name": "line_spacing:200",
      "attributes": {
        "name": "LineSpacing",
        "distance_AB": "2.5",
        "distance_BC": "4.5",
        "distance_AC": "7.0",
        "distance_AN": "5.656",
        "distance_BN": "4.272",
        "distance_CN": "5.0"
      },
      "children": []
    },
    {
      "name": "line_configuration:1",
      "attributes": {
        "name": "LineConf",
        "conductor_A": "PhaseCond",
        "conductor_B": "PhaseCond",
        "conductor_C": "PhaseCond",
        "conductor_N": "NeutralCond",
        "spacing": "LineSpacing"
      },
      "children": []
    },
    {
      "name": "overhead_line",
      "attributes": {
        "name": "Line1",
        "phases": "ABCN",
        "from": "Node1",
        "to": "Node2",
        "length": "2000 ft",
        "configuration": "LineConf",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "overhead_line",
      "attributes": {
        "name": "Line2",
        "phases": "ABCN",
        "from": "Node3",
        "to": "Node4",
        "length": "2500 ft",
        "configuration": "LineConf",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "node",
      "attributes": {
        "name": "Node1",
        "phases": "ABCN",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "node",
      "attributes": {
        "name": "Node2",
        "phases": "ABCN",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "node",
      "attributes": {
        "name": "Node3",
        "phases": "ABCN",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "node",
      "attributes": {
        "name": "Node4",
        "phases": "ABCN",
        "nominal_voltage": "124.0"
      },
      "children": []
    },
    {
      "name": "tape.recorder",
      "attributes": {
        "interval": "4.0",
        "parent": "network_node2",
        "limit": "21600",
        "file": "./csv_output/network_node2.csv",
        "property": "measured_real_power, measured_real_energy, voltage_A, voltage_B, voltage_C"
      },
      "children": []
    }
  ],
  "modules": [
    {
      "name": "powerflow",
      "attributes": {}
    },
    {
      "name": "tape",
      "attributes": {}
    }
  ],
  "directives": [],
  "definitions": [],
  "schedules": []
}

Issues

Feel free to open an issue if something is not working as expected.

Developer Guide

  • Install Nim
  • Run nimble install -y to generate binaries

If you want to install the latest version from GitHub, you can use the following commands. The GitHub release is identical to that on PyPI.

Windows

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
pip install https://github.com/NREL/glm/releases/download/$VERSION/glm-${VERSION#"v"}-py2.py3-none-win_amd64.whl

OSX

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
pip install https://github.com/NREL/glm/releases/download/$VERSION/glm-${VERSION#"v"}-py2.py3-none-macosx_10_7_x86_64.whl

Linux

export VERSION=$(curl -s "https://github.com/NREL/glm/releases/latest" | grep -o 'tag/[v.0-9]*' | awk -F/ '{print $2}')
pip install https://github.com/NREL/glm/releases/download/$VERSION/glm-${VERSION#"v"}-py2.py3-none-manylinux1_x86_64.whl

Project details


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

glm-0.4.1-py2.py3-none-win_amd64.whl (445.4 kB view details)

Uploaded Python 2 Python 3 Windows x86-64

glm-0.4.1-py2.py3-none-manylinux1_x86_64.whl (429.4 kB view details)

Uploaded Python 2 Python 3

glm-0.4.1-py2.py3-none-macosx_10_7_x86_64.whl (318.0 kB view details)

Uploaded Python 2 Python 3 macOS 10.7+ x86-64

File details

Details for the file glm-0.4.1-py2.py3-none-win_amd64.whl.

File metadata

  • Download URL: glm-0.4.1-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 445.4 kB
  • Tags: Python 2, Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for glm-0.4.1-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 778ef2c85d220ea8f23e0fd204a2311a611651df4afa231f8d7370dc1b9c9adb
MD5 32d48d164e13e6f312e45a0e18083274
BLAKE2b-256 34ec6108b5577790fb035c5639c9793107367d752de22e11ee644671e98036eb

See more details on using hashes here.

Provenance

File details

Details for the file glm-0.4.1-py2.py3-none-manylinux1_x86_64.whl.

File metadata

  • Download URL: glm-0.4.1-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 429.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for glm-0.4.1-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 28453842e8a59560318241661092ff51a7378ead827d37178f6236e2ef8738fd
MD5 5b8411e1ab9fc986d6d80a9109eb0040
BLAKE2b-256 0d0a63d65fecd22c150edda4113593feef20139263f48827cd7028d1352940d6

See more details on using hashes here.

Provenance

File details

Details for the file glm-0.4.1-py2.py3-none-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: glm-0.4.1-py2.py3-none-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 318.0 kB
  • Tags: Python 2, Python 3, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for glm-0.4.1-py2.py3-none-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 65ee1a8cd252844e0093c99d4c1ebd790adbaee563ceccf71fc3f9e5160a24ff
MD5 43db363d0320cd9ef3bc1ba7f7474e9d
BLAKE2b-256 b71026aaf1c2c4c0694ebbdb3477039d44763bae120a4628aae5628919a46070

See more details on using hashes here.

Provenance

Supported by

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