[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