Produces a dictionary of raw data for a lattice as queried from the Forest 2.0 server.

    Returns a dictionary of the form
    {
        "name":        the name of the lattice as a string,
        "device_name": the name of the device, given as a string, that the lattice lies on,
        "specs":       a Specs object, serialized as a dictionary,
        "isa":         an ISA object, serialized as a dictionary,
        "noise_model": a NoiseModel object, serialized as a dictionary
    }

def _get_raw_lattice_data(lattice_name: str = None):
    """
    Produces a dictionary of raw data for a lattice as queried from the Forest 2.0 server.

    Returns a dictionary of the form
    {
        "name":        the name of the lattice as a string,
        "device_name": the name of the device, given as a string, that the lattice lies on,
        "specs":       a Specs object, serialized as a dictionary,
        "isa":         an ISA object, serialized as a dictionary,
        "noise_model": a NoiseModel object, serialized as a dictionary
    }
    """
    from pyquil.api._base_connection import get_session, get_json
    from requests.exceptions import MissingSchema
    session = get_session()
    config = PyquilConfig()

    try:
        res = get_json(session, f"{config.forest_url}/lattices/{lattice_name}")
    except MissingSchema:
        raise ValueError(f"Error finding lattice `{lattice_name}` at Forest 2.0 server "
                         f"""endpoint `{config.forest_url}`.

    Most likely, you're missing an address for the Forest 2.0 server endpoint, or the
    address is invalid. This can be set through the environment variable FOREST_URL or
    by changing the following lines in the QCS config file (by default, at ~/.qcs_config):

      [Rigetti Forest]
      url = https://rigetti.com/valid/forest/url""")
    return res["lattice"]