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

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Fri Nov 21 18:15:58 PST 2014


6 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/b1fb58bdaacf/
Changeset:   b1fb58bdaacf
Branch:      yt
User:        ngoldbaum
Date:        2014-11-10 06:43:10+00:00
Summary:     Don't yield functions that need keyword arguments in the tests for the unit object.
Affected #:  1 file

diff -r 9153a5a32dce19164cc66f8073a26d460aa74cbe -r b1fb58bdaacfa07dd57e62f61f623fbf257ded26 yt/units/tests/test_units.py
--- a/yt/units/tests/test_units.py
+++ b/yt/units/tests/test_units.py
@@ -204,14 +204,14 @@
     yield assert_true, u1.cgs_value == 42
     yield assert_true,  u1.dimensions == length**2*mass
 
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length**length}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length**(length*length)}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length-mass}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length+mass}
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length**length)
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length**(length*length))
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length-mass)
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length+mass)
 
 def test_create_fail_on_unknown_symbol():
     """


https://bitbucket.org/yt_analysis/yt/commits/5731da203ba4/
Changeset:   5731da203ba4
Branch:      yt
User:        ngoldbaum
Date:        2014-11-10 06:44:45+00:00
Summary:     Add a test to ensure no-op in-place conversions of dimensionless quantities is really a no-op.

This came up as a failure in the fields tests, so I've added a test to the unit module to aid future refactoring.
Affected #:  1 file

diff -r b1fb58bdaacfa07dd57e62f61f623fbf257ded26 -r 5731da203ba47a561e03c7af3ad18429dd14aa41 yt/units/tests/test_ytarray.py
--- a/yt/units/tests/test_ytarray.py
+++ b/yt/units/tests/test_ytarray.py
@@ -42,6 +42,8 @@
 from yt.funcs import fix_length
 from yt.units.unit_symbols import \
     cm, m, g
+from yt.utilities.physical_ratios import \
+    metallicity_sun
 
 def operate_and_compare(a, b, op, answer):
     # Test generator for YTArrays tests
@@ -985,3 +987,10 @@
 
     yield assert_array_equal, YTArray(union_answer, 'cm'), uunion1d(a1, a2)
     yield assert_array_equal, union_answer, np.union1d(a1, a2)
+
+def test_dimensionless_conversion():
+    a = YTQuantity(1, 'Zsun')
+    b = a.in_units('Zsun')
+    a.convert_to_units('Zsun')
+    yield assert_true, a.units.cgs_value == metallicity_sun
+    yield assert_true, b.units.cgs_value == metallicity_sun


https://bitbucket.org/yt_analysis/yt/commits/4b395f8c71e8/
Changeset:   4b395f8c71e8
Branch:      yt
User:        ngoldbaum
Date:        2014-11-10 06:57:35+00:00
Summary:     Ensure dimensionless results of multiplication or division are dimensionless. Closes #933

This prevents inconsistencies when comparing quantities created by two different
cosmological datasets.  In this case, comoving units like 'cmcm' will have
identical unit expressions, but different cgs_values.

Previously, we would create a dimensionless unit symbol with a non-unit cgs_value.
This led to confusing results (see Issue #933).

As a side benefit, this makes it so dimensionless results are always simplified:

In [1]: from yt import YTQuantity as q

In [2]: q(3, 'm')/q(3, 'cm')
Out[2]: 100.0 dimensionless

Before, this would return "1 m/cm".
Affected #:  3 files

diff -r 5731da203ba47a561e03c7af3ad18429dd14aa41 -r 4b395f8c71e86638d4bc001647e4055fe24612ba yt/units/tests/test_ytarray.py
--- a/yt/units/tests/test_ytarray.py
+++ b/yt/units/tests/test_ytarray.py
@@ -697,7 +697,12 @@
         assert_true(not isinstance(ret, YTArray) and
                     isinstance(ret, np.ndarray))
     assert_array_equal(ret, out)
-    assert_array_equal(ret, ufunc(np.array(a), np.array(b)))
+    if (ufunc in (np.divide, np.true_divide, np.arctan2) and
+        (a.units.dimensions == b.units.dimensions)):
+        assert_array_almost_equal(
+            np.array(ret), ufunc(np.array(a.in_cgs()), np.array(b.in_cgs())))
+    else:
+        assert_array_almost_equal(np.array(ret), ufunc(np.array(a), np.array(b)))
 
 
 def test_ufuncs():
@@ -994,3 +999,19 @@
     a.convert_to_units('Zsun')
     yield assert_true, a.units.cgs_value == metallicity_sun
     yield assert_true, b.units.cgs_value == metallicity_sun
+
+def test_modified_unit_division():
+    ds1 = fake_random_ds(64)
+    ds2 = fake_random_ds(64)
+
+    # this mocks comoving coordinates without going through the trouble
+    # of setting up a fake cosmological dataset
+    ds1.unit_registry.modify('m', 50)
+
+    a = ds1.quan(3, 'm')
+    b = ds2.quan(3, 'm')
+
+    ret = a/b
+    yield assert_true, ret == 0.5
+    yield assert_true, ret.units.is_dimensionless
+    yield assert_true, ret.units.cgs_value == 1.0

diff -r 5731da203ba47a561e03c7af3ad18429dd14aa41 -r 4b395f8c71e86638d4bc001647e4055fe24612ba yt/units/unit_object.py
--- a/yt/units/unit_object.py
+++ b/yt/units/unit_object.py
@@ -22,7 +22,8 @@
     parse_expr, auto_number, rationalize
 from keyword import iskeyword
 from yt.units.dimensions import \
-    base_dimensions, temperature
+    base_dimensions, temperature, \
+    dimensionless
 from yt.units.unit_lookup_table import \
     latex_symbol_lut, unit_prefixes, \
     prefixable_units, cgs_base_units, \
@@ -164,6 +165,9 @@
                                  "sympy Expr. %s has type %s." \
                                  % (unit_expr, type(unit_expr)))
 
+        if unit_expr == sympy_one and dimensions is None:
+            dimensions = dimensionless
+
         if registry is None:
             # Caller did not set the registry, so use the default.
             registry = default_unit_registry
@@ -179,7 +183,7 @@
         # check cgs_value and dimensions
         #
 
-        if cgs_value is not None and dimensions is not None:
+        if cgs_value is not None:
             # check that cgs_value is a float or can be converted to one
             try:
                 cgs_value = float(cgs_value)
@@ -189,7 +193,8 @@
                                      % (cgs_value, type(cgs_value)) )
 
             # check that dimensions is valid
-            validate_dimensions(dimensions)
+            if dimensions is not None:
+                validate_dimensions(dimensions)
         else:
             # lookup the unit symbols
             unit_data = _get_unit_data_from_expr(unit_expr, registry.lut)
@@ -215,9 +220,7 @@
             conversions = []
             for atom in check_atoms:
                 conversions.append((atom,symbols(cgs_conversions[str(atom)])))
-            conversion = unit_expr.subs(conversions)
-            conversion = Unit(unit_expr=conversion, cgs_value=1.0,
-                               dimensions=None, registry=registry)
+            conversion = Unit(unit_expr=unit_expr.subs(conversions))
             is_mks = True
         else:
             conversion = None

diff -r 5731da203ba47a561e03c7af3ad18429dd14aa41 -r 4b395f8c71e86638d4bc001647e4055fe24612ba yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -368,7 +368,7 @@
         """
         # let Unit() handle units arg if it's not already a Unit obj.
         if not isinstance(units, Unit):
-            units = Unit(units, registry = self.units.registry)
+            units = Unit(units, registry=self.units.registry)
 
         if not self.units.same_dimensions_as(units):
             raise YTUnitConversionError(
@@ -1022,14 +1022,21 @@
                         else:
                             raise YTUnitOperationError(context[0], unit1, unit2)
                     unit2 = 1.0
-            if self._ufunc_registry[context[0]] in \
-               (preserve_units, comparison_unit, arctan2_unit):
+            unit_operator = self._ufunc_registry[context[0]]
+            if unit_operator in (preserve_units, comparison_unit, arctan2_unit):
                 if unit1 != unit2:
                     if not unit1.same_dimensions_as(unit2):
                         raise YTUnitOperationError(context[0], unit1, unit2)
                     else:
                         raise YTUfuncUnitError(context[0], unit1, unit2)
             unit = self._ufunc_registry[context[0]](unit1, unit2)
+            if unit_operator in (multiply_units, divide_units):
+                if unit.is_dimensionless and unit.cgs_value != 1.0:
+                    if not unit1.is_dimensionless:
+                        if unit1.dimensions == unit2.dimensions:
+                            np.multiply(out_arr.view(np.ndarray),
+                                        unit.cgs_value, out=out_arr)
+                            unit = Unit(registry=unit.registry)
         else:
             raise RuntimeError("Operation is not defined.")
         if unit is None:


https://bitbucket.org/yt_analysis/yt/commits/6b075ca6ca3b/
Changeset:   6b075ca6ca3b
Branch:      yt
User:        ngoldbaum
Date:        2014-11-12 23:17:38+00:00
Summary:     Ensure unit objects used for MKS/CGS conversions have a proper unit registry.
Affected #:  1 file

diff -r 4b395f8c71e86638d4bc001647e4055fe24612ba -r 6b075ca6ca3bd8de661eb92ffe44dd3c3eb291b4 yt/units/unit_object.py
--- a/yt/units/unit_object.py
+++ b/yt/units/unit_object.py
@@ -220,7 +220,8 @@
             conversions = []
             for atom in check_atoms:
                 conversions.append((atom,symbols(cgs_conversions[str(atom)])))
-            conversion = Unit(unit_expr=unit_expr.subs(conversions))
+            conversion = Unit(unit_expr=unit_expr.subs(conversions),
+                              registry=registry)
             is_mks = True
         else:
             conversion = None


https://bitbucket.org/yt_analysis/yt/commits/d131c8977529/
Changeset:   d131c8977529
Branch:      yt
User:        ngoldbaum
Date:        2014-11-12 23:18:15+00:00
Summary:     Merging with mainline tip.
Affected #:  4 files

diff -r 6b075ca6ca3bd8de661eb92ffe44dd3c3eb291b4 -r d131c89775292b49c29fef623d17a95f0777cfbf yt/frontends/chombo/data_structures.py
--- a/yt/frontends/chombo/data_structures.py
+++ b/yt/frontends/chombo/data_structures.py
@@ -630,12 +630,30 @@
         # read the file line by line, storing important parameters
         for lineI, line in enumerate(lines):
             try:
-                param, sep, vals = [v.rstrip() for v in line.partition(' ')]
-                #param, sep, vals = map(rstrip,line.partition(' '))
+                param, sep, vals = line.partition('=')
+                if not sep:
+                    # No = sign present, so split by space instead
+                    param, sep, vals = line.partition(' ')
+                param = param.strip()
+                vals = vals.strip()
+                if not param:  # skip blank lines
+                    continue
+                if param[0] == '#':  # skip comment lines
+                    continue
+                if param[0] == '[':  # skip stanza headers
+                    continue
+                vals = vals.partition("#")[0] # strip trailing comments
+                try:
+                    self.parameters[param] = np.int64(vals)
+                except ValueError:
+                    try:
+                        self.parameters[param] = np.float64(vals)
+                    except ValueError:
+                        self.parameters[param] = vals
             except ValueError:
                 mylog.error("ValueError: '%s'", line)
             if param == "GAMMA":
-                self.gamma = vals
+                self.gamma = np.float64(vals)
 
     @classmethod
     def _is_valid(self, *args, **kwargs):

diff -r 6b075ca6ca3bd8de661eb92ffe44dd3c3eb291b4 -r d131c89775292b49c29fef623d17a95f0777cfbf yt/frontends/chombo/fields.py
--- a/yt/frontends/chombo/fields.py
+++ b/yt/frontends/chombo/fields.py
@@ -24,10 +24,9 @@
 from yt.frontends.boxlib.fields import \
     rho_units, \
     mom_units, \
-    eden_units, \
-    _thermal_energy_density, \
-    _thermal_energy, \
-    _temperature
+    eden_units
+
+from yt.utilities.exceptions import YTFieldNotFound
 
 rho_units = "code_mass / code_length**3"
 mom_units = "code_mass / (code_time * code_length**2)"
@@ -82,20 +81,70 @@
     )
 
     def setup_fluid_fields(self):
+        def _thermal_energy_density(field, data):
+            try:
+                return data['energy-density'] - data['kinetic_energy_density'] - \
+                    data["magnetic_energy_density"]
+            except YTFieldNotFound:
+                return data['energy-density'] - data['kinetic_energy_density']
+
+        def _thermal_energy(field, data):
+            return data['thermal_energy_density']/data['density']
+
+        def _magnetic_energy_density(field, data):
+            ret = data["X-magnfield"]**2
+            if data.ds.dimensionality > 1:
+                ret = ret + data["Y-magnfield"]**2
+            if data.ds.dimensionality > 2:
+                ret = ret + data["Z-magnfield"]**2
+            return ret/2.0
+
+        def _magnetic_energy(field, data):
+            return data['magnetic_energy_density']/data['density']
+
+        def _kinetic_energy_density(field, data):
+            p2 = data['X-momentum']**2
+            if data.ds.dimensionality > 1:
+                p2 = p2 + data["Y-momentum"]**2
+            if data.ds.dimensionality > 2:
+                p2 = p2 + data["Z-momentum"]**2
+            return 0.5 * p2/data['density']
+
+        def _kinetic_energy(field, data):
+            return data['kinetic_energy_density']/data['density']
+
+        def _temperature(field, data):
+            c_v = data.ds.quan(data.ds.parameters['radiation.const_cv'], 
+                               'erg/g/K')
+            return (data["thermal_energy"]/c_v)
+
         def _get_vel(axis):
             def velocity(field, data):
                 return data["momentum_%s" % ax]/data["density"]
             return velocity
+
         for ax in 'xyz':
-            self.add_field("velocity_%s" % ax, function = _get_vel(ax),
+            self.add_field(("gas", "velocity_%s" % ax), function = _get_vel(ax),
                            units = "cm/s")
-        self.add_field("thermal_energy",
+        self.add_field(("gas", "thermal_energy"),
                        function = _thermal_energy,
                        units = "erg/g")
-        self.add_field("thermal_energy_density",
+        self.add_field(("gas", "thermal_energy_density"),
                        function = _thermal_energy_density,
                        units = "erg/cm**3")
-        self.add_field("temperature", function=_temperature,
+        self.add_field(("gas", "kinetic_energy"),
+                       function = _kinetic_energy,
+                       units = "erg/g")
+        self.add_field(("gas", "kinetic_energy_density"),
+                       function = _kinetic_energy_density,
+                       units = "erg/cm**3")
+        self.add_field(("gas", "magnetic_energy"),
+                       function = _magnetic_energy,
+                       units = "erg/g")
+        self.add_field(("gas", "magnetic_energy_density"),
+                       function = _magnetic_energy_density,
+                       units = "erg/cm**3")
+        self.add_field(("gas", "temperature"), function=_temperature,
                        units="K")
 
 

diff -r 6b075ca6ca3bd8de661eb92ffe44dd3c3eb291b4 -r d131c89775292b49c29fef623d17a95f0777cfbf yt/frontends/enzo/io.py
--- a/yt/frontends/enzo/io.py
+++ b/yt/frontends/enzo/io.py
@@ -83,6 +83,9 @@
                             r"particle_position_%s")
                     x, y, z = (np.asarray(pds.get(pn % ax).value, dtype="=f8")
                                for ax in 'xyz')
+                    for field in field_list:
+                        if np.asarray(pds[field]).ndim > 1:
+                            self._array_fields[field] = pds[field].shape
                     yield ptype, (x, y, z)
             if f: f.close()
 

diff -r 6b075ca6ca3bd8de661eb92ffe44dd3c3eb291b4 -r d131c89775292b49c29fef623d17a95f0777cfbf yt/utilities/io_handler.py
--- a/yt/utilities/io_handler.py
+++ b/yt/utilities/io_handler.py
@@ -43,6 +43,7 @@
         self.ds = ds
         self._last_selector_id = None
         self._last_selector_counts = None
+        self._array_fields = {}
 
     # We need a function for reading a list of sets
     # and a function for *popping* from a queue all the appropriate sets
@@ -160,6 +161,8 @@
         for field in fields:
             if field[1] in self._vector_fields:
                 shape = (fsize[field], 3)
+            elif field[1] in self._array_fields:
+                shape = (fsize[field],)+self._array_fields[field[1]]
             else:
                 shape = (fsize[field], )
             rv[field] = np.empty(shape, dtype="float64")


https://bitbucket.org/yt_analysis/yt/commits/b07a33287102/
Changeset:   b07a33287102
Branch:      yt
User:        MatthewTurk
Date:        2014-11-22 02:15:51+00:00
Summary:     Merged in ngoldbaum/yt (pull request #1300)

Fix issues with dimensionless results of multiplication or division. Closes #933
Affected #:  4 files

diff -r 5bd8229b55cfe72386fdfd1eb8e00c80f9e6f3b3 -r b07a3328710256a1d765284337b45d710a8ca715 yt/units/tests/test_units.py
--- a/yt/units/tests/test_units.py
+++ b/yt/units/tests/test_units.py
@@ -204,14 +204,14 @@
     yield assert_true, u1.cgs_value == 42
     yield assert_true,  u1.dimensions == length**2*mass
 
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length**length}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length**(length*length)}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length-mass}
-    yield assert_raises, UnitParseError, Unit, 'abc', \
-        {'cgs_value':42, 'dimensions':length+mass}
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length**length)
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length**(length*length))
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length-mass)
+    assert_raises(UnitParseError, Unit, 'abc', cgs_value=42,
+                  dimensions=length+mass)
 
 def test_create_fail_on_unknown_symbol():
     """

diff -r 5bd8229b55cfe72386fdfd1eb8e00c80f9e6f3b3 -r b07a3328710256a1d765284337b45d710a8ca715 yt/units/tests/test_ytarray.py
--- a/yt/units/tests/test_ytarray.py
+++ b/yt/units/tests/test_ytarray.py
@@ -42,6 +42,8 @@
 from yt.funcs import fix_length
 from yt.units.unit_symbols import \
     cm, m, g
+from yt.utilities.physical_ratios import \
+    metallicity_sun
 
 def operate_and_compare(a, b, op, answer):
     # Test generator for YTArrays tests
@@ -695,7 +697,12 @@
         assert_true(not isinstance(ret, YTArray) and
                     isinstance(ret, np.ndarray))
     assert_array_equal(ret, out)
-    assert_array_equal(ret, ufunc(np.array(a), np.array(b)))
+    if (ufunc in (np.divide, np.true_divide, np.arctan2) and
+        (a.units.dimensions == b.units.dimensions)):
+        assert_array_almost_equal(
+            np.array(ret), ufunc(np.array(a.in_cgs()), np.array(b.in_cgs())))
+    else:
+        assert_array_almost_equal(np.array(ret), ufunc(np.array(a), np.array(b)))
 
 
 def test_ufuncs():
@@ -985,3 +992,26 @@
 
     yield assert_array_equal, YTArray(union_answer, 'cm'), uunion1d(a1, a2)
     yield assert_array_equal, union_answer, np.union1d(a1, a2)
+
+def test_dimensionless_conversion():
+    a = YTQuantity(1, 'Zsun')
+    b = a.in_units('Zsun')
+    a.convert_to_units('Zsun')
+    yield assert_true, a.units.cgs_value == metallicity_sun
+    yield assert_true, b.units.cgs_value == metallicity_sun
+
+def test_modified_unit_division():
+    ds1 = fake_random_ds(64)
+    ds2 = fake_random_ds(64)
+
+    # this mocks comoving coordinates without going through the trouble
+    # of setting up a fake cosmological dataset
+    ds1.unit_registry.modify('m', 50)
+
+    a = ds1.quan(3, 'm')
+    b = ds2.quan(3, 'm')
+
+    ret = a/b
+    yield assert_true, ret == 0.5
+    yield assert_true, ret.units.is_dimensionless
+    yield assert_true, ret.units.cgs_value == 1.0

diff -r 5bd8229b55cfe72386fdfd1eb8e00c80f9e6f3b3 -r b07a3328710256a1d765284337b45d710a8ca715 yt/units/unit_object.py
--- a/yt/units/unit_object.py
+++ b/yt/units/unit_object.py
@@ -22,7 +22,8 @@
     parse_expr, auto_number, rationalize
 from keyword import iskeyword
 from yt.units.dimensions import \
-    base_dimensions, temperature
+    base_dimensions, temperature, \
+    dimensionless
 from yt.units.unit_lookup_table import \
     latex_symbol_lut, unit_prefixes, \
     prefixable_units, cgs_base_units, \
@@ -164,6 +165,9 @@
                                  "sympy Expr. %s has type %s." \
                                  % (unit_expr, type(unit_expr)))
 
+        if unit_expr == sympy_one and dimensions is None:
+            dimensions = dimensionless
+
         if registry is None:
             # Caller did not set the registry, so use the default.
             registry = default_unit_registry
@@ -179,7 +183,7 @@
         # check cgs_value and dimensions
         #
 
-        if cgs_value is not None and dimensions is not None:
+        if cgs_value is not None:
             # check that cgs_value is a float or can be converted to one
             try:
                 cgs_value = float(cgs_value)
@@ -189,7 +193,8 @@
                                      % (cgs_value, type(cgs_value)) )
 
             # check that dimensions is valid
-            validate_dimensions(dimensions)
+            if dimensions is not None:
+                validate_dimensions(dimensions)
         else:
             # lookup the unit symbols
             unit_data = _get_unit_data_from_expr(unit_expr, registry.lut)
@@ -215,9 +220,8 @@
             conversions = []
             for atom in check_atoms:
                 conversions.append((atom,symbols(cgs_conversions[str(atom)])))
-            conversion = unit_expr.subs(conversions)
-            conversion = Unit(unit_expr=conversion, cgs_value=1.0,
-                               dimensions=None, registry=registry)
+            conversion = Unit(unit_expr=unit_expr.subs(conversions),
+                              registry=registry)
             is_mks = True
         else:
             conversion = None

diff -r 5bd8229b55cfe72386fdfd1eb8e00c80f9e6f3b3 -r b07a3328710256a1d765284337b45d710a8ca715 yt/units/yt_array.py
--- a/yt/units/yt_array.py
+++ b/yt/units/yt_array.py
@@ -368,7 +368,7 @@
         """
         # let Unit() handle units arg if it's not already a Unit obj.
         if not isinstance(units, Unit):
-            units = Unit(units, registry = self.units.registry)
+            units = Unit(units, registry=self.units.registry)
 
         if not self.units.same_dimensions_as(units):
             raise YTUnitConversionError(
@@ -1022,14 +1022,21 @@
                         else:
                             raise YTUnitOperationError(context[0], unit1, unit2)
                     unit2 = 1.0
-            if self._ufunc_registry[context[0]] in \
-               (preserve_units, comparison_unit, arctan2_unit):
+            unit_operator = self._ufunc_registry[context[0]]
+            if unit_operator in (preserve_units, comparison_unit, arctan2_unit):
                 if unit1 != unit2:
                     if not unit1.same_dimensions_as(unit2):
                         raise YTUnitOperationError(context[0], unit1, unit2)
                     else:
                         raise YTUfuncUnitError(context[0], unit1, unit2)
             unit = self._ufunc_registry[context[0]](unit1, unit2)
+            if unit_operator in (multiply_units, divide_units):
+                if unit.is_dimensionless and unit.cgs_value != 1.0:
+                    if not unit1.is_dimensionless:
+                        if unit1.dimensions == unit2.dimensions:
+                            np.multiply(out_arr.view(np.ndarray),
+                                        unit.cgs_value, out=out_arr)
+                            unit = Unit(registry=unit.registry)
         else:
             raise RuntimeError("Operation is not defined.")
         if unit is None:

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