Skip to content

Commit b4edf2f

Browse files
Add BiDict
1 parent d23df7d commit b4edf2f

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

cadquery/utils.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from inspect import signature, isbuiltin
33
from typing import TypeVar, Callable, cast
44
from warnings import warn
5+
from collections import UserDict
56

67
from multimethod import multimethod, DispatchError
78

@@ -83,3 +84,35 @@ def get_arity(f: TCallable) -> int:
8384
rv = f.__code__.co_argcount - n_defaults
8485

8586
return rv
87+
88+
89+
K = TypeVar("K")
90+
V = TypeVar("V")
91+
92+
93+
class BiDict(UserDict[K, V]):
94+
"""
95+
Bi-directional dictionary.
96+
"""
97+
98+
_inv = dict[V, list[K]]
99+
100+
def __init__(self, *args, **kwargs):
101+
102+
self._inv = {}
103+
104+
super().__init__(*args, **kwargs)
105+
106+
def __setitem__(self, k: K, v: V):
107+
108+
super().__setitem__(k, v)
109+
110+
if v in self._inv:
111+
self._inv[v].append(k)
112+
else:
113+
self._inv[v] = [k]
114+
115+
@property
116+
def inv(self) -> dict[V, list[K]]:
117+
118+
return self._inv

0 commit comments

Comments
 (0)