[yt-svn] commit/yt: 8 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Tue Oct 28 21:29:28 PDT 2014


8 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/adaa77237c0d/
Changeset:   adaa77237c0d
Branch:      yt
User:        ngoldbaum
Date:        2014-10-26 23:05:52+00:00
Summary:     Ensuring that YTArrays are always attached to a valid unit object.
Affected #:  1 file

diff -r 9dd19b71e068de9beb89189f61e07a60aa24969b -r adaa77237c0d59ed3a87331c649a15eebe8315a2 yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -339,7 +339,11 @@
         """
         if obj is None and hasattr(self, 'units'):
             return
-        self.units = getattr(obj, 'units', None)
+        units = getattr(obj, 'units', None)
+        if units is None:
+            self.units = Unit()
+        else:
+            self.units = units
 
     def __repr__(self):
         """


https://bitbucket.org/yt_analysis/yt/commits/ea17dde79112/
Changeset:   ea17dde79112
Branch:      yt
User:        ngoldbaum
Date:        2014-10-26 23:06:36+00:00
Summary:     Adding a wrapper for numpy.intersect1d.

Also adding docstrings to uconcatenate.
Affected #:  1 file

diff -r adaa77237c0d59ed3a87331c649a15eebe8315a2 -r ea17dde7911292819489c2476c066daf0c6bea39 yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -1108,6 +1108,12 @@
         return str(self)
 
 def uconcatenate(arrs, *args, **kwargs):
+    """A wrapper around numpy.concatenate that preserves units.
+
+    Concatenates a sequence of YTArray instances into one array.  All input
+    arrays must have the same units.  See the documentation of numpy.concatenate
+    for full details.
+    """
     v = np.concatenate(arrs, *args, **kwargs)
     if not any(isinstance(a, YTArray) for a in arrs):
         return v
@@ -1119,6 +1125,23 @@
     v.units = a1.units
     return v
 
+def uintersect1d(arr1, arr2, assume_unique=False):
+    """A wrapper around numpy.intersect1d that preserves units.
+
+    Returns the sorted unique elements of the two input arrays.  All input
+    arrays must have the same units.  See the documentation of numpy.intersect1d
+    for full details.
+    """
+    v = np.intersect1d(arr1, arr2, assume_unique=assume_unique)
+    if not any(isinstance(a, YTArray) for a in (arr1, arr2)):
+        return v
+    if not all(isinstance(a, YTArray) for a in (arr1, arr2)):
+        raise RuntimeError("Not all of your arrays are YTArrays.")
+    if not arr1.units == arr2.units:
+        raise RuntimeError("Your arrays must have identical units.")
+    v.units = arr1.units
+    return v
+
 def array_like_field(data, x, field):
     field = data._determine_fields(field)[0]
     if isinstance(field, tuple):


https://bitbucket.org/yt_analysis/yt/commits/d3983009798d/
Changeset:   d3983009798d
Branch:      yt
User:        ngoldbaum
Date:        2014-10-26 23:07:29+00:00
Summary:     Importing uintersect1d and uconcatenate into the top-level yt namespace.
Affected #:  1 file

diff -r ea17dde7911292819489c2476c066daf0c6bea39 -r d3983009798d5b3588daf0825ef0a35b17e63731 yt/__init__.py
--- a/yt/__init__.py
+++ b/yt/__init__.py
@@ -98,7 +98,11 @@
 
 import yt.utilities.physical_constants as physical_constants
 import yt.units as units
-from yt.units.yt_array import YTArray, YTQuantity
+from yt.units.yt_array import \
+     YTArray, \
+     YTQuantity, \
+     uconcatenate, \
+     uintersect1d
 
 from yt.fields.api import \
     field_plugins, \


https://bitbucket.org/yt_analysis/yt/commits/bcbbc7d3708f/
Changeset:   bcbbc7d3708f
Branch:      yt
User:        ngoldbaum
Date:        2014-10-27 02:10:22+00:00
Summary:     Adding tests for uconcatenate and uintersect1d
Affected #:  1 file

diff -r d3983009798d5b3588daf0825ef0a35b17e63731 -r bcbbc7d3708f0b2e3b5d735e2f149a4ac2365ca5 yt/units/tests/test_ytarray.py
--- a/yt/units/tests/test_ytarray.py
+++ b/yt/units/tests/test_ytarray.py
@@ -32,7 +32,8 @@
 from numpy import array
 from yt.units.yt_array import \
     YTArray, YTQuantity, \
-    unary_operators, binary_operators
+    unary_operators, binary_operators, \
+    uconcatenate, uintersect1d
 from yt.utilities.exceptions import \
     YTUnitOperationError, YTUfuncUnitError
 from yt.testing import fake_random_ds, requires_module
@@ -856,3 +857,15 @@
 
     os.chdir(curdir)
     shutil.rmtree(tmpdir)
+
+def test_numpy_wrappers():
+    a1 = YTArray([1, 2, 3], 'cm')
+    a2 = YTArray([2, 3, 4, 5, 6], 'cm')
+    catanswer = [1, 2, 3, 2, 3, 4, 5, 6]
+    intanswer = [2, 3]
+
+    yield assert_array_equal, YTArray(catanswer, 'cm'), uconcatenate((a1, a2))
+    yield assert_array_equal, catanswer, np.concatenate((a1, a2))
+
+    yield assert_array_equal, YTArray(intanswer, 'cm'), uintersect1d(a1, a2)
+    yield assert_array_equal, intanswer, np.intersect1d(a1, a2)


https://bitbucket.org/yt_analysis/yt/commits/8ebacd5b8f3d/
Changeset:   8ebacd5b8f3d
Branch:      yt
User:        ngoldbaum
Date:        2014-10-27 02:44:58+00:00
Summary:     Use NULL_UNIT wherever possible.  Addiing uunion1d as well.
Affected #:  2 files

diff -r bcbbc7d3708f0b2e3b5d735e2f149a4ac2365ca5 -r 8ebacd5b8f3dabf29b9d1b514e0d9c56b91fd7b8 yt/units/tests/test_ytarray.py
--- a/yt/units/tests/test_ytarray.py
+++ b/yt/units/tests/test_ytarray.py
@@ -33,7 +33,8 @@
 from yt.units.yt_array import \
     YTArray, YTQuantity, \
     unary_operators, binary_operators, \
-    uconcatenate, uintersect1d
+    uconcatenate, uintersect1d, \
+    uunion1d
 from yt.utilities.exceptions import \
     YTUnitOperationError, YTUfuncUnitError
 from yt.testing import fake_random_ds, requires_module
@@ -861,11 +862,17 @@
 def test_numpy_wrappers():
     a1 = YTArray([1, 2, 3], 'cm')
     a2 = YTArray([2, 3, 4, 5, 6], 'cm')
-    catanswer = [1, 2, 3, 2, 3, 4, 5, 6]
-    intanswer = [2, 3]
+    catenate_answer = [1, 2, 3, 2, 3, 4, 5, 6]
+    intersect_answer = [2, 3]
+    union_answer = [1, 2, 3, 4, 5, 6]
 
-    yield assert_array_equal, YTArray(catanswer, 'cm'), uconcatenate((a1, a2))
-    yield assert_array_equal, catanswer, np.concatenate((a1, a2))
+    yield (assert_array_equal, YTArray(catenate_answer, 'cm'),
+           uconcatenate((a1, a2)))
+    yield assert_array_equal, catenate_answer, np.concatenate((a1, a2))
 
-    yield assert_array_equal, YTArray(intanswer, 'cm'), uintersect1d(a1, a2)
-    yield assert_array_equal, intanswer, np.intersect1d(a1, a2)
+    yield (assert_array_equal, YTArray(intersect_answer, 'cm'),
+           uintersect1d(a1, a2))
+    yield assert_array_equal, intersect_answer, np.intersect1d(a1, a2)
+
+    yield assert_array_equal, YTArray(union_answer, 'cm'), uunion1d(a1, a2)
+    yield assert_array_equal, union_answer, np.union1d(a1, a2)

diff -r bcbbc7d3708f0b2e3b5d735e2f149a4ac2365ca5 -r 8ebacd5b8f3dabf29b9d1b514e0d9c56b91fd7b8 yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -38,6 +38,8 @@
 from yt.utilities.on_demand_imports import _astropy
 from sympy import Rational
 
+NULL_UNIT = Unit()
+
 # redefine this here to avoid a circular import from yt.funcs
 def iterable(obj):
     try: len(obj)
@@ -83,13 +85,11 @@
     return None
 
 def arctan2_unit(unit1, unit2):
-    return Unit()
+    return NULL_UNIT
 
 def comparison_unit(unit1, unit2):
     return None
 
-NULL_UNIT = Unit()
-
 def coerce_iterable_units(input_object):
     if isinstance(input_object, np.ndarray):
         return input_object
@@ -339,11 +339,7 @@
         """
         if obj is None and hasattr(self, 'units'):
             return
-        units = getattr(obj, 'units', None)
-        if units is None:
-            self.units = Unit()
-        else:
-            self.units = units
+        self.units = getattr(obj, 'units', NULL_UNIT)
 
     def __repr__(self):
         """
@@ -952,7 +948,7 @@
         elif context[0] in unary_operators:
             u = getattr(context[1][0], 'units', None)
             if u is None:
-                u = Unit()
+                u = NULL_UNIT
             unit = self._ufunc_registry[context[0]](u)
             ret_class = type(self)
         elif context[0] in binary_operators:
@@ -1107,14 +1103,7 @@
     def __repr__(self):
         return str(self)
 
-def uconcatenate(arrs, *args, **kwargs):
-    """A wrapper around numpy.concatenate that preserves units.
-
-    Concatenates a sequence of YTArray instances into one array.  All input
-    arrays must have the same units.  See the documentation of numpy.concatenate
-    for full details.
-    """
-    v = np.concatenate(arrs, *args, **kwargs)
+def validate_numpy_wrapper_units(v, arrs):
     if not any(isinstance(a, YTArray) for a in arrs):
         return v
     if not all(isinstance(a, YTArray) for a in arrs):
@@ -1125,21 +1114,37 @@
     v.units = a1.units
     return v
 
+def uconcatenate(arrs, *args, **kwargs):
+    """Concatenate a sequence of arrays.
+
+    This wrapper around numpy.concatenate preserves units. All input arrays must
+    have the same units.  See the documentation of numpy.concatenate for full
+    details.
+    """
+    v = np.concatenate(arrs, *args, **kwargs)
+    v = validate_numpy_wrapper_units(v, arrs)
+    return v
+
 def uintersect1d(arr1, arr2, assume_unique=False):
-    """A wrapper around numpy.intersect1d that preserves units.
+    """Find the sorted unique elements of the two input arrays.
 
-    Returns the sorted unique elements of the two input arrays.  All input
-    arrays must have the same units.  See the documentation of numpy.intersect1d
-    for full details.
+    A wrapper around numpy.intersect1d that preserves units.  All input arrays
+    must have the same units.  See the documentation of numpy.intersect1d for
+    full details.
     """
     v = np.intersect1d(arr1, arr2, assume_unique=assume_unique)
-    if not any(isinstance(a, YTArray) for a in (arr1, arr2)):
-        return v
-    if not all(isinstance(a, YTArray) for a in (arr1, arr2)):
-        raise RuntimeError("Not all of your arrays are YTArrays.")
-    if not arr1.units == arr2.units:
-        raise RuntimeError("Your arrays must have identical units.")
-    v.units = arr1.units
+    v = validate_numpy_wrapper_units(v, [arr1, arr2])
+    return v
+
+def uunion1d(arr1, arr2):
+    """Find the union of two arrays.
+
+    A wrapper around numpy.intersect1d that preserves units.  All input arrays
+    must have the same units.  See the documentation of numpy.intersect1d for
+    full details.
+    """
+    v = np.union1d(arr1, arr2)
+    v = validate_numpy_wrapper_units(v, [arr1, arr2])
     return v
 
 def array_like_field(data, x, field):


https://bitbucket.org/yt_analysis/yt/commits/87eea60155ae/
Changeset:   87eea60155ae
Branch:      yt
User:        ngoldbaum
Date:        2014-10-27 02:49:30+00:00
Summary:     Adding uunion1d to yt namespace.  Fixing indentation.
Affected #:  1 file

diff -r 8ebacd5b8f3dabf29b9d1b514e0d9c56b91fd7b8 -r 87eea60155ae563c5ef38a8f1b3a8f475bbd1cc7 yt/__init__.py
--- a/yt/__init__.py
+++ b/yt/__init__.py
@@ -99,10 +99,11 @@
 import yt.utilities.physical_constants as physical_constants
 import yt.units as units
 from yt.units.yt_array import \
-     YTArray, \
-     YTQuantity, \
-     uconcatenate, \
-     uintersect1d
+    YTArray, \
+    YTQuantity, \
+    uconcatenate, \
+    uintersect1d, \
+    uunion1d
 
 from yt.fields.api import \
     field_plugins, \


https://bitbucket.org/yt_analysis/yt/commits/f6192ab53626/
Changeset:   f6192ab53626
Branch:      yt
User:        ngoldbaum
Date:        2014-10-27 03:09:21+00:00
Summary:     Adding doctest examples from doug.
Affected #:  1 file

diff -r 87eea60155ae563c5ef38a8f1b3a8f475bbd1cc7 -r f6192ab53626483eb6fdeaf620d656df235cad8f yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -1120,6 +1120,14 @@
     This wrapper around numpy.concatenate preserves units. All input arrays must
     have the same units.  See the documentation of numpy.concatenate for full
     details.
+
+    Examples
+    --------
+    >>> A = yt.YTArray([1, 2, 3], 'cm')
+    >>> B = yt.YTArray([2, 3, 4], 'cm')
+    >>> uconcatenate(A, B)
+    YTArray([ 1., 2., 3., 2., 3., 4.]) cm
+
     """
     v = np.concatenate(arrs, *args, **kwargs)
     v = validate_numpy_wrapper_units(v, arrs)
@@ -1131,6 +1139,14 @@
     A wrapper around numpy.intersect1d that preserves units.  All input arrays
     must have the same units.  See the documentation of numpy.intersect1d for
     full details.
+
+    Examples
+    --------
+    >>> A = yt.YTArray([1, 2, 3], 'cm')
+    >>> B = yt.YTArray([2, 3, 4], 'cm')
+    >>> uintersect1d(A, B)
+    YTArray([ 2., 3.]) cm
+
     """
     v = np.intersect1d(arr1, arr2, assume_unique=assume_unique)
     v = validate_numpy_wrapper_units(v, [arr1, arr2])
@@ -1142,6 +1158,14 @@
     A wrapper around numpy.intersect1d that preserves units.  All input arrays
     must have the same units.  See the documentation of numpy.intersect1d for
     full details.
+
+    Examples
+    --------
+    >>> A = yt.YTArray([1, 2, 3], 'cm')
+    >>> B = yt.YTArray([2, 3, 4], 'cm')
+    >>> uunion1d(A, B)
+    YTArray([ 1., 2., 3., 4.]) cm
+
     """
     v = np.union1d(arr1, arr2)
     v = validate_numpy_wrapper_units(v, [arr1, arr2])


https://bitbucket.org/yt_analysis/yt/commits/320c9d829499/
Changeset:   320c9d829499
Branch:      yt
User:        ngoldbaum
Date:        2014-10-27 03:17:57+00:00
Summary:     Fixing a doc error.  Adjusting uconcatenate API to examctly match numpy.
Affected #:  1 file

diff -r f6192ab53626483eb6fdeaf620d656df235cad8f -r 320c9d8294991c2f88d8066d0b3ef348779969a5 yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -1114,7 +1114,7 @@
     v.units = a1.units
     return v
 
-def uconcatenate(arrs, *args, **kwargs):
+def uconcatenate(arrs, axis=0):
     """Concatenate a sequence of arrays.
 
     This wrapper around numpy.concatenate preserves units. All input arrays must
@@ -1125,11 +1125,11 @@
     --------
     >>> A = yt.YTArray([1, 2, 3], 'cm')
     >>> B = yt.YTArray([2, 3, 4], 'cm')
-    >>> uconcatenate(A, B)
+    >>> uconcatenate((A, B))
     YTArray([ 1., 2., 3., 2., 3., 4.]) cm
 
     """
-    v = np.concatenate(arrs, *args, **kwargs)
+    v = np.concatenate(arrs, axis=axis)
     v = validate_numpy_wrapper_units(v, arrs)
     return v

Repository URL: https://bitbucket.org/yt_analysis/yt/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the yt-svn mailing list