SymmetricPairMapping

class PlasmaCalcs.tools.iterables.SymmetricPairMapping(mapping={})

Bases: object

mapping with keys pairs, where order of the pair doesn’t matter.

mapping: dict of {(obj1, obj2): value}

The keys (obj2, obj1) and (obj1, obj2) will be treated the same way,

when getting/setting/deleting items, and when checking if key in self.
[EFF] For efficiency, only stores one of these pairs (the one where obj1 <= obj2).

Methods

__iter__()

iterate over self.items (not self.keys).

assert_symmetric_mapping(ss)

check that ss is a symmetric mapping; crash with InputError otherwise.

clear()

remove all known items from self.

copy()

return a shallow copy of self.

from_symmetric_dict(ss)

return SymmetricPairMapping from symmetric dict ss,

items()

keys()

pop(key, default)

remove self[key], and return its value.

update(other)

update self with other.

values()

_sanitize_key(key)

return sanitized key (obj1, obj2) such that obj1 <= obj2.

__iter__()

iterate over self.items (not self.keys).

_sanitize_key(key)

return sanitized key (obj1, obj2) such that obj1 <= obj2.

static assert_symmetric_mapping(ss)

check that ss is a symmetric mapping; crash with InputError otherwise.

I.e., ensure for all keys key12=(obj1, obj2) in ss, key21=(obj2, obj1) is also in ss,
and ss[key12] == ss[key21].
clear()

remove all known items from self.

copy()

return a shallow copy of self.

classmethod from_symmetric_dict(ss)

return SymmetricPairMapping from symmetric dict ss,

which contains both ((obj1, obj2): val12) and ((obj2, obj1): val21) for each pair of objs,
with val12 == val21 confirmed here first (crash with InputError if ss not symmetric).
pop(key, default)

remove self[key], and return its value. if key not in self, return default.

update(other)

update self with other.

other: dict of {(obj1, obj2): value}