+
    Bia                         ^ RI t ^ RItRtR]/tR t ! R R]P
                  4      t]R8X  d   ]P                  ! 4        R# R# )    Nao  

Unpack tuple

    >>> t = (1, 2, 3)
    >>> a, b, c = t
    >>> a == 1 and b == 2 and c == 3
    True

Unpack list

    >>> l = [4, 5, 6]
    >>> a, b, c = l
    >>> a == 4 and b == 5 and c == 6
    True

Unpack dict

    >>> d = {4: 'four', 5: 'five', 6: 'six'}
    >>> a, b, c = d
    >>> a == 4 and b == 5 and c == 6
    True

Unpack implied tuple

    >>> a, b, c = 7, 8, 9
    >>> a == 7 and b == 8 and c == 9
    True

Unpack string... fun!

    >>> a, b, c = 'one'
    >>> a == 'o' and b == 'n' and c == 'e'
    True

Unpack generic sequence

    >>> class Seq:
    ...     def __getitem__(self, i):
    ...         if i >= 0 and i < 3: return i
    ...         raise IndexError
    ...
    >>> a, b, c = Seq()
    >>> a == 0 and b == 1 and c == 2
    True

Single element unpacking, with extra syntax

    >>> st = (99,)
    >>> sl = [100]
    >>> a, = st
    >>> a
    99
    >>> b, = sl
    >>> b
    100

Now for some failures

Unpacking non-sequence

    >>> a, b, c = 7
    Traceback (most recent call last):
      ...
    TypeError: cannot unpack non-iterable int object

Unpacking tuple of wrong size

    >>> a, b = t
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 2, got 3)

Unpacking tuple of wrong size

    >>> a, b = l
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 2, got 3)

Unpacking sequence too short

    >>> a, b, c, d = Seq()
    Traceback (most recent call last):
      ...
    ValueError: not enough values to unpack (expected 4, got 3)

Unpacking sequence too long

    >>> a, b = Seq()
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 2)

Unpacking a sequence where the test for too long raises a different kind of
error

    >>> class BozoError(Exception):
    ...     pass
    ...
    >>> class BadSeq:
    ...     def __getitem__(self, i):
    ...         if i >= 0 and i < 3:
    ...             return i
    ...         elif i == 3:
    ...             raise BozoError
    ...         else:
    ...             raise IndexError
    ...

Trigger code while not expecting an IndexError (unpack sequence too long, wrong
error)

    >>> a, b, c, d, e = BadSeq()
    Traceback (most recent call last):
      ...
    test.test_unpack.BozoError

Trigger code while expecting an IndexError (unpack sequence too short, wrong
error)

    >>> a, b, c = BadSeq()
    Traceback (most recent call last):
      ...
    test.test_unpack.BozoError

Allow unpacking empty iterables

    >>> () = []
    >>> [] = ()
    >>> [] = []
    >>> () = ()

Unpacking non-iterables should raise TypeError

    >>> () = 42
    Traceback (most recent call last):
      ...
    TypeError: cannot unpack non-iterable int object

Unpacking to an empty iterable should raise ValueError

    >>> () = [42]
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 0, got 1)

Unpacking a larger iterable should raise ValuleError, but it
should not entirely consume the iterable

    >>> it = iter(range(100))
    >>> x, y, z = it
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 3)
    >>> next(it)
    4

Unpacking unbalanced dict

    >>> d = {4: 'four', 5: 'five', 6: 'six', 7: 'seven'}
    >>> a, b, c = d
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 3, got 4)

Ensure that custom `__len__()` is NOT called when showing the error message

    >>> class LengthTooLong:
    ...     def __len__(self):
    ...         return 5
    ...     def __getitem__(self, i):
    ...         return i*2
    ...
    >>> x, y, z = LengthTooLong()
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 3)

For evil cases like these as well, no actual count to be shown

    >>> class BadLength:
    ...     def __len__(self):
    ...         return 1
    ...     def __getitem__(self, i):
    ...         return i*2
    ...
    >>> x, y, z = BadLength()
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack (expected 3)
doctestsc                 N    VP                  \        P                  ! 4       4       V# )N)addTestdoctestDocTestSuite)loadertestspatterns   &&&'/usr/lib/python3.14/test/test_unpack.py
load_testsr      s    	MM'&&()L    c                   &   a  ] tR t^t o R tRtV tR# )TestCornerCasesc                    RpRV R2p/ p\        W#4       VR,          p\        ^4       F&  pV! \        R4      4      pV P                  VR4       K(  	  R# )(i  zdef unpack_400(x):
            z" = x
            return y
        
unpack_400i  Na"  (y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,))execrangeassertEqual)selftargetcodensr   _ys   &      r   test_extended_oparg_not_ignored/TestCornerCases.test_extended_oparg_not_ignored   sa    %H 	 T%
rA5:&AQ$ r    N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s     % %r   r   __main__)	r   unittestr   __test__r   TestCaser   r   mainr   r   r   <module>r+      sO     B "
%h'' %  zMMO r   