diff --git a/examples/examples-non-uniform-grids.ipynb b/examples/examples-non-uniform-grids.ipynb index f61112b..62e2ffb 100644 --- a/examples/examples-non-uniform-grids.ipynb +++ b/examples/examples-non-uniform-grids.ipynb @@ -65,7 +65,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -96,7 +96,7 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, "execution_count": 4, @@ -107,7 +107,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -145,7 +145,7 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, "execution_count": 5, @@ -156,7 +156,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -199,7 +199,7 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, "execution_count": 6, @@ -210,7 +210,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -239,24 +239,19 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "ValueError", + "evalue": "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0md_dx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFinDiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_nu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0macc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mdf_dx_nu\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0md_dx\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf_nu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_fine\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_dx_exact\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_nu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_dx_nu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'o'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/findiff/findiff.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macc\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mroot\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPartialDerivative\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/findiff/findiff.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 208\u001b[0m \"\"\"\n\u001b[1;32m 209\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 210\u001b[0;31m \u001b[0mtuples\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_convert_to_valid_tuple_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 211\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mderivs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspac\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/findiff/findiff.py\u001b[0m in \u001b[0;36m_convert_to_valid_tuple_list\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 260\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 261\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mall_tuples\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 262\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_assert_tuple_valid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 263\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mall_tuples\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/findiff/findiff.py\u001b[0m in \u001b[0;36m_assert_tuple_valid\u001b[0;34m(self, t)\u001b[0m\n\u001b[1;32m 271\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Axis must be non-negative integer.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 273\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 274\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Spacing must be greater than zero.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0morder\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" + ] } ], "source": [ diff --git a/examples/examples-vector-calculus.ipynb b/examples/examples-vector-calculus.ipynb index b943131..8045d37 100644 --- a/examples/examples-vector-calculus.ipynb +++ b/examples/examples-vector-calculus.ipynb @@ -26,9 +26,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -51,9 +49,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "x, y, z = [np.linspace(0, 10, 100)] * 3\n", @@ -72,9 +68,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -100,13 +94,11 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ - "grad = Gradient(h=[dx, dy, dz])\n", + "grad = Gradient(spac=[dx, dy, dz])\n", "grad_f = grad(f)" ] }, @@ -119,10 +111,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -130,7 +120,7 @@ "(3, 100, 100, 100)" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -148,10 +138,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -159,7 +147,7 @@ "(100, 100, 100)" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -184,10 +172,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { @@ -195,7 +181,7 @@ "(3, 100, 100, 100)" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -214,10 +200,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { @@ -225,13 +209,13 @@ "(100, 100, 100)" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "div = Divergence(h=[dx, dy, dz])\n", + "div = Divergence(spac=[dx, dy, dz])\n", "div_g = div(g)\n", "div_g.shape" ] @@ -246,9 +230,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { diff --git a/findiff/__init__.py b/findiff/__init__.py index 94e613a..de93cca 100644 --- a/findiff/__init__.py +++ b/findiff/__init__.py @@ -2,4 +2,4 @@ from .findiff import FinDiff, Coef, Identity, Coefficient from .vector import Gradient, Divergence, Curl, Laplacian -__version__ = "0.6.0" +__version__ = "0.6.1" diff --git a/findiff/findiff.py b/findiff/findiff.py index 52c10bb..1817f60 100644 --- a/findiff/findiff.py +++ b/findiff/findiff.py @@ -311,12 +311,17 @@ def __init__(self, *args): tuples = self._convert_to_valid_tuple_list(args) self.derivs = {} self.spac = {} + self.coords = {} for t in tuples: - axis, spac, order = t + axis, spac_or_coords, order = t if axis in self.derivs: raise ValueError("Derivative along axis %d specified more than once." % axis) self.derivs[axis] = order - self.spac[axis] = spac + + if hasattr(spac_or_coords, "__len__"): + self.coords[axis] = spac_or_coords + else: + self.spac[axis] = spac_or_coords def axes(self): return sorted(list(self.derivs.keys())) @@ -329,13 +334,13 @@ def order(self, axis): def apply(self, fd, u): for axis, order in self.derivs.items(): - if fd.is_uniform(): + if self.spac: u = fd.diff(u, self.spac[axis], order, axis, coefficients(order, fd.acc)) else: coefs = [] - for i in range(len(fd.coords[axis])): - coefs.append(coefficients_non_uni(order, fd.acc, fd.coords[axis], i)) - u = fd.diff_non_uni(u, fd.coords[axis], axis, coefs) + for i in range(len(self.coords[axis])): + coefs.append(coefficients_non_uni(order, fd.acc, self.coords[axis], i)) + u = fd.diff_non_uni(u, self.coords[axis], axis, coefs) return u @@ -368,10 +373,14 @@ def _assert_tuple_valid(self, t): if len(t) > 3: raise ValueError("Too many arguments in tuple.") - axis, h, order = t + axis, coords_or_spac, order = t if not isinstance(axis, int) or axis < 0: raise ValueError("Axis must be non-negative integer.") - if h <= 0: - raise ValueError("Spacing must be greater than zero.") + if not hasattr(coords_or_spac, "__len__"): + h = coords_or_spac + if h <= 0: + raise ValueError("Spacing must be greater than zero.") if not isinstance(order, int) or order <= 0: - raise ValueError("Derivative order must be positive integer.") \ No newline at end of file + raise ValueError("Derivative order must be positive integer.") + + diff --git a/findiff/vector.py b/findiff/vector.py index 03956b1..11812a2 100644 --- a/findiff/vector.py +++ b/findiff/vector.py @@ -25,15 +25,19 @@ def __init__(self, **kwargs): """ - if "spac" in kwargs: - self.h = kwargs["spac"] + if "spac" in kwargs or "h" in kwargs: # necessary for backward compatibility 0.5.2 => 0.6 + if "spac" in kwargs: + kw = "spac" + else: + kw = "h" + self.h = kwargs[kw] self.ndims = len(self.h) self.components = [FinDiff((k, self.h[k]), **kwargs) for k in range(self.ndims)] if "coords" in kwargs: coords = kwargs.pop("coords") self.ndims = self.__get_dimension(coords) - self.components = [FinDiff((k, 1), coords=coords, **kwargs) for k in range(self.ndims)] + self.components = [FinDiff((k, coords[k], 1), **kwargs) for k in range(self.ndims)] def __get_dimension(self, coords): if isinstance(coords, np.ndarray): diff --git a/setup.py b/setup.py index 3f18dbc..4f0cafb 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='findiff', - version='0.6.0', + version='0.6.1', description='A Python package for finite difference derivatives in any number of dimensions.', long_description="""A Python package for finite difference derivatives in any number of dimensions. diff --git a/test/test_findiff.py b/test/test_findiff.py index a8eb5ca..dee5e44 100644 --- a/test/test_findiff.py +++ b/test/test_findiff.py @@ -105,8 +105,8 @@ def test_non_uniform_3d(self): X, Y, Z = np.meshgrid(x, y, z, indexing='ij') f = np.exp(-X**2-Y**2-Z**2) - d_dy = FinDiff(1, 1, acc=4) - fy = d_dy(f, coords=[x, y, z]) + d_dy = FinDiff(1, y, acc=4) + fy = d_dy(f) fye = - 2 * Y * np.exp(-X**2-Y**2-Z**2) assert_array_almost_equal(fy, fye, decimal=4) @@ -116,7 +116,7 @@ def test_FinDiff_NonUni_2d(self): X, Y = np.meshgrid(x, y, indexing='ij') f = np.exp(-X**2-Y**2) - d_dx = FinDiff((0, 1), coords=[x, y]) + d_dx = FinDiff((0, x, 1)) fx = d_dx(f) fxe = - 2 * X * np.exp(-X**2-Y**2) assert_array_almost_equal(fx, fxe, decimal=4) @@ -128,7 +128,7 @@ def test_BasicFinDiffNonUni_3d(self): X, Y, Z = np.meshgrid(x, y, z, indexing='ij') f = np.exp(-X**2-Y**2-Z**2) - d_dy = FinDiff(1, 1, coords=[x, y, z], acc=4) + d_dy = FinDiff(1, y, acc=4) fy = d_dy(f) fye = - 2 * Y * np.exp(-X**2-Y**2-Z**2) assert_array_almost_equal(fy, fye, decimal=4) diff --git a/test/test_vector.py b/test/test_vector.py index 33b9a07..2f6bda8 100644 --- a/test/test_vector.py +++ b/test/test_vector.py @@ -18,6 +18,18 @@ def test_3d_gradient_on_scalar_func(self): grad_f = grad(f) assert_array_almost_equal(grad_f, grad_f_ex) + def test_spacing_with_h(self): + axes, h, [X, Y, Z] = init_mesh(3, (50, 50, 50)) + f = np.sin(X) * np.sin(Y) * np.sin(Z) + grad_f_ex = np.array([ + np.cos(X) * np.sin(Y) * np.sin(Z), + np.sin(X) * np.cos(Y) * np.sin(Z), + np.sin(X) * np.sin(Y) * np.cos(Z), + ]) + grad = Gradient(h=h, acc=4) + grad_f = grad(f) + assert_array_almost_equal(grad_f, grad_f_ex) + def test_3d_gradient_on_scalar_func_non_uni(self): axes, h, [X, Y, Z] = init_mesh(3, (50, 50, 50)) f = np.sin(X) * np.sin(Y) * np.sin(Z)