From 312d85bcde3f79bb157d07944c6bd67d5da057a2 Mon Sep 17 00:00:00 2001 From: Hyun Park Date: Sat, 21 May 2022 15:25:56 +0900 Subject: [PATCH 1/4] add filter.__reduce__ --- Lib/test/test_builtin.py | 2 -- vm/src/builtins/filter.rs | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 8f5b8f0e171..cac2105b6aa 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -658,8 +658,6 @@ def badfunc(): self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4]) self.assertRaises(TypeError, list, filter(42, (1, 2))) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_filter_pickle(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): f1 = filter(filter_char, "abcdeabcde") diff --git a/vm/src/builtins/filter.rs b/vm/src/builtins/filter.rs index 1455aec8c03..8c1d5f6898a 100644 --- a/vm/src/builtins/filter.rs +++ b/vm/src/builtins/filter.rs @@ -37,7 +37,12 @@ impl Constructor for PyFilter { } #[pyimpl(with(IterNext, Constructor), flags(BASETYPE))] -impl PyFilter {} +impl PyFilter { + #[pymethod(magic)] + fn reduce(&self, vm: &VirtualMachine) -> (PyTypeRef, (PyObjectRef, PyIter)) { + (vm.ctx.types.filter_type.clone(), (self.predicate.clone(), self.iterator.clone())) + } +} impl IterNextIterable for PyFilter {} impl IterNext for PyFilter { From a1b6e7e79388fb75ccdd54d91398c9275da2cb0b Mon Sep 17 00:00:00 2001 From: Hyun Park Date: Sat, 21 May 2022 15:44:35 +0900 Subject: [PATCH 2/4] formatting filter.rs --- vm/src/builtins/filter.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vm/src/builtins/filter.rs b/vm/src/builtins/filter.rs index 8c1d5f6898a..39bf70e57e4 100644 --- a/vm/src/builtins/filter.rs +++ b/vm/src/builtins/filter.rs @@ -40,7 +40,10 @@ impl Constructor for PyFilter { impl PyFilter { #[pymethod(magic)] fn reduce(&self, vm: &VirtualMachine) -> (PyTypeRef, (PyObjectRef, PyIter)) { - (vm.ctx.types.filter_type.clone(), (self.predicate.clone(), self.iterator.clone())) + ( + vm.ctx.types.filter_type.clone(), + (self.predicate.clone(), self.iterator.clone()), + ) } } From 8ca25e57b9789ba3b0af6e75ceb5927ef85bcbb1 Mon Sep 17 00:00:00 2001 From: Hyun Park Date: Sat, 21 May 2022 16:20:08 +0900 Subject: [PATCH 3/4] Update test_itertools.py --- Lib/test/test_itertools.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index 652ffdde10a..7fa961f8557 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -856,8 +856,6 @@ def keyfunc(obj): keyfunc.skip = 1 self.assertRaises(ExpectedError, gulp, [None, None], keyfunc) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_filter(self): self.assertEqual(list(filter(isEven, range(6))), [0,2,4]) self.assertEqual(list(filter(None, [0,1,0,2,0])), [1,2]) From 134d4fe2f87c3b82b18b5710568e81fb8bc3e21e Mon Sep 17 00:00:00 2001 From: Hyun Park Date: Sat, 21 May 2022 16:53:06 +0900 Subject: [PATCH 4/4] add complex.__mod__ --- extra_tests/snippets/builtin_complex.py | 1 + vm/src/builtins/complex.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/extra_tests/snippets/builtin_complex.py b/extra_tests/snippets/builtin_complex.py index 61dc7071240..ecba467e8dc 100644 --- a/extra_tests/snippets/builtin_complex.py +++ b/extra_tests/snippets/builtin_complex.py @@ -41,6 +41,7 @@ # "can't mod complex numbers. assert_raises(TypeError, lambda: complex(2, -3) % 2) assert_raises(TypeError, lambda: 2 % complex(2, -3)) +assert_raises(TypeError, lambda: complex(2, -3).__mod__(2)) # __floordiv__, __rfloordiv__ # can't take floor of complex number. diff --git a/vm/src/builtins/complex.rs b/vm/src/builtins/complex.rs index f33d4856f76..a8aab079300 100644 --- a/vm/src/builtins/complex.rs +++ b/vm/src/builtins/complex.rs @@ -204,6 +204,11 @@ impl PyComplex { #[pyimpl(flags(BASETYPE), with(Comparable, Hashable, Constructor))] impl PyComplex { + #[pymethod(name = "__mod__")] + fn mod_(&self, other: PyObjectRef, vm: &VirtualMachine) -> PyResult { + return Err(vm.new_type_error("can't mod complex numbers.".to_owned(),)) + } + #[pymethod(magic)] fn complex(zelf: PyRef, vm: &VirtualMachine) -> PyRef { if zelf.is(&vm.ctx.types.complex_type) {