lschoe / mpyc

MPyC: Multiparty Computation in Python
MIT License
367 stars 76 forks source link

Tests are failing on Python 3.11 #86

Closed swar0g closed 6 months ago

swar0g commented 6 months ago

Steps to reproduce:

  1. Clone repository
  2. Install using setup.py
  3. Run the test suite using tests/tes.sh

Expected Behavior: Tests should pass without any failures.

Actual Behavior: Several tests are failing.

Additional Information: Python version: 3.11 Operating System: Debian 12

Error messages or stack traces:

...............F..........EE..EE.....F..E.......E.F2024-03-14 10:10:21,840 Unhandled exception in event loop
Traceback (most recent call last):
  File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 431, in <lambda>
    task.add_done_callback(lambda t: _reconcile(decl, t))
                                     ^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 355, in _reconcile
    givn = task.result()
           ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 283, in _wrap_in_coro
    return await awaitable
           ^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 271, in __await__
    val = self.coro.send(None)
          ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 3335, in to_bits
    raise TypeError('Binary field or prime field required.')
TypeError: Binary field or prime field required.
Traceback (enclosing MPyC coroutine call):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/unittest/__main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.11/unittest/main.py", line 102, in __init__
    self.runTests()
  File "/usr/lib/python3.11/unittest/main.py", line 274, in runTests
    self.result = testRunner.run(self.test)
  File "/usr/lib/python3.11/unittest/runner.py", line 217, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/case.py", line 678, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/case.py", line 649, in run
    if stopTestRun is not None:
  File "/usr/lib/python3.11/unittest/case.py", line 579, in _callTestMethod
    if method() is not None:
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 630, in test_qsecfld
    self.assertRaises(TypeError, mpc.to_bits, a)
  File "/usr/lib/python3.11/unittest/case.py", line 769, in assertRaises
    context = None
  File "/usr/lib/python3.11/unittest/case.py", line 240, in handle
    self = None
E.EE.E....F2024-03-14 10:10:25,501 Unhandled exception in event loop
Traceback (most recent call last):
  File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 431, in <lambda>
    task.add_done_callback(lambda t: _reconcile(decl, t))
                                     ^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 355, in _reconcile
    givn = task.result()
           ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 283, in _wrap_in_coro
    return await awaitable
           ^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 271, in __await__
    val = self.coro.send(None)
          ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/seclists.py", line 277, in remove
    raise ValueError('value is not in list')
ValueError: value is not in list
Traceback (enclosing MPyC coroutine call):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/unittest/__main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.11/unittest/main.py", line 102, in __init__
    self.runTests()
  File "/usr/lib/python3.11/unittest/main.py", line 274, in runTests
    self.result = testRunner.run(self.test)
  File "/usr/lib/python3.11/unittest/runner.py", line 217, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/case.py", line 678, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/case.py", line 649, in run
    if stopTestRun is not None:
  File "/usr/lib/python3.11/unittest/case.py", line 579, in _callTestMethod
    if method() is not None:
  File "/home/user/dev/mpyc/tests/test_seclists.py", line 27, in test_secfld
    self.assertEqual(mpc.run(mpc.output(list(s))), [1, 2, 6, 9])
E.F..........2024-03-14 10:10:25,587 Unhandled exception in event loop
Traceback (most recent call last):
  File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 431, in <lambda>
    task.add_done_callback(lambda t: _reconcile(decl, t))
                                     ^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 355, in _reconcile
    givn = task.result()
           ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 283, in _wrap_in_coro
    return await awaitable
           ^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 271, in __await__
    val = self.coro.send(None)
          ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/seclists.py", line 277, in remove
    raise ValueError('value is not in list')
ValueError: value is not in list
Traceback (enclosing MPyC coroutine call):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/unittest/__main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.11/unittest/main.py", line 102, in __init__
    self.runTests()
  File "/usr/lib/python3.11/unittest/main.py", line 274, in runTests
    self.result = testRunner.run(self.test)
  File "/usr/lib/python3.11/unittest/runner.py", line 217, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 133, in run
    return result
  File "/usr/lib/python3.11/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/suite.py", line 133, in run
    return result
  File "/usr/lib/python3.11/unittest/case.py", line 678, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.11/unittest/case.py", line 649, in run
    if stopTestRun is not None:
  File "/usr/lib/python3.11/unittest/case.py", line 579, in _callTestMethod
    if method() is not None:
  File "/home/user/dev/mpyc/tests/test_seclists.py", line 64, in test_secint
    self.assertRaises(ValueError, s.remove, secint(11))
  File "/usr/lib/python3.11/unittest/case.py", line 769, in assertRaises
    context = None
  File "/usr/lib/python3.11/unittest/case.py", line 240, in handle
    self = None
E.....
======================================================================
ERROR: test_modall (test_gfpx.Arithmetic.test_modall)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_gfpx.py", line 19, in test_modall
    self._test_modall(poly)
  File "/home/user/dev/mpyc/tests/test_gfpx.py", line 40, in _test_modall
    self.assertEqual(poly(0)[-1], 0)
                     ~~~~~~~^^^^
TypeError: 'GF(2)[x]' object is not subscriptable

======================================================================
ERROR: test_basic (test_gmpy.Arithmetic.test_basic)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_gmpy.py", line 18, in test_basic
    self.assertEqual(gmpy.prev_prime(3), 2)
                     ^^^^^^^^^^^^^^^
AttributeError: module 'mpyc.gmpy' has no attribute 'prev_prime'

======================================================================
ERROR: test_accumulate (test_mpctools.Arithmetic.test_accumulate)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_mpctools.py", line 54, in test_accumulate
    self.assertEqual(mpc.run(mpc.output(list(acc(a5, mpc.mul, initial=secint(1))))),
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: accumulate() got an unexpected keyword argument 'initial'

======================================================================
ERROR: test_reduce (test_mpctools.Arithmetic.test_reduce)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_mpctools.py", line 31, in test_reduce
    self.assertRaises(TypeError, red, mpc.add, [])
  File "/usr/lib/python3.11/unittest/case.py", line 766, in assertRaises
    return context.handle('assertRaises', args, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/unittest/case.py", line 237, in handle
    callable_obj(*args, **kwargs)
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/mpctools.py", line 34, in reduce
    return x[0]
           ~^^^
IndexError: list index out of range

======================================================================
ERROR: test_empty_input (test_runtime.Arithmetic.test_empty_input)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 987, in test_empty_input
    self.assertEqual(mpc.input([]), [[]])
                     ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 388, in input
    y = self._distribute(x, senders)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 404, in typed_asyncoro
    decl = coro.send(None)
           ^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 401, in _distribute
    stype = type(x[0])  # all elts assumed of same type
                 ~^^^
IndexError: list index out of range

======================================================================
ERROR: test_prss_keys (test_runtime.Arithmetic.test_prss_keys)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 504, in test_prss_keys
    rt1._prss_keys_from_peer(0, rt0._prss_keys_to_peer(1)[0])
    ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Runtime' object has no attribute '_prss_keys_from_peer'

======================================================================
ERROR: test_secfld_array (test_runtime.Arithmetic.test_secfld_array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 449, in test_secfld_array
    np.assertEqual(mpc.run(mpc.output(mpc.np_to_bits(c))), [[[1, 1], [0, 0]], [[1, 0], [0, 1]]])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 181, in run
    return self._loop.run_until_complete(f)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 651, in run_until_complete
    raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.

======================================================================
ERROR: test_secfxp (test_runtime.Arithmetic.test_secfxp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 870, in test_secfxp
    self.assertAlmostEqual(mpc.run(mpc.output(mpc.sin(secfxp(math.pi/16)))),
                                              ^^^^^^^
AttributeError: 'Runtime' object has no attribute 'sin'

======================================================================
ERROR: test_secfxp_array (test_runtime.Arithmetic.test_secfxp_array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 288, in test_secfxp_array
    np.assertAlmostEqual(mpc.run(mpc.output(1 / c)), 1 / a, rtol=0, atol=2**(1-f))
                                            ~~^~~
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/sectypes.py", line 1149, in __rtruediv__
    return runtime.np_divide(other, self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 1031, in np_divide
    c = self._rec(b)
        ^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 3557, in _rec
    v = self._norm(a)
        ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 3546, in _norm
    l = type(a).bit_length
        ^^^^^^^^^^^^^^^^^^
AttributeError: type object 'ArraySecFxp64:32' has no attribute 'bit_length'

======================================================================
ERROR: test_secint_array (test_runtime.Arithmetic.test_secint_array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 60, in test_secint_array
    np.assertEqual(mpc.run(mpc.output(np.dstack((c[0, 0],)))), np.dstack((a[0, 0],)))
                                      ^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/sectypes.py", line 1037, in __array_function__
    return eval(f'runtime.np_{func.__name__}')(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/asyncoro.py", line 404, in typed_asyncoro
    decl = coro.send(None)
           ^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 2550, in np_dstack
    shape[2] = sum(a.shape[2] for a in tup)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 2550, in <genexpr>
    shape[2] = sum(a.shape[2] for a in tup)
                   ~~~~~~~^^^
IndexError: tuple index out of range

======================================================================
ERROR: test_secfxp (test_seclists.Arithmetic.test_secfxp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_seclists.py", line 125, in test_secfxp
    self.assertFalse(mpc.run(mpc.output(s < s)))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 181, in run
    return self._loop.run_until_complete(f)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 651, in run_until_complete
    raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.

======================================================================
ERROR: test_secfxp (test_statistics.Arithmetic.test_secfxp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_statistics.py", line 106, in test_secfxp
    self.assertAlmostEqual(mpc.run(mpc.output(median(x))), 3)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.11/site-packages/mpyc/runtime.py", line 181, in run
    return self._loop.run_until_complete(f)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 651, in run_until_complete
    raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.

======================================================================
FAIL: test_find_prime_root (test_finfields.Arithmetic.test_find_prime_root)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_finfields.py", line 55, in test_find_prime_root
    self.assertEqual(pnw, (31, 1, 1))
AssertionError: Tuples differ: (19, 1, 1) != (31, 1, 1)

First differing element 0:
19
31

- (19, 1, 1)
+ (31, 1, 1)

======================================================================
FAIL: test_async (test_runtime.Arithmetic.test_async)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 492, in test_async
    self.assertRaises(ValueError, mpc.run, mpc.throttler(1.5))
AssertionError: percentage as decimal fraction between 0.0 and 1.0

======================================================================
FAIL: test_qsecfld (test_runtime.Arithmetic.test_qsecfld)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_runtime.py", line 630, in test_qsecfld
    self.assertRaises(TypeError, mpc.to_bits, a)
AssertionError: TypeError not raised by to_bits

======================================================================
FAIL: test_secfld (test_seclists.Arithmetic.test_secfld)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_seclists.py", line 27, in test_secfld
    self.assertEqual(mpc.run(mpc.output(list(s))), [1, 2, 6, 9])
AssertionError: Lists differ: [1, 2, 5, 9, 7] != [1, 2, 6, 9]

First differing element 2:
5
6

First list contains 1 additional elements.
First extra element 4:
7

- [1, 2, 5, 9, 7]
?        ^   ---

+ [1, 2, 6, 9]
?        ^

======================================================================
FAIL: test_secint (test_seclists.Arithmetic.test_secint)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/dev/mpyc/tests/test_seclists.py", line 64, in test_secint
    self.assertRaises(ValueError, s.remove, secint(11))
AssertionError: ValueError not raised by remove

----------------------------------------------------------------------
Ran 81 tests in 5.447s

FAILED (failures=5, errors=12)