[yt-svn] commit/yt: xarthisius: Merged in brittonsmith/yt (pull request #1253)

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Fri Nov 7 12:37:13 PST 2014


1 new commit in yt:

https://bitbucket.org/yt_analysis/yt/commits/9153a5a32dce/
Changeset:   9153a5a32dce
Branch:      yt
User:        xarthisius
Date:        2014-11-07 20:37:03+00:00
Summary:     Merged in brittonsmith/yt (pull request #1253)

Adding answer tests for halo finders.
Affected #:  14 files

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe doc/source/cookbook/halo_profiler.py
--- a/doc/source/cookbook/halo_profiler.py
+++ b/doc/source/cookbook/halo_profiler.py
@@ -32,7 +32,7 @@
 field_params = dict(virial_radius=('quantity', 'radius_200'))
 hc.add_callback('sphere', radius_field='radius_200', factor=5,
                 field_parameters=field_params)
-hc.add_callback('profile', ['virial_radius'], 
+hc.add_callback('profile', ['virial_radius_fraction'], 
                 [('gas', 'temperature')],
                 storage='virial_profiles',
                 weight_field='cell_mass',

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_analysis/api.py
--- a/yt/analysis_modules/halo_analysis/api.py
+++ b/yt/analysis_modules/halo_analysis/api.py
@@ -28,5 +28,3 @@
      
 from .halo_quantities import \
      add_quantity
-
-from . import fields

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_analysis/fields.py
--- a/yt/analysis_modules/halo_analysis/fields.py
+++ /dev/null
@@ -1,41 +0,0 @@
-"""
-Cosmology related fields.
-
-
-
-
-"""
-
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014, yt Development Team.
-#
-# Distributed under the terms of the Modified BSD License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#-----------------------------------------------------------------------------
-
-from yt.fields.field_plugin_registry import \
-    register_field_plugin
-
- at register_field_plugin
-def setup_halo_analysis_fields(registry, ftype = "gas", slice_info = None):
-    # slice_info would be the left, the right, and the factor.
-    # For example, with the old Enzo-ZEUS fields, this would be:
-    # slice(None, -2, None)
-    # slice(1, -1, None)
-    # 1.0
-    # Otherwise, we default to a centered difference.
-    if slice_info is None:
-        sl_left = slice(None, -2, None)
-        sl_right = slice(2, None, None)
-        div_fac = 2.0
-    else:
-        sl_left, sl_right, div_fac = slice_info
-
-    def _virial_radius(field, data):
-        virial_radius = data.get_field_parameter("virial_radius")
-        return data["radius"] / virial_radius
-
-    registry.add_field(("index", "virial_radius"),
-                       function=_virial_radius,
-                       units="")

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_analysis/tests/run_halo_finder.py
--- /dev/null
+++ b/yt/analysis_modules/halo_analysis/tests/run_halo_finder.py
@@ -0,0 +1,32 @@
+from mpi4py import MPI
+import os
+import sys
+import yt
+from yt.analysis_modules.halo_analysis.api import \
+    HaloCatalog
+from yt.data_objects.particle_filters import \
+    particle_filter
+yt.enable_parallelism()
+
+method = sys.argv[1]
+comm = MPI.Comm.Get_parent()
+
+methods = {"fof": {}, "hop": {},
+           "rockstar": {"num_readers":1,
+                        "num_writers":1,
+                        "particle_type":"dark_matter"}}
+
+ at particle_filter("dark_matter", requires=["creation_time"])
+def _dm_filter(pfilter, data):
+    return data["creation_time"] <= 0.0
+
+ds = yt.load("Enzo_64/DD0043/data0043")
+ds.add_particle_filter("dark_matter")
+
+output_dir = os.path.join(os.path.dirname(__file__),
+                          "halo_catalogs", method)
+hc = HaloCatalog(data_ds=ds, output_dir=output_dir,
+                 finder_method=method, finder_kwargs=methods[method])
+hc.create()
+
+comm.Disconnect()

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_analysis/tests/test_halo_finders.py
--- /dev/null
+++ b/yt/analysis_modules/halo_analysis/tests/test_halo_finders.py
@@ -0,0 +1,36 @@
+import os
+import sys
+
+from yt.analysis_modules.halo_analysis.api import \
+    HaloCatalog
+from yt.convenience import load
+from yt.testing import *
+from yt.utilities.answer_testing.framework import \
+    FieldValuesTest, \
+    requires_ds
+
+_fields = (("halos", "particle_position_x"),
+           ("halos", "particle_position_y"),
+           ("halos", "particle_position_z"),
+           ("halos", "particle_mass"))
+
+methods = {"fof": 2, "hop": 2, "rockstar": 3}
+
+e64 = "Enzo_64/DD0043/data0043"
+ at requires_ds(e64, big_data=True)
+def test_halo_finders():
+    from mpi4py import MPI
+    filename = os.path.join(os.path.dirname(__file__),
+                            "run_halo_finder.py")
+    for method in methods:
+        comm = MPI.COMM_SELF.Spawn(sys.executable,
+                                   args=[filename, method],
+                                   maxprocs=methods[method])
+        comm.Disconnect()
+
+    fn = os.path.join(os.path.dirname(__file__),
+                      "halo_catalogs", method,
+                      "%s.0.h5" % method)
+    ds = load(fn)
+    for field in _fields:
+        yield FieldValuesTest(ds, field, particle_type=True)

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_finding/tests/run_rockstar.py
--- /dev/null
+++ b/yt/analysis_modules/halo_finding/tests/run_rockstar.py
@@ -0,0 +1,26 @@
+from mpi4py import MPI
+import yt
+from yt.analysis_modules.halo_finding.rockstar.api import \
+    RockstarHaloFinder
+from yt.data_objects.particle_filters import \
+    particle_filter
+yt.enable_parallelism()
+
+comm = MPI.Comm.Get_parent()
+
+ at particle_filter("dark_matter", requires=["creation_time"])
+def _dm_filter(pfilter, data):
+    return data["creation_time"] <= 0.0
+
+def setup_ds(ds):
+    ds.add_particle_filter("dark_matter")
+
+es = yt.simulation("Enzo_64/64.param", "Enzo")
+es.get_time_series(setup_function=setup_ds,
+                   redshifts=[1., 0.])
+
+rh = RockstarHaloFinder(es, num_readers=1, num_writers=1,
+                        particle_type="dark_matter")
+rh.run()
+
+comm.Disconnect()

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/analysis_modules/halo_finding/tests/test_rockstar.py
--- /dev/null
+++ b/yt/analysis_modules/halo_finding/tests/test_rockstar.py
@@ -0,0 +1,32 @@
+import os
+import sys
+
+from yt.convenience import load
+from yt.testing import *
+from yt.utilities.answer_testing.framework import \
+    FieldValuesTest, \
+    requires_sim
+
+_fields = (("halos", "particle_position_x"),
+           ("halos", "particle_position_y"),
+           ("halos", "particle_position_z"),
+           ("halos", "particle_mass"))
+
+ at requires_sim("Enzo_64/64.param", "Enzo", big_data=True)
+def test_rockstar():
+    from mpi4py import MPI
+    filename = os.path.join(os.path.dirname(__file__),
+                            "run_rockstar.py")
+    comm = MPI.COMM_SELF.Spawn(sys.executable,
+                               args=[filename],
+                               maxprocs=3)
+    comm.Disconnect()
+
+    h1 = "rockstar_halos/halos_0.0.bin"
+    d1 = load(h1)
+    for field in _fields:
+        yield FieldValuesTest(d1, field, particle_type=True)
+    h2 = "rockstar_halos/halos_1.0.bin"
+    d2 = load(h2)
+    for field in _fields:
+        yield FieldValuesTest(d2, field, particle_type=True)

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/fields/cosmology_fields.py
--- a/yt/fields/cosmology_fields.py
+++ b/yt/fields/cosmology_fields.py
@@ -106,6 +106,16 @@
     registry.add_field((ftype, "matter_overdensity"),
                        function=_matter_overdensity,
                        units="")
+
+    # r / r_vir
+    def _virial_radius_fraction(field, data):
+        virial_radius = data.get_field_parameter("virial_radius")
+        return data["radius"] / virial_radius
+
+    registry.add_field(("index", "virial_radius_fraction"),
+                       function=_virial_radius_fraction,
+                       validators=[ValidateParameter("virial_radius")],
+                       units="")
     
     # Weak lensing convergence.
     # Eqn 4 of Metzler, White, & Loken (2001, ApJ, 547, 560).

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/fields/tests/test_fields.py
--- a/yt/fields/tests/test_fields.py
+++ b/yt/fields/tests/test_fields.py
@@ -6,7 +6,8 @@
     mpc_conversion, sec_conversion
 from yt.frontends.stream.fields import \
     StreamFieldInfo
-from yt.units.yt_array import YTArray
+from yt.units.yt_array import \
+     YTArray, YTQuantity
 
 def setup():
     global base_ds
@@ -42,6 +43,7 @@
         omega_baryon = 0.04,
         observer_redshift = 0.0,
         source_redshift = 3.0,
+        virial_radius = YTQuantity(1.0, "cm"),
     )
 
 _base_fields = (("gas", "density"),

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/frontends/owls_subfind/tests/test_outputs.py
--- a/yt/frontends/owls_subfind/tests/test_outputs.py
+++ b/yt/frontends/owls_subfind/tests/test_outputs.py
@@ -28,7 +28,7 @@
     ds = data_dir_load(g8)
     yield assert_equal, str(ds), "group_008.0.hdf5"
     for field in _fields:
-        yield FieldValuesTest(g8, field)
+        yield FieldValuesTest(g8, field, particle_type=True)
 
 # a dataset with empty files
 g3 = "owls_fof_halos/groups_003/group_003.0.hdf5"
@@ -37,4 +37,4 @@
     ds = data_dir_load(g3)
     yield assert_equal, str(ds), "group_003.0.hdf5"
     for field in _fields:
-        yield FieldValuesTest(g3, field)
+        yield FieldValuesTest(g3, field, particle_type=True)

diff -r 842c2af2225c100e6f869bb50337ca89a141c2a6 -r 9153a5a32dce19164cc66f8073a26d460aa74cbe yt/utilities/answer_testing/framework.py
--- a/yt/utilities/answer_testing/framework.py
+++ b/yt/utilities/answer_testing/framework.py
@@ -32,6 +32,7 @@
 from yt.convenience import load, simulation
 from yt.config import ytcfg
 from yt.data_objects.static_output import Dataset
+from yt.data_objects.time_series import SimulationTimeSeries
 from yt.utilities.logger import disable_stream_logging
 from yt.utilities.command_line import get_yt_version
 
@@ -259,6 +260,22 @@
             return False
     return AnswerTestingTest.result_storage is not None
 
+def can_run_sim(sim_fn, sim_type, file_check = False):
+    if isinstance(sim_fn, SimulationTimeSeries):
+        return AnswerTestingTest.result_storage is not None
+    path = ytcfg.get("yt", "test_data_dir")
+    if not os.path.isdir(path):
+        return False
+    with temp_cwd(path):
+        if file_check:
+            return os.path.isfile(sim_fn) and \
+                AnswerTestingTest.result_storage is not None
+        try:
+            simulation(sim_fn, sim_type)
+        except YTOutputNotIdentified:
+            return False
+    return AnswerTestingTest.result_storage is not None
+
 def data_dir_load(ds_fn, cls = None, args = None, kwargs = None):
     path = ytcfg.get("yt", "test_data_dir")
     if isinstance(ds_fn, Dataset): return ds_fn
@@ -289,7 +306,10 @@
     result_storage = None
     prefix = ""
     def __init__(self, ds_fn):
-        self.ds = data_dir_load(ds_fn)
+        if isinstance(ds_fn, Dataset):
+            self.ds = ds_fn
+        else:
+            self.ds = data_dir_load(ds_fn)
 
     def __call__(self):
         nv = self.run()
@@ -360,16 +380,21 @@
     _attrs = ("field", )
 
     def __init__(self, ds_fn, field, obj_type = None,
-                 decimals = 10):
+                 particle_type=False, decimals = 10):
         super(FieldValuesTest, self).__init__(ds_fn)
         self.obj_type = obj_type
         self.field = field
+        self.particle_type = particle_type
         self.decimals = decimals
 
     def run(self):
         obj = create_obj(self.ds, self.obj_type)
+        if self.particle_type:
+            weight_field = "particle_ones"
+        else:
+            weight_field = "ones"
         avg = obj.quantities.weighted_average_quantity(
-            self.field, weight="ones")
+            self.field, weight=weight_field)
         mi, ma = obj.quantities.extrema(self.field)
         return np.array([avg, mi, ma])
 
@@ -727,7 +752,18 @@
     def compare(self, new_result, old_result):
         compare_image_lists(new_result, old_result, self.decimals)
 
-
+def requires_sim(sim_fn, sim_type, big_data = False, file_check = False):
+    def ffalse(func):
+        return lambda: None
+    def ftrue(func):
+        return func
+    if run_big_data == False and big_data == True:
+        return ffalse
+    elif not can_run_sim(sim_fn, sim_type, file_check):
+        return ffalse
+    else:
+        return ftrue
+        
 def requires_ds(ds_fn, big_data = False, file_check = False):
     def ffalse(func):
         return lambda: 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