morphir-python 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- morphir/__init__.py +14 -0
- morphir/ir/__init__.py +110 -0
- morphir/ir/access_controlled.py +15 -0
- morphir/ir/decorations.py +19 -0
- morphir/ir/diagnostics.py +105 -0
- morphir/ir/distribution.py +21 -0
- morphir/ir/document.py +37 -0
- morphir/ir/documented.py +11 -0
- morphir/ir/format_version.py +483 -0
- morphir/ir/fqname.py +9 -0
- morphir/ir/json.py +11 -0
- morphir/ir/literal.py +25 -0
- morphir/ir/meta.py +11 -0
- morphir/ir/migrate.py +1267 -0
- morphir/ir/module.py +17 -0
- morphir/ir/name.py +27 -0
- morphir/ir/package.py +15 -0
- morphir/ir/path.py +25 -0
- morphir/ir/qname.py +9 -0
- morphir/ir/ref.py +17 -0
- morphir/ir/type.py +37 -0
- morphir/ir/type_constraints.py +33 -0
- morphir/ir/type_def.py +19 -0
- morphir/ir/type_spec.py +25 -0
- morphir/ir/v3/__init__.py +64 -0
- morphir/ir/v3/_legacy_value.py +201 -0
- morphir/ir/v3/access_controlled.py +31 -0
- morphir/ir/v3/codec.py +1275 -0
- morphir/ir/v3/codec_v1.py +491 -0
- morphir/ir/v3/codec_v2.py +187 -0
- morphir/ir/v3/distribution.py +42 -0
- morphir/ir/v3/documented.py +13 -0
- morphir/ir/v3/fqname.py +30 -0
- morphir/ir/v3/literal.py +46 -0
- morphir/ir/v3/module.py +32 -0
- morphir/ir/v3/name.py +42 -0
- morphir/ir/v3/package.py +23 -0
- morphir/ir/v3/path.py +29 -0
- morphir/ir/v3/qname.py +16 -0
- morphir/ir/v3/type.py +126 -0
- morphir/ir/v3/value.py +235 -0
- morphir/ir/v4/__init__.py +160 -0
- morphir/ir/v4/access_controlled.py +17 -0
- morphir/ir/v4/annotation.py +75 -0
- morphir/ir/v4/codec.py +2161 -0
- morphir/ir/v4/decorations.py +88 -0
- morphir/ir/v4/distribution.py +56 -0
- morphir/ir/v4/document.py +69 -0
- morphir/ir/v4/documented.py +10 -0
- morphir/ir/v4/fqname.py +69 -0
- morphir/ir/v4/incompleteness.py +78 -0
- morphir/ir/v4/json.py +103 -0
- morphir/ir/v4/literal.py +51 -0
- morphir/ir/v4/meta.py +27 -0
- morphir/ir/v4/module.py +30 -0
- morphir/ir/v4/name.py +69 -0
- morphir/ir/v4/package.py +19 -0
- morphir/ir/v4/path.py +50 -0
- morphir/ir/v4/qname.py +34 -0
- morphir/ir/v4/ref.py +35 -0
- morphir/ir/v4/type.py +140 -0
- morphir/ir/v4/type_constraints.py +91 -0
- morphir/ir/v4/type_def.py +38 -0
- morphir/ir/v4/type_spec.py +64 -0
- morphir/ir/v4/value.py +480 -0
- morphir/ir/value.py +81 -0
- morphir/py.typed +0 -0
- morphir/sdk/__init__.py +110 -0
- morphir/sdk/_compare.py +187 -0
- morphir/sdk/aggregate.py +421 -0
- morphir/sdk/basics.py +504 -0
- morphir/sdk/char.py +110 -0
- morphir/sdk/decimal.py +311 -0
- morphir/sdk/dict.py +336 -0
- morphir/sdk/instant.py +118 -0
- morphir/sdk/int.py +86 -0
- morphir/sdk/key.py +522 -0
- morphir/sdk/list.py +356 -0
- morphir/sdk/local_date.py +436 -0
- morphir/sdk/local_time.py +267 -0
- morphir/sdk/maybe.py +135 -0
- morphir/sdk/number.py +237 -0
- morphir/sdk/regex.py +287 -0
- morphir/sdk/result.py +162 -0
- morphir/sdk/result_list.py +169 -0
- morphir/sdk/rule.py +103 -0
- morphir/sdk/set.py +214 -0
- morphir/sdk/stateful_app.py +49 -0
- morphir/sdk/string.py +427 -0
- morphir/sdk/tuple.py +43 -0
- morphir/sdk/uuid.py +209 -0
- morphir_python-0.0.1.dist-info/METADATA +269 -0
- morphir_python-0.0.1.dist-info/RECORD +99 -0
- morphir_python-0.0.1.dist-info/WHEEL +4 -0
- morphir_python-0.0.1.dist-info/entry_points.txt +2 -0
- morphir_python-0.0.1.dist-info/licenses/LICENSE +201 -0
- morphir_tools/__init__.py +13 -0
- morphir_tools/cli.py +223 -0
- morphir_tools/py.typed +0 -0
morphir/sdk/key.py
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
"""Morphir.SDK.Key: helpers for composite keys.
|
|
2
|
+
|
|
3
|
+
Elm needs this module because only tuples of comparables are comparable, a tuple
|
|
4
|
+
has at most three elements, and the unit value is not comparable. `key2` to
|
|
5
|
+
`key16` build a composite key from a row with one getter function for each
|
|
6
|
+
element:
|
|
7
|
+
|
|
8
|
+
>>> from dataclasses import dataclass
|
|
9
|
+
>>> from morphir.sdk import key as Key
|
|
10
|
+
>>> @dataclass(frozen=True)
|
|
11
|
+
... class Trade:
|
|
12
|
+
... desk: str
|
|
13
|
+
... product: str
|
|
14
|
+
... quantity: int
|
|
15
|
+
>>> Key.key2(lambda t: t.desk, lambda t: t.product, Trade("fx", "spot", 10))
|
|
16
|
+
('fx', 'spot')
|
|
17
|
+
|
|
18
|
+
A composite key is a tuple, so `basics.compare` gives it a structural order and
|
|
19
|
+
it works as a `Dict` key or a `Set` member when its elements are comparable.
|
|
20
|
+
|
|
21
|
+
Elm nests the tuples of `Key4` and larger (`( k1, k2, ( k3, k4 ) )`), because an
|
|
22
|
+
Elm tuple has at most three elements. Python has no such limit, so every key
|
|
23
|
+
here is one flat tuple. The order of two keys is the same in the two forms.
|
|
24
|
+
|
|
25
|
+
`Key0` is the key with zero elements. It is the integer 0, as in Elm, so that it
|
|
26
|
+
stays comparable. `no_key` and `key0` yield it.
|
|
27
|
+
|
|
28
|
+
The functions are not curried. To get a key function of one argument, for
|
|
29
|
+
example for `aggregate.by_key`, use a `lambda` or `functools.partial`:
|
|
30
|
+
|
|
31
|
+
>>> from functools import partial
|
|
32
|
+
>>> desk_and_product = partial(Key.key2, lambda t: t.desk, lambda t: t.product)
|
|
33
|
+
>>> desk_and_product(Trade("fx", "swap", 5))
|
|
34
|
+
('fx', 'swap')
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
from typing import TYPE_CHECKING
|
|
38
|
+
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
from collections.abc import Callable
|
|
41
|
+
|
|
42
|
+
__all__ = [
|
|
43
|
+
"Key0",
|
|
44
|
+
"Key2",
|
|
45
|
+
"Key3",
|
|
46
|
+
"Key4",
|
|
47
|
+
"Key5",
|
|
48
|
+
"Key6",
|
|
49
|
+
"Key7",
|
|
50
|
+
"Key8",
|
|
51
|
+
"Key9",
|
|
52
|
+
"Key10",
|
|
53
|
+
"Key11",
|
|
54
|
+
"Key12",
|
|
55
|
+
"Key13",
|
|
56
|
+
"Key14",
|
|
57
|
+
"Key15",
|
|
58
|
+
"Key16",
|
|
59
|
+
"key0",
|
|
60
|
+
"key2",
|
|
61
|
+
"key3",
|
|
62
|
+
"key4",
|
|
63
|
+
"key5",
|
|
64
|
+
"key6",
|
|
65
|
+
"key7",
|
|
66
|
+
"key8",
|
|
67
|
+
"key9",
|
|
68
|
+
"key10",
|
|
69
|
+
"key11",
|
|
70
|
+
"key12",
|
|
71
|
+
"key13",
|
|
72
|
+
"key14",
|
|
73
|
+
"key15",
|
|
74
|
+
"key16",
|
|
75
|
+
"no_key",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
type Key0 = int
|
|
79
|
+
"""A key with zero elements. The only value is 0."""
|
|
80
|
+
|
|
81
|
+
type Key2[K1, K2] = tuple[K1, K2]
|
|
82
|
+
"""A composite key with 2 elements."""
|
|
83
|
+
|
|
84
|
+
type Key3[K1, K2, K3] = tuple[K1, K2, K3]
|
|
85
|
+
"""A composite key with 3 elements."""
|
|
86
|
+
|
|
87
|
+
type Key4[K1, K2, K3, K4] = tuple[K1, K2, K3, K4]
|
|
88
|
+
"""A composite key with 4 elements."""
|
|
89
|
+
|
|
90
|
+
type Key5[K1, K2, K3, K4, K5] = tuple[K1, K2, K3, K4, K5]
|
|
91
|
+
"""A composite key with 5 elements."""
|
|
92
|
+
|
|
93
|
+
type Key6[K1, K2, K3, K4, K5, K6] = tuple[K1, K2, K3, K4, K5, K6]
|
|
94
|
+
"""A composite key with 6 elements."""
|
|
95
|
+
|
|
96
|
+
type Key7[K1, K2, K3, K4, K5, K6, K7] = tuple[K1, K2, K3, K4, K5, K6, K7]
|
|
97
|
+
"""A composite key with 7 elements."""
|
|
98
|
+
|
|
99
|
+
type Key8[K1, K2, K3, K4, K5, K6, K7, K8] = tuple[K1, K2, K3, K4, K5, K6, K7, K8]
|
|
100
|
+
"""A composite key with 8 elements."""
|
|
101
|
+
|
|
102
|
+
type Key9[K1, K2, K3, K4, K5, K6, K7, K8, K9] = tuple[
|
|
103
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9
|
|
104
|
+
]
|
|
105
|
+
"""A composite key with 9 elements."""
|
|
106
|
+
|
|
107
|
+
type Key10[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10] = tuple[
|
|
108
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10
|
|
109
|
+
]
|
|
110
|
+
"""A composite key with 10 elements."""
|
|
111
|
+
|
|
112
|
+
type Key11[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11] = tuple[
|
|
113
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11
|
|
114
|
+
]
|
|
115
|
+
"""A composite key with 11 elements."""
|
|
116
|
+
|
|
117
|
+
type Key12[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12] = tuple[
|
|
118
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12
|
|
119
|
+
]
|
|
120
|
+
"""A composite key with 12 elements."""
|
|
121
|
+
|
|
122
|
+
type Key13[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13] = tuple[
|
|
123
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13
|
|
124
|
+
]
|
|
125
|
+
"""A composite key with 13 elements."""
|
|
126
|
+
|
|
127
|
+
type Key14[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14] = tuple[
|
|
128
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14
|
|
129
|
+
]
|
|
130
|
+
"""A composite key with 14 elements."""
|
|
131
|
+
|
|
132
|
+
type Key15[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14, K15] = tuple[
|
|
133
|
+
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14, K15
|
|
134
|
+
]
|
|
135
|
+
"""A composite key with 15 elements."""
|
|
136
|
+
|
|
137
|
+
type Key16[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14, K15, K16] = (
|
|
138
|
+
tuple[K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14, K15, K16]
|
|
139
|
+
)
|
|
140
|
+
"""A composite key with 16 elements."""
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def no_key(a: object) -> Key0:
|
|
144
|
+
"""Create a key with zero elements. The row is ignored; the key is always 0."""
|
|
145
|
+
return 0
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def key0(a: object) -> Key0:
|
|
149
|
+
"""Create a key with zero elements. The row is ignored; the key is always 0."""
|
|
150
|
+
return 0
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def key2[A, B1, B2](
|
|
154
|
+
get_key1: Callable[[A], B1],
|
|
155
|
+
get_key2: Callable[[A], B2],
|
|
156
|
+
a: A,
|
|
157
|
+
) -> Key2[B1, B2]:
|
|
158
|
+
"""Create a composite key with 2 elements from a row."""
|
|
159
|
+
return (get_key1(a), get_key2(a))
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def key3[A, B1, B2, B3](
|
|
163
|
+
get_key1: Callable[[A], B1],
|
|
164
|
+
get_key2: Callable[[A], B2],
|
|
165
|
+
get_key3: Callable[[A], B3],
|
|
166
|
+
a: A,
|
|
167
|
+
) -> Key3[B1, B2, B3]:
|
|
168
|
+
"""Create a composite key with 3 elements from a row."""
|
|
169
|
+
return (get_key1(a), get_key2(a), get_key3(a))
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def key4[A, B1, B2, B3, B4](
|
|
173
|
+
get_key1: Callable[[A], B1],
|
|
174
|
+
get_key2: Callable[[A], B2],
|
|
175
|
+
get_key3: Callable[[A], B3],
|
|
176
|
+
get_key4: Callable[[A], B4],
|
|
177
|
+
a: A,
|
|
178
|
+
) -> Key4[B1, B2, B3, B4]:
|
|
179
|
+
"""Create a composite key with 4 elements from a row."""
|
|
180
|
+
return (get_key1(a), get_key2(a), get_key3(a), get_key4(a))
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def key5[A, B1, B2, B3, B4, B5](
|
|
184
|
+
get_key1: Callable[[A], B1],
|
|
185
|
+
get_key2: Callable[[A], B2],
|
|
186
|
+
get_key3: Callable[[A], B3],
|
|
187
|
+
get_key4: Callable[[A], B4],
|
|
188
|
+
get_key5: Callable[[A], B5],
|
|
189
|
+
a: A,
|
|
190
|
+
) -> Key5[B1, B2, B3, B4, B5]:
|
|
191
|
+
"""Create a composite key with 5 elements from a row."""
|
|
192
|
+
return (get_key1(a), get_key2(a), get_key3(a), get_key4(a), get_key5(a))
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def key6[A, B1, B2, B3, B4, B5, B6](
|
|
196
|
+
get_key1: Callable[[A], B1],
|
|
197
|
+
get_key2: Callable[[A], B2],
|
|
198
|
+
get_key3: Callable[[A], B3],
|
|
199
|
+
get_key4: Callable[[A], B4],
|
|
200
|
+
get_key5: Callable[[A], B5],
|
|
201
|
+
get_key6: Callable[[A], B6],
|
|
202
|
+
a: A,
|
|
203
|
+
) -> Key6[B1, B2, B3, B4, B5, B6]:
|
|
204
|
+
"""Create a composite key with 6 elements from a row."""
|
|
205
|
+
return (
|
|
206
|
+
get_key1(a),
|
|
207
|
+
get_key2(a),
|
|
208
|
+
get_key3(a),
|
|
209
|
+
get_key4(a),
|
|
210
|
+
get_key5(a),
|
|
211
|
+
get_key6(a),
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def key7[A, B1, B2, B3, B4, B5, B6, B7](
|
|
216
|
+
get_key1: Callable[[A], B1],
|
|
217
|
+
get_key2: Callable[[A], B2],
|
|
218
|
+
get_key3: Callable[[A], B3],
|
|
219
|
+
get_key4: Callable[[A], B4],
|
|
220
|
+
get_key5: Callable[[A], B5],
|
|
221
|
+
get_key6: Callable[[A], B6],
|
|
222
|
+
get_key7: Callable[[A], B7],
|
|
223
|
+
a: A,
|
|
224
|
+
) -> Key7[B1, B2, B3, B4, B5, B6, B7]:
|
|
225
|
+
"""Create a composite key with 7 elements from a row."""
|
|
226
|
+
return (
|
|
227
|
+
get_key1(a),
|
|
228
|
+
get_key2(a),
|
|
229
|
+
get_key3(a),
|
|
230
|
+
get_key4(a),
|
|
231
|
+
get_key5(a),
|
|
232
|
+
get_key6(a),
|
|
233
|
+
get_key7(a),
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def key8[A, B1, B2, B3, B4, B5, B6, B7, B8](
|
|
238
|
+
get_key1: Callable[[A], B1],
|
|
239
|
+
get_key2: Callable[[A], B2],
|
|
240
|
+
get_key3: Callable[[A], B3],
|
|
241
|
+
get_key4: Callable[[A], B4],
|
|
242
|
+
get_key5: Callable[[A], B5],
|
|
243
|
+
get_key6: Callable[[A], B6],
|
|
244
|
+
get_key7: Callable[[A], B7],
|
|
245
|
+
get_key8: Callable[[A], B8],
|
|
246
|
+
a: A,
|
|
247
|
+
) -> Key8[B1, B2, B3, B4, B5, B6, B7, B8]:
|
|
248
|
+
"""Create a composite key with 8 elements from a row."""
|
|
249
|
+
return (
|
|
250
|
+
get_key1(a),
|
|
251
|
+
get_key2(a),
|
|
252
|
+
get_key3(a),
|
|
253
|
+
get_key4(a),
|
|
254
|
+
get_key5(a),
|
|
255
|
+
get_key6(a),
|
|
256
|
+
get_key7(a),
|
|
257
|
+
get_key8(a),
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def key9[A, B1, B2, B3, B4, B5, B6, B7, B8, B9](
|
|
262
|
+
get_key1: Callable[[A], B1],
|
|
263
|
+
get_key2: Callable[[A], B2],
|
|
264
|
+
get_key3: Callable[[A], B3],
|
|
265
|
+
get_key4: Callable[[A], B4],
|
|
266
|
+
get_key5: Callable[[A], B5],
|
|
267
|
+
get_key6: Callable[[A], B6],
|
|
268
|
+
get_key7: Callable[[A], B7],
|
|
269
|
+
get_key8: Callable[[A], B8],
|
|
270
|
+
get_key9: Callable[[A], B9],
|
|
271
|
+
a: A,
|
|
272
|
+
) -> Key9[B1, B2, B3, B4, B5, B6, B7, B8, B9]:
|
|
273
|
+
"""Create a composite key with 9 elements from a row."""
|
|
274
|
+
return (
|
|
275
|
+
get_key1(a),
|
|
276
|
+
get_key2(a),
|
|
277
|
+
get_key3(a),
|
|
278
|
+
get_key4(a),
|
|
279
|
+
get_key5(a),
|
|
280
|
+
get_key6(a),
|
|
281
|
+
get_key7(a),
|
|
282
|
+
get_key8(a),
|
|
283
|
+
get_key9(a),
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def key10[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10](
|
|
288
|
+
get_key1: Callable[[A], B1],
|
|
289
|
+
get_key2: Callable[[A], B2],
|
|
290
|
+
get_key3: Callable[[A], B3],
|
|
291
|
+
get_key4: Callable[[A], B4],
|
|
292
|
+
get_key5: Callable[[A], B5],
|
|
293
|
+
get_key6: Callable[[A], B6],
|
|
294
|
+
get_key7: Callable[[A], B7],
|
|
295
|
+
get_key8: Callable[[A], B8],
|
|
296
|
+
get_key9: Callable[[A], B9],
|
|
297
|
+
get_key10: Callable[[A], B10],
|
|
298
|
+
a: A,
|
|
299
|
+
) -> Key10[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10]:
|
|
300
|
+
"""Create a composite key with 10 elements from a row."""
|
|
301
|
+
return (
|
|
302
|
+
get_key1(a),
|
|
303
|
+
get_key2(a),
|
|
304
|
+
get_key3(a),
|
|
305
|
+
get_key4(a),
|
|
306
|
+
get_key5(a),
|
|
307
|
+
get_key6(a),
|
|
308
|
+
get_key7(a),
|
|
309
|
+
get_key8(a),
|
|
310
|
+
get_key9(a),
|
|
311
|
+
get_key10(a),
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def key11[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11](
|
|
316
|
+
get_key1: Callable[[A], B1],
|
|
317
|
+
get_key2: Callable[[A], B2],
|
|
318
|
+
get_key3: Callable[[A], B3],
|
|
319
|
+
get_key4: Callable[[A], B4],
|
|
320
|
+
get_key5: Callable[[A], B5],
|
|
321
|
+
get_key6: Callable[[A], B6],
|
|
322
|
+
get_key7: Callable[[A], B7],
|
|
323
|
+
get_key8: Callable[[A], B8],
|
|
324
|
+
get_key9: Callable[[A], B9],
|
|
325
|
+
get_key10: Callable[[A], B10],
|
|
326
|
+
get_key11: Callable[[A], B11],
|
|
327
|
+
a: A,
|
|
328
|
+
) -> Key11[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11]:
|
|
329
|
+
"""Create a composite key with 11 elements from a row."""
|
|
330
|
+
return (
|
|
331
|
+
get_key1(a),
|
|
332
|
+
get_key2(a),
|
|
333
|
+
get_key3(a),
|
|
334
|
+
get_key4(a),
|
|
335
|
+
get_key5(a),
|
|
336
|
+
get_key6(a),
|
|
337
|
+
get_key7(a),
|
|
338
|
+
get_key8(a),
|
|
339
|
+
get_key9(a),
|
|
340
|
+
get_key10(a),
|
|
341
|
+
get_key11(a),
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def key12[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12](
|
|
346
|
+
get_key1: Callable[[A], B1],
|
|
347
|
+
get_key2: Callable[[A], B2],
|
|
348
|
+
get_key3: Callable[[A], B3],
|
|
349
|
+
get_key4: Callable[[A], B4],
|
|
350
|
+
get_key5: Callable[[A], B5],
|
|
351
|
+
get_key6: Callable[[A], B6],
|
|
352
|
+
get_key7: Callable[[A], B7],
|
|
353
|
+
get_key8: Callable[[A], B8],
|
|
354
|
+
get_key9: Callable[[A], B9],
|
|
355
|
+
get_key10: Callable[[A], B10],
|
|
356
|
+
get_key11: Callable[[A], B11],
|
|
357
|
+
get_key12: Callable[[A], B12],
|
|
358
|
+
a: A,
|
|
359
|
+
) -> Key12[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12]:
|
|
360
|
+
"""Create a composite key with 12 elements from a row."""
|
|
361
|
+
return (
|
|
362
|
+
get_key1(a),
|
|
363
|
+
get_key2(a),
|
|
364
|
+
get_key3(a),
|
|
365
|
+
get_key4(a),
|
|
366
|
+
get_key5(a),
|
|
367
|
+
get_key6(a),
|
|
368
|
+
get_key7(a),
|
|
369
|
+
get_key8(a),
|
|
370
|
+
get_key9(a),
|
|
371
|
+
get_key10(a),
|
|
372
|
+
get_key11(a),
|
|
373
|
+
get_key12(a),
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def key13[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13](
|
|
378
|
+
get_key1: Callable[[A], B1],
|
|
379
|
+
get_key2: Callable[[A], B2],
|
|
380
|
+
get_key3: Callable[[A], B3],
|
|
381
|
+
get_key4: Callable[[A], B4],
|
|
382
|
+
get_key5: Callable[[A], B5],
|
|
383
|
+
get_key6: Callable[[A], B6],
|
|
384
|
+
get_key7: Callable[[A], B7],
|
|
385
|
+
get_key8: Callable[[A], B8],
|
|
386
|
+
get_key9: Callable[[A], B9],
|
|
387
|
+
get_key10: Callable[[A], B10],
|
|
388
|
+
get_key11: Callable[[A], B11],
|
|
389
|
+
get_key12: Callable[[A], B12],
|
|
390
|
+
get_key13: Callable[[A], B13],
|
|
391
|
+
a: A,
|
|
392
|
+
) -> Key13[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13]:
|
|
393
|
+
"""Create a composite key with 13 elements from a row."""
|
|
394
|
+
return (
|
|
395
|
+
get_key1(a),
|
|
396
|
+
get_key2(a),
|
|
397
|
+
get_key3(a),
|
|
398
|
+
get_key4(a),
|
|
399
|
+
get_key5(a),
|
|
400
|
+
get_key6(a),
|
|
401
|
+
get_key7(a),
|
|
402
|
+
get_key8(a),
|
|
403
|
+
get_key9(a),
|
|
404
|
+
get_key10(a),
|
|
405
|
+
get_key11(a),
|
|
406
|
+
get_key12(a),
|
|
407
|
+
get_key13(a),
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
def key14[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14](
|
|
412
|
+
get_key1: Callable[[A], B1],
|
|
413
|
+
get_key2: Callable[[A], B2],
|
|
414
|
+
get_key3: Callable[[A], B3],
|
|
415
|
+
get_key4: Callable[[A], B4],
|
|
416
|
+
get_key5: Callable[[A], B5],
|
|
417
|
+
get_key6: Callable[[A], B6],
|
|
418
|
+
get_key7: Callable[[A], B7],
|
|
419
|
+
get_key8: Callable[[A], B8],
|
|
420
|
+
get_key9: Callable[[A], B9],
|
|
421
|
+
get_key10: Callable[[A], B10],
|
|
422
|
+
get_key11: Callable[[A], B11],
|
|
423
|
+
get_key12: Callable[[A], B12],
|
|
424
|
+
get_key13: Callable[[A], B13],
|
|
425
|
+
get_key14: Callable[[A], B14],
|
|
426
|
+
a: A,
|
|
427
|
+
) -> Key14[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14]:
|
|
428
|
+
"""Create a composite key with 14 elements from a row."""
|
|
429
|
+
return (
|
|
430
|
+
get_key1(a),
|
|
431
|
+
get_key2(a),
|
|
432
|
+
get_key3(a),
|
|
433
|
+
get_key4(a),
|
|
434
|
+
get_key5(a),
|
|
435
|
+
get_key6(a),
|
|
436
|
+
get_key7(a),
|
|
437
|
+
get_key8(a),
|
|
438
|
+
get_key9(a),
|
|
439
|
+
get_key10(a),
|
|
440
|
+
get_key11(a),
|
|
441
|
+
get_key12(a),
|
|
442
|
+
get_key13(a),
|
|
443
|
+
get_key14(a),
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def key15[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15](
|
|
448
|
+
get_key1: Callable[[A], B1],
|
|
449
|
+
get_key2: Callable[[A], B2],
|
|
450
|
+
get_key3: Callable[[A], B3],
|
|
451
|
+
get_key4: Callable[[A], B4],
|
|
452
|
+
get_key5: Callable[[A], B5],
|
|
453
|
+
get_key6: Callable[[A], B6],
|
|
454
|
+
get_key7: Callable[[A], B7],
|
|
455
|
+
get_key8: Callable[[A], B8],
|
|
456
|
+
get_key9: Callable[[A], B9],
|
|
457
|
+
get_key10: Callable[[A], B10],
|
|
458
|
+
get_key11: Callable[[A], B11],
|
|
459
|
+
get_key12: Callable[[A], B12],
|
|
460
|
+
get_key13: Callable[[A], B13],
|
|
461
|
+
get_key14: Callable[[A], B14],
|
|
462
|
+
get_key15: Callable[[A], B15],
|
|
463
|
+
a: A,
|
|
464
|
+
) -> Key15[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15]:
|
|
465
|
+
"""Create a composite key with 15 elements from a row."""
|
|
466
|
+
return (
|
|
467
|
+
get_key1(a),
|
|
468
|
+
get_key2(a),
|
|
469
|
+
get_key3(a),
|
|
470
|
+
get_key4(a),
|
|
471
|
+
get_key5(a),
|
|
472
|
+
get_key6(a),
|
|
473
|
+
get_key7(a),
|
|
474
|
+
get_key8(a),
|
|
475
|
+
get_key9(a),
|
|
476
|
+
get_key10(a),
|
|
477
|
+
get_key11(a),
|
|
478
|
+
get_key12(a),
|
|
479
|
+
get_key13(a),
|
|
480
|
+
get_key14(a),
|
|
481
|
+
get_key15(a),
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
def key16[A, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16](
|
|
486
|
+
get_key1: Callable[[A], B1],
|
|
487
|
+
get_key2: Callable[[A], B2],
|
|
488
|
+
get_key3: Callable[[A], B3],
|
|
489
|
+
get_key4: Callable[[A], B4],
|
|
490
|
+
get_key5: Callable[[A], B5],
|
|
491
|
+
get_key6: Callable[[A], B6],
|
|
492
|
+
get_key7: Callable[[A], B7],
|
|
493
|
+
get_key8: Callable[[A], B8],
|
|
494
|
+
get_key9: Callable[[A], B9],
|
|
495
|
+
get_key10: Callable[[A], B10],
|
|
496
|
+
get_key11: Callable[[A], B11],
|
|
497
|
+
get_key12: Callable[[A], B12],
|
|
498
|
+
get_key13: Callable[[A], B13],
|
|
499
|
+
get_key14: Callable[[A], B14],
|
|
500
|
+
get_key15: Callable[[A], B15],
|
|
501
|
+
get_key16: Callable[[A], B16],
|
|
502
|
+
a: A,
|
|
503
|
+
) -> Key16[B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16]:
|
|
504
|
+
"""Create a composite key with 16 elements from a row."""
|
|
505
|
+
return (
|
|
506
|
+
get_key1(a),
|
|
507
|
+
get_key2(a),
|
|
508
|
+
get_key3(a),
|
|
509
|
+
get_key4(a),
|
|
510
|
+
get_key5(a),
|
|
511
|
+
get_key6(a),
|
|
512
|
+
get_key7(a),
|
|
513
|
+
get_key8(a),
|
|
514
|
+
get_key9(a),
|
|
515
|
+
get_key10(a),
|
|
516
|
+
get_key11(a),
|
|
517
|
+
get_key12(a),
|
|
518
|
+
get_key13(a),
|
|
519
|
+
get_key14(a),
|
|
520
|
+
get_key15(a),
|
|
521
|
+
get_key16(a),
|
|
522
|
+
)
|