Source code for grid2op.MakeEnv.UserUtils

# Copyright (c) 2019-2020, RTE (https://www.rte-france.com)
# See AUTHORS.txt
# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0.
# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file,
# you can obtain one at http://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0
# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems.

import os
import json

from grid2op.MakeEnv.Make import _list_available_remote_env_aux
import grid2op.MakeEnv.PathUtils
from grid2op.MakeEnv.PathUtils import DEFAULT_PATH_CONFIG, KEY_DATA_PATH
from grid2op.Exceptions import Grid2OpException


[docs]def list_available_remote_env(): """ This function returns the list of available environments. It returns all the environments, you might already have downloaded some, they will be listed here. Returns ------- res: ``list`` a sorted list of available to environments that can be downloaded. Examples --------- A usage example is .. code-block:: python import grid2op li = grid2op.list_available_remote_env() li_fmt = '\\n * '.join(li) print(f"The available environments are: \\n * {li_fmt}") """ avail_datasets_json = _list_available_remote_env_aux() return sorted(avail_datasets_json.keys())
[docs]def list_available_local_env(): """ This function returns the environment that are available locally. It does not return the environments that are included in the package. Returns ------- res: ``list`` a sorted list of available environments locally. Examples --------- .. code-block:: python import grid2op li = grid2op.list_available_local_env() li_fmt = '\\n + '.join(li) print(f"The locally available environments (without downloading anything) are: \\n * {li_fmt}") """ res = [] if not os.path.exists(grid2op.MakeEnv.PathUtils.DEFAULT_PATH_DATA): return res for el in os.listdir(grid2op.MakeEnv.PathUtils.DEFAULT_PATH_DATA): tmp_dir = os.path.join(grid2op.MakeEnv.PathUtils.DEFAULT_PATH_DATA, el) if ( os.path.exists(os.path.join(tmp_dir, "config.py")) and os.path.exists(os.path.join(tmp_dir, "grid.json")) ) or os.path.exists(os.path.join(tmp_dir, ".multimix")): res.append(el) return res
[docs]def list_available_test_env(): """ This functions list the environment available through "grid2op.make(..., test=True)", which are the environment used for testing purpose, but available without the need to download any data. The "test" environment are provided with the grid2op package. Returns ------- res: ``list`` a sorted list of available environments for testing / illustration purpose. Examples --------- .. code-block:: python import grid2op li = grid2op.list_available_test_env() env = grid2op.make(li[0], test=True) """ from grid2op.MakeEnv.Make import TEST_DEV_ENVS import re res = sorted( [ el for el in TEST_DEV_ENVS.keys() if re.match("(^rte_.*)|(^l2rpn_.*)|(^educ_.*)", el) is not None ] ) return res
[docs]def get_current_local_dir(): """ This function allows you to get the directory in which grid2op will download the datasets. This path can be modified with the ".grid2opconfig.json" file. Returns ------- res: ``str`` The current path were data are downloaded in. Examples --------- .. code-block:: python import grid2op print(f"Data about grid2op downloaded environments are stored in: \"{grid2op.get_current_local_dir()}\"") """ return os.path.abspath(grid2op.MakeEnv.PathUtils.DEFAULT_PATH_DATA)
[docs]def change_local_dir(new_path): """ This function will change the path were datasets are read to / from. The previous datasets will be left in the previous configuration folder and will not be accessible by other grid2op function such as "make" for example. Parameters ---------- new_path: ``str`` The new path in which to download the datasets. Examples --------- To set the download path, and the path where grid2op will look for available local environment you can: .. code-block:: python import grid2op local_dir = ... # should be a valid path on your machine grid2op.change_local_dir(local_dir) # check it has worked: print(f"Data about grid2op downloaded environments are now stored in: \"{grid2op.get_current_local_dir()}\"") """ try: new_path = str(new_path) except Exception as exc_: raise Grid2OpException( 'The new path should be convertible to str. It is currently "{}"'.format( new_path ) ) from exc_ root_dir = os.path.split(new_path)[0] if not os.path.exists(root_dir): raise Grid2OpException( 'Data cannot be stored in "{}" as the base path of this directory ("{}") does ' "not exists.".format(new_path, root_dir) ) if not os.path.isdir(new_path): raise Grid2OpException( 'Data cannot be stored in "{}" as it is a file and not a directory.'.format( new_path ) ) newconfig = {} if os.path.exists(DEFAULT_PATH_CONFIG): try: with open(DEFAULT_PATH_CONFIG, "r", encoding="utf-8") as f: newconfig = json.load(f) except Exception as exc_: raise Grid2OpException( 'Impossible to read the grid2op configuration files "{}". Make sure it is a ' 'valid json encoded with "utf-8" encoding.'.format(DEFAULT_PATH_CONFIG) ) from exc_ newconfig[KEY_DATA_PATH] = new_path try: with open(DEFAULT_PATH_CONFIG, "w", encoding="utf-8") as f: json.dump(fp=f, obj=newconfig, sort_keys=True, indent=4) except Exception as exc_: raise Grid2OpException( 'Impossible to write the grid2op configuration files "{}". Make sure you have ' "writing access to it.".format(DEFAULT_PATH_CONFIG) ) from exc_ grid2op.MakeEnv.PathUtils.DEFAULT_PATH_DATA = new_path