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

Bitbucket commits-noreply at bitbucket.org
Fri Jan 4 08:16:09 PST 2013


4 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/5b3692d12668/
changeset:   5b3692d12668
branch:      yt
user:        brittonsmith
date:        2013-01-04 00:01:56
summary:     Adding weighted variance derived quantity.
affected #:  1 file

diff -r bfb9dd705e5439e2944b4c5ae95080e5e577f1af -r 5b3692d126688cec375d99e1554111dad231eeb6 yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -204,6 +204,27 @@
 add_quantity("WeightedAverageQuantity", function=_WeightedAverageQuantity,
              combine_function=_combWeightedAverageQuantity, n_ret = 2)
 
+def _WeightedVariance(data, field, weight):
+    """
+    This function returns the variance of a field.
+
+    :param field: The target field
+    :param weight: The field to weight by
+
+    Returns the weighted variance and the weighted mean.
+    """
+    my_weight = data[weight].sum()
+    my_mean = (data[field] * data[weight]).sum() / my_weight
+    my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
+    return my_weight, my_mean, my_var2
+def _combWeightedVariance(data, my_weight, my_mean, my_var2):
+    all_weight = my_weight.sum()
+    all_mean = (my_weight * my_mean).sum() / all_weight
+    return [np.sqrt((my_weight * (my_var2 + (my_mean - all_mean)**2)).sum() / 
+                    all_weight), all_mean]
+add_quantity("WeightedVariance", function=_WeightedVariance,
+             combine_function=_combWeightedVariance, n_ret=3)
+
 def _BulkVelocity(data):
     """
     This function returns the mass-weighted average velocity in the object.


https://bitbucket.org/yt_analysis/yt/commits/bf3bf0f854fd/
changeset:   bf3bf0f854fd
branch:      yt
user:        brittonsmith
date:        2013-01-04 00:02:20
summary:     Adding tests for weighted average and variance derived quantities.
affected #:  1 file

diff -r 5b3692d126688cec375d99e1554111dad231eeb6 -r bf3bf0f854fdb66e52107dc3de68d070581205c6 yt/data_objects/tests/test_derived_quantities.py
--- a/yt/data_objects/tests/test_derived_quantities.py
+++ b/yt/data_objects/tests/test_derived_quantities.py
@@ -22,3 +22,31 @@
         (mi, ma), = dd.quantities["Extrema"]("RadialVelocity")
         yield assert_equal, mi, np.nanmin(dd["RadialVelocity"])
         yield assert_equal, ma, np.nanmax(dd["RadialVelocity"])
+
+def test_average():
+    for nprocs in [1, 2, 4, 8]:
+        pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density",))
+        ad = pf.h.all_data()
+        
+        my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "Ones")
+        yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+
+        my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "CellMass")
+        a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+        yield assert_rel_equal, my_mean, a_mean, 14
+
+def test_variance():
+    for nprocs in [1, 2, 4, 8]:
+        pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density", ))
+        ad = pf.h.all_data()
+        
+        my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "Ones")
+        yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+        yield assert_rel_equal, my_std, ad["Density"].std(), 13
+
+        my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "CellMass")        
+        a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+        yield assert_rel_equal, my_mean, a_mean, 13
+        a_std = np.sqrt((ad["CellMass"] * (ad["Density"] - a_mean)**2).sum() / 
+                        ad["CellMass"].sum())
+        yield assert_rel_equal, my_std, a_std, 13


https://bitbucket.org/yt_analysis/yt/commits/ed8eaf338837/
changeset:   ed8eaf338837
branch:      yt
user:        brittonsmith
date:        2013-01-04 17:07:36
summary:     Empty data objects were causing nans in the weighted variance.
affected #:  1 file

diff -r bf3bf0f854fdb66e52107dc3de68d070581205c6 -r ed8eaf338837f19aac78c86f64ce07e646b23c2a yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -214,6 +214,8 @@
     Returns the weighted variance and the weighted mean.
     """
     my_weight = data[weight].sum()
+    if my_weight == 0:
+        return 0.0, 0.0, 0.0
     my_mean = (data[field] * data[weight]).sum() / my_weight
     my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
     return my_weight, my_mean, my_var2


https://bitbucket.org/yt_analysis/yt/commits/108341fe239f/
changeset:   108341fe239f
branch:      yt
user:        MatthewTurk
date:        2013-01-04 17:16:03
summary:     Merged in brittonsmith/yt (pull request #389: Added weighted variance derived quantity and tests for average and variance.)
affected #:  2 files

diff -r 2385290163db579ebf4baa721c7c3e4f07c2b052 -r 108341fe239ff34e362134463f703763f4319315 yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -204,6 +204,29 @@
 add_quantity("WeightedAverageQuantity", function=_WeightedAverageQuantity,
              combine_function=_combWeightedAverageQuantity, n_ret = 2)
 
+def _WeightedVariance(data, field, weight):
+    """
+    This function returns the variance of a field.
+
+    :param field: The target field
+    :param weight: The field to weight by
+
+    Returns the weighted variance and the weighted mean.
+    """
+    my_weight = data[weight].sum()
+    if my_weight == 0:
+        return 0.0, 0.0, 0.0
+    my_mean = (data[field] * data[weight]).sum() / my_weight
+    my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
+    return my_weight, my_mean, my_var2
+def _combWeightedVariance(data, my_weight, my_mean, my_var2):
+    all_weight = my_weight.sum()
+    all_mean = (my_weight * my_mean).sum() / all_weight
+    return [np.sqrt((my_weight * (my_var2 + (my_mean - all_mean)**2)).sum() / 
+                    all_weight), all_mean]
+add_quantity("WeightedVariance", function=_WeightedVariance,
+             combine_function=_combWeightedVariance, n_ret=3)
+
 def _BulkVelocity(data):
     """
     This function returns the mass-weighted average velocity in the object.

diff -r 2385290163db579ebf4baa721c7c3e4f07c2b052 -r 108341fe239ff34e362134463f703763f4319315 yt/data_objects/tests/test_derived_quantities.py
--- a/yt/data_objects/tests/test_derived_quantities.py
+++ b/yt/data_objects/tests/test_derived_quantities.py
@@ -22,3 +22,31 @@
         (mi, ma), = dd.quantities["Extrema"]("RadialVelocity")
         yield assert_equal, mi, np.nanmin(dd["RadialVelocity"])
         yield assert_equal, ma, np.nanmax(dd["RadialVelocity"])
+
+def test_average():
+    for nprocs in [1, 2, 4, 8]:
+        pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density",))
+        ad = pf.h.all_data()
+        
+        my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "Ones")
+        yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+
+        my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "CellMass")
+        a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+        yield assert_rel_equal, my_mean, a_mean, 14
+
+def test_variance():
+    for nprocs in [1, 2, 4, 8]:
+        pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density", ))
+        ad = pf.h.all_data()
+        
+        my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "Ones")
+        yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+        yield assert_rel_equal, my_std, ad["Density"].std(), 13
+
+        my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "CellMass")        
+        a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+        yield assert_rel_equal, my_mean, a_mean, 13
+        a_std = np.sqrt((ad["CellMass"] * (ad["Density"] - a_mean)**2).sum() / 
+                        ad["CellMass"].sum())
+        yield assert_rel_equal, my_std, a_std, 13

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