diff --git a/ACKNOWLEDGMENTS.md b/ACKNOWLEDGMENTS.md index 398f136b2..0d85c089b 100644 --- a/ACKNOWLEDGMENTS.md +++ b/ACKNOWLEDGMENTS.md @@ -7,6 +7,7 @@ with a short description of your contribution(s) below. For example: MLX was developed with contributions from the following individuals: +- Manish Aradwad: Added support for deepcopy. - Nripesh Niketan: Added `softsign`, `softmax`, `hardswish`, `logsoftmax` activation functions. Added `dropout3d` ops. - Juarez Bochi: Fixed bug in cross attention. - Justin Deschenaux: Sine, Cosine, arange, randint, truncated normal, bernoulli, lion optimizer, Dropout2d, linear and logistic regression python example. diff --git a/python/mlx/nn/layers/base.py b/python/mlx/nn/layers/base.py index 4101111a7..b587ccd97 100644 --- a/python/mlx/nn/layers/base.py +++ b/python/mlx/nn/layers/base.py @@ -441,8 +441,7 @@ class Module(dict): self.train(False) def __getstate__(self): - state = self.__dict__.copy() - return state + return self.__dict__.copy() def __setstate__(self, state): self.__dict__.update(state) diff --git a/python/tests/test_nn.py b/python/tests/test_nn.py index e620ad831..332144a65 100644 --- a/python/tests/test_nn.py +++ b/python/tests/test_nn.py @@ -840,6 +840,19 @@ class TestNN(mlx_tests.MLXTestCase): self.assertTrue(y.shape, x.shape) self.assertTrue(y.dtype, mx.float16) + def test_deepcopy(self): + import copy + + layer = nn.Linear(input_dims=4, output_dims=8) + layer_copy = copy.deepcopy(layer) + + # Verify that the copied layer is not the same object as the original layer + self.assertIsNot(layer_copy, layer) + + # Verify that the copied layer has the same attributes as the original layer + self.assertEqual(layer_copy.input_dims, layer.input_dims) + self.assertEqual(layer_copy.output_dims, layer.output_dims) + if __name__ == "__main__": unittest.main()