From 3ab88fb2fa8f2f50f151cc8064e53e280ca865a0 Mon Sep 17 00:00:00 2001 From: XinranTang Date: Fri, 10 Dec 2021 11:48:38 -0500 Subject: [PATCH] Add extra tests --- dist/undefined_AD-2.0.4.tar.gz | Bin 22107 -> 0 bytes ...hl => undefined_AD-2.1.0-py3-none-any.whl} | Bin 14681 -> 14494 bytes dist/undefined_AD-2.1.0.tar.gz | Bin 0 -> 22052 bytes htmlcov/index.html | 46 +++++++-------- setup.cfg | 2 +- src/undefined_AD.egg-info/PKG-INFO | 8 ++- test/test_API.py | 54 +++++++++++++++++- test/test_graph_generator_operation.py | 3 - 8 files changed, 80 insertions(+), 33 deletions(-) delete mode 100644 dist/undefined_AD-2.0.4.tar.gz rename dist/{undefined_AD-2.0.4-py3-none-any.whl => undefined_AD-2.1.0-py3-none-any.whl} (59%) create mode 100644 dist/undefined_AD-2.1.0.tar.gz diff --git a/dist/undefined_AD-2.0.4.tar.gz b/dist/undefined_AD-2.0.4.tar.gz deleted file mode 100644 index f700cbfd7e21268010735a7920bbe5a24cc4aacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22107 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 IGJksi0vV9eoB#j- delta 4417 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 diff --git a/dist/undefined_AD-2.1.0.tar.gz b/dist/undefined_AD-2.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..af8ee0076069435659bed63d9ad83ea77fdf18d3 GIT binary patch literal 22052 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 literal 0 HcmV?d00001 diff --git a/htmlcov/index.html b/htmlcov/index.html index d9c239d..104e84b 100644 --- a/htmlcov/index.html +++ b/htmlcov/index.html @@ -11,7 +11,7 @@

Coverage report: - 33% + 94%

@@ -49,49 +49,49 @@

Coverage report: - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/API.py - 135 - 51 + src/undefined/API.py + 114 + 3 0 - 62% + 97% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/Calculator.py + src/undefined/Calculator.py 270 - 228 + 2 0 - 16% + 99% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/GraphGenerator.py + src/undefined/GraphGenerator.py 499 - 339 + 48 0 - 32% + 90% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/UDFunction.py + src/undefined/UDFunction.py 221 - 156 + 16 0 - 29% + 93% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/Utils.py + src/undefined/Utils.py 61 - 26 + 5 0 - 57% + 92% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/__init__.py + src/undefined/__init__.py 3 0 0 100% - /usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/undefined/__main__.py + src/undefined/__main__.py 0 0 0 @@ -101,10 +101,10 @@

Coverage report: Total - 1189 - 800 + 1168 + 74 0 - 33% + 94% @@ -116,7 +116,7 @@

Coverage report:

coverage.py v6.2, - created at 2021-12-10 11:08 -0500 + created at 2021-12-10 11:45 -0500

diff --git a/setup.cfg b/setup.cfg index c331b31..bcbe177 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = undefined_AD -version = 2.0.4 +version = 2.1.0 author = cs107-undefined author_email = xinran_tang@g.harvard.edu description = Auto differetiation library diff --git a/src/undefined_AD.egg-info/PKG-INFO b/src/undefined_AD.egg-info/PKG-INFO index 87a33dc..1a952af 100644 --- a/src/undefined_AD.egg-info/PKG-INFO +++ b/src/undefined_AD.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: undefined-AD -Version: 2.0.4 +Version: 2.1.0 Summary: Auto differetiation library Home-page: https://github.com/cs107-undefined/cs107-FinalProject Author: cs107-undefined @@ -17,9 +17,11 @@ License-File: LICENSE # cs107-FinalProject -[![Build Status](https://app.travis-ci.com/cs107-undefined/cs107-FinalProject.svg?branch=milestone2)](https://app.travis-ci.com/cs107-undefined/cs107-FinalProject) +[![Build Status](https://app.travis-ci.com/cs107-undefined/cs107-FinalProject.svg?branch=final_milestone)](https://app.travis-ci.com/cs107-undefined/cs107-FinalProject) -[![codecov](https://codecov.io/gh/cs107-undefined/cs107-FinalProject/branch/milestone2/graph/badge.svg?token=MWEZONI94C)](https://codecov.io/gh/cs107-undefined/cs107-FinalProject) +[![codecov](https://codecov.io/gh/cs107-undefined/cs107-FinalProject/branch/final_milestone/graph/badge.svg?token=MWEZONI94C)](https://codecov.io/gh/cs107-undefined/cs107-FinalProject) + +[![Documentation Status](https://readthedocs.org/projects/cs107-undefined/badge/?version=latest)](https://cs107-undefined.readthedocs.io/en/latest/?badge=latest) [**DOCUMENTATION**](https://cs107-undefined.readthedocs.io/en/latest/) diff --git a/test/test_API.py b/test/test_API.py index 836d65f..4f56a5b 100644 --- a/test/test_API.py +++ b/test/test_API.py @@ -67,7 +67,46 @@ def test_trace_with_incompatible_seeds(self): with self.assertRaises(AttributeError): trace(self.f2, seeds = np.array([[1,3,2],[1,3,2],[2,3,3]]), x=np.array( [[2, 3]]), y=np.array([[1, 2]])) - #def test_trace_with_vector_inputs_with_seeds(self): + + def test_trace_with_incompatible_seeds_reverse(self): + with self.assertRaises(AttributeError): + trace(self.f2, seeds = np.array([[1,3,2],[1,3,2],[2,3,3]]), mode = "reverse", x=np.array( + [[2, 3]]), y=np.array([[1, 2]])) + + def test_trace_with_scalar_inputs_seeds(self): + with self.assertRaises(TypeError): + trace(self.f1, seeds = np.array([[1,0]]), x=1) + self.assertEqual(trace(self.f1, seeds = 2, x=1), (3,2)) + self.assertEqual(trace(self.f2, seeds = np.array([[1,0],[0,1]]), x=2, y=999)[1], [[1], [1]]) + with self.assertRaises(TypeError): + trace(self.f2, seeds = 1, x=2, y=999) + with self.assertRaises(TypeError): + trace(self.f2, seeds = "seed", x=2, y=999) + with self.assertRaises(TypeError): + trace(self.f2, seeds = np.array([[1,0],[0,1]]), x="2", y=999) + with self.assertRaises(AttributeError): + trace(self.f2, seeds = np.array([[1],[0]]), x=2, y=999) + + def test_trace_with_scalar_inputs_seeds_reverse(self): + with self.assertRaises(TypeError): + trace(self.f1, seeds = np.array([[1,0]]), mode='reverse', x=1) + self.assertEqual(trace(self.f1, seeds = 2, mode='reverse', x=1), (3,2)) + self.assertEqual(trace(self.f2, seeds = np.array([[1,0],[0,1]]), mode='reverse', x=2, y=999)[1], [[1], [1]]) + with self.assertRaises(TypeError): + trace(self.f2, seeds = 1, mode='reverse', x=2, y=999) + with self.assertRaises(TypeError): + trace(self.f2, seeds = "seed", mode='reverse', x=2, y=999) + with self.assertRaises(TypeError): + trace(self.f2, seeds = np.array([[1,0],[0,1]]), mode='reverse', x="2", y=999) + with self.assertRaises(AttributeError): + trace(self.f2, seeds = np.array([[1],[0]]), mode='reverse', x=2, y=999) + + def test_trace_with_vector_inputs_seeds(self): + self.assertEqual(trace(self.f2, seeds = np.array([[1,0],[0,1]]), x=np.array([[2, 3]]), y=np.array([[1, 2]]))[1], [[1, 1], [1, 1]]) + + def test_trace_with_vector_inputs_seeds_reverse(self): + self.assertEqual(trace(self.f2, seeds = np.array([[1,0],[0,1]]), mode='reverse', x=np.array([[2, 3]]), y=np.array([[1, 2]]))[1], [[1, 1], [1, 1]]) + def test_trace_with_different_moded(self): self.assertEqual(trace(self.f1, x=2), (4, 1)) self.assertEqual(trace(self.f1, mode='forward', x=2), (4, 1)) @@ -111,10 +150,18 @@ def test_trace_multiple_vector_inputs(self): self.assertEqual(trace(self.f3, mode='reverse', x=np.array( [[2, 2]]), y=np.array([[4, 4]]))[1], [[2., 2.], [0.25, 0.25]]) - def test_trace_single_vector_inputs(self): + def test_trace_single_vector_input(self): self.assertEqual(trace(self.f1, x=np.array([[2, 2]]))[1], [[1, 1]]) + with self.assertRaises(TypeError): + trace(self.f1, x=np.array([])) + def test_trace_non_lambda_function(self): + with self.assertRaises(TypeError): + trace("Function", x = 1) + def test_trace_vector_functions(self): + self.assertEqual(trace([self.f2,self.f3], x = 2, y = 4)[1].tolist(), [[[1.0], [1.0]], [[2.0], [0.25]]]) + def test_mixed_inputs(self): self.assertEqual(trace(self.f3, x=np.array([[2, 2]]), y=4)[ 0].tolist(), [[6, 6]]) @@ -125,7 +172,8 @@ def test_mixed_inputs(self): 1], [[2., 2.], [0.25, 0.25]]) self.assertEqual(trace(self.f3, mode='reverse', x=np.array([[2, 2]]), y=4)[ 1], [[2., 2.], [0.25, 0.25]]) - + self.assertEqual(trace(self.f3, mode='reverse', x=np.array([[2, 2]]), y=np.array([[4, 4]]))[ + 1], [[2., 2.], [0.25, 0.25]]) if __name__ == "__main__": unittest.main() diff --git a/test/test_graph_generator_operation.py b/test/test_graph_generator_operation.py index c5389d1..6994367 100644 --- a/test/test_graph_generator_operation.py +++ b/test/test_graph_generator_operation.py @@ -381,9 +381,6 @@ def test_ge(self): with self.assertRaises(TypeError): self.f25 >= "self.f19" - - - # this will help to run the unittest directly. if __name__ == "__main__":