in chz/tiepin.py [0:0]
def _unpackable_arg_length(t: TypeForm) -> tuple[int, bool]:
item_args = None
if getattr(t, "__unpacked__", False):
assert t.__origin__ is tuple # TODO
item_args = t.__args__
elif getattr(t, "__origin__", t) in {typing.Unpack, typing_extensions.Unpack}:
assert len(t.__args__) == 1
assert t.__args__[0].__origin__ is tuple
item_args = t.__args__[0].__args__
else:
return (1, False)
if not item_args or item_args[-1] is ...:
assert len(item_args) == 2
return (0, True)
min_length = 0
unbounded = False
for item_arg in item_args:
arg_length, arg_unbounded = _unpackable_arg_length(item_arg)
min_length += arg_length
unbounded |= arg_unbounded
return (min_length, unbounded)