Source code for qcodes.utils.snapshot_helpers
from typing import Any, NamedTuple, TypeVar
T = TypeVar("T")
# Unbound parameters or Instrument parameters
ParameterKey = str | tuple[str, str]
ParameterDict = dict[ParameterKey, T]
Snapshot = dict[str, Any]
[docs]
class ParameterDiff(NamedTuple):
    # Cannot be generic in Python < 3.7:
    # https://stackoverflow.com/questions/50530959/generic-namedtuple-in-python-3-6
    left_only: ParameterDict[Any]
    right_only: ParameterDict[Any]
    changed: ParameterDict[tuple[Any, Any]] 
[docs]
def diff_param_values(
    left_snapshot: Snapshot, right_snapshot: Snapshot
) -> ParameterDiff:
    """
    Given two snapshots, returns the differences between parameter values
    in each.
    """
    left_params, right_params = map(
        extract_param_values, (left_snapshot, right_snapshot)
    )
    left_keys, right_keys = (
        set(params.keys()) for params in (left_params, right_params)
    )
    common_keys = left_keys.intersection(right_keys)
    return ParameterDiff(
        left_only={key: left_params[key] for key in left_keys.difference(common_keys)},
        right_only={
            key: right_params[key] for key in right_keys.difference(common_keys)
        },
        changed={
            key: (left_params[key], right_params[key])
            for key in common_keys
            if left_params[key] != right_params[key]
        },
    )