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.3.7-py2.py3-none-win_amd64.whl (442.8 kB view details)

Uploaded Python 2 Python 3 Windows x86-64

glm-0.3.7-py2.py3-none-manylinux1_x86_64.whl (426.2 kB view details)

Uploaded Python 2 Python 3

glm-0.3.7-py2.py3-none-macosx_10_7_x86_64.whl (313.0 kB view details)

Uploaded Python 2 Python 3 macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: glm-0.3.7-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 442.8 kB
  • Tags: Python 2, Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for glm-0.3.7-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a95ae674fe2585d1837ec2d8c0dacbf7dd3437459fab152624dd74ed72074032
MD5 f8e9034435d7f101f8afa087c95d2a56
BLAKE2b-256 600b8d5931cea2a6c30de2accbed9fa381b0f5d41aadcac4a807a07c3f717c81

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: glm-0.3.7-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 426.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for glm-0.3.7-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 51bcb85ca4d56449e84c071edd54a57a621784431166197a703652837a5a1fdb
MD5 f656cdae2dc89f5b72ad3728c8aff57a
BLAKE2b-256 9f11a979ca08793c65a973d35da4c28208b9a75a881209cd09bd40b54ae82c29

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: glm-0.3.7-py2.py3-none-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 313.0 kB
  • Tags: Python 2, Python 3, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for glm-0.3.7-py2.py3-none-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 cbd195953a94547cd53305bd30b7be0befa00c55ebf1d3d1ff0357303c97fd58
MD5 6fdc3f1105abf12b55fb2a18ddea0db6
BLAKE2b-256 54ad0dee69db37c6b5619a2bcaba7cfab668937df3c77bd98eadc23ab3e0f7fb

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