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

Uploaded Python 2 Python 3 Windows x86-64

glm-0.3.9-py2.py3-none-manylinux1_x86_64.whl (428.2 kB view details)

Uploaded Python 2 Python 3

glm-0.3.9-py2.py3-none-macosx_10_7_x86_64.whl (315.6 kB view details)

Uploaded Python 2 Python 3 macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: glm-0.3.9-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 444.0 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.3.9-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f254b5b4df9be664b721125f2fd6c8d566ad7518cee8c5168f3a0e8674c6b587
MD5 e843ae7ba94f1ef6f232f0d0620e84c6
BLAKE2b-256 d3fc06e02238876cdc419d85630fa5cee7d25b2f02cda044612664330be2faae

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: glm-0.3.9-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 428.2 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.3.9-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9d6add56e1d306007dee4d0a835b971d1260f13d3adc59dff39af3d20c1bd20d
MD5 62b6503641fc19c2c4ef9eb2936394be
BLAKE2b-256 d5a85d93abd95db609224e31a7b4f3f5388d405d94b0255f130fa84624a5509b

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: glm-0.3.9-py2.py3-none-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 315.6 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.3.9-py2.py3-none-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 605b2915ef6b8be64f87b6e8ca70f57b0448d075b55072b70f550cd2d2addcda
MD5 468391ae9e7f56d7509af6d27f38c67b
BLAKE2b-256 774c91200dd75c43acf706eea26a8603d52c2911b7db2646e99a3e68518fc593

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