import os import numpy as np import ujson as json from progiter import ProgIter from shapely.geometry import shape def read_terrible_json(path): """ Reads a slightly malformed json file where each line is a different json dict. Args: path (string): the filepath to read from Returns: [dict]: list of dictionaries """ with open(path, "rt") as f: lines = [] test_read_lines = [x for x in f.readlines()] for x in ProgIter(test_read_lines): if x: x = x.replace("/", "\/") x = json.loads(x) lines.append(x) return lines def _load_zone_info(): """Loads zone information from the json file in the package. Returns: dict : the loaded json file """ dir_path = os.path.dirname(os.path.realpath(__file__)) with open(os.path.join(dir_path, "data/co2eq_parameters.json"), "rt") as f: x = json.load(f) return x def _load_zone_names(): """Loads zone name info from the json file in the package. Returns: dict : the loaded json file """ dir_path = os.path.dirname(os.path.realpath(__file__)) with open(os.path.join(dir_path, "data/zone_names.json"), "rt") as f: x = json.load(f) return x def load_regions_with_bounding_boxes(): """Loads bounding boxes as shapely objects. Returns: list: list of shapely objects containing regional geometries """ print( "loading region bounding boxes for computing carbon emissions region, this may take a moment..." ) dir_path = os.path.dirname(os.path.realpath(__file__)) all_geoms = [] # with open('data/zone_geometries.json') as f: all_geoms = read_terrible_json(os.path.join(dir_path, "data/zonegeometries.json")) for i, geom in enumerate(all_geoms): all_geoms[i]["geometry"] = shape(geom["geometry"]) print("Done!") return all_geoms PUE = 1.58 REGIONS_WITH_BOUNDING_BOXES = load_regions_with_bounding_boxes() ZONE_INFO = _load_zone_info()["fallbackZoneMixes"] ZONE_NAMES = _load_zone_names()