[yt-svn] commit/yt: 6 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Thu Aug 18 09:54:10 PDT 2016
6 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/ade417abb218/
Changeset: ade417abb218
Branch: yt
User: brittonsmith
Date: 2016-08-16 13:48:21+00:00
Summary: Make sure to set redshift_eff to something if not using peculiar velocity.
Affected #: 1 file
diff -r 56c0b53b459c4cb6c6a3bdf67634e142ec4c0f52 -r ade417abb21887fbf5ada817f550146415b374b5 yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
@@ -268,6 +268,9 @@
redshift_eff = ((1 + redshift) * \
(1 + field_data['redshift_dopp'])) - 1.
+ if not use_peculiar_velocity:
+ redshift_eff = redshift
+
return redshift, redshift_eff
def _add_continua_to_spectrum(self, field_data, use_peculiar_velocity,
https://bitbucket.org/yt_analysis/yt/commits/6894c8097d32/
Changeset: 6894c8097d32
Branch: yt
User: brittonsmith
Date: 2016-08-17 15:28:44+00:00
Summary: Adding one more mssing variable for when peculiar velocity is not used.
Affected #: 1 file
diff -r ade417abb21887fbf5ada817f550146415b374b5 -r 6894c8097d32d61fd4e8f6fb55e227878fb91fcb yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
@@ -379,7 +379,10 @@
cdens = column_density.in_units("cm**-2").d # cm**-2
thermb = thermal_b.in_cgs().d # thermal b coefficient; cm / s
dlambda = delta_lambda.d # lambda offset; angstroms
- vlos = field_data['velocity_los'].in_units("km/s").d # km/s
+ if use_peculiar_velocity:
+ vlos = field_data['velocity_los'].in_units("km/s").d # km/s
+ else:
+ vlos = np.zeros(field_data['temperature'].size)
# When we actually deposit the voigt profile, sometimes we will
# have underresolved lines (ie lines with smaller widths than
https://bitbucket.org/yt_analysis/yt/commits/8d6fbf1ba437/
Changeset: 8d6fbf1ba437
Branch: yt
User: brittonsmith
Date: 2016-08-17 15:29:06+00:00
Summary: Adding test with use_peculiar_velocity=False.
Affected #: 1 file
diff -r 6894c8097d32d61fd4e8f6fb55e227878fb91fcb -r 8d6fbf1ba437404e4db958f9f16cdb2b90d3139a yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
@@ -145,6 +145,58 @@
shutil.rmtree(tmpdir)
@requires_file(COSMO_PLUS_SINGLE)
+ at requires_answer_testing()
+def test_absorption_spectrum_non_cosmo_novpec():
+ """
+ This test generates an absorption spectrum from a simple light ray on a
+ grid dataset
+ """
+
+ # Set up in a temp dir
+ tmpdir = tempfile.mkdtemp()
+ curdir = os.getcwd()
+ os.chdir(tmpdir)
+
+ lr = LightRay(COSMO_PLUS_SINGLE)
+
+ ray_start = [0,0,0]
+ ray_end = [1,1,1]
+ lr.make_light_ray(start_position=ray_start, end_position=ray_end,
+ fields=['temperature', 'density', 'H_number_density'],
+ data_filename='lightray.h5', use_peculiar_velocity=False)
+
+ sp = AbsorptionSpectrum(1200.0, 1300.0, 10001)
+
+ my_label = 'HI Lya'
+ field = 'H_number_density'
+ wavelength = 1215.6700 # Angstromss
+ f_value = 4.164E-01
+ gamma = 6.265e+08
+ mass = 1.00794
+
+ sp.add_line(my_label, field, wavelength, f_value,
+ gamma, mass, label_threshold=1.e10)
+
+ wavelength, flux = sp.make_spectrum('lightray.h5',
+ output_file='spectrum.h5',
+ line_list_file='lines.txt',
+ use_peculiar_velocity=False)
+
+ # load just-generated hdf5 file of spectral data (for consistency)
+ data = h5.File('spectrum.h5', 'r')
+
+ for key in data.keys():
+ func = lambda x=key: data[x][:]
+ func.__name__ = "{}_non_cosmo_novpec".format(key)
+ test = GenericArrayTest(None, func)
+ test_absorption_spectrum_non_cosmo.__name__ = test.description
+ yield test
+
+ # clean up
+ os.chdir(curdir)
+ shutil.rmtree(tmpdir)
+
+ at requires_file(COSMO_PLUS_SINGLE)
def test_equivalent_width_conserved():
"""
This tests that the equivalent width of the optical depth is conserved
https://bitbucket.org/yt_analysis/yt/commits/4c255831b49d/
Changeset: 4c255831b49d
Branch: yt
User: brittonsmith
Date: 2016-08-18 09:46:24+00:00
Summary: Fixing test name.
Affected #: 1 file
diff -r 8d6fbf1ba437404e4db958f9f16cdb2b90d3139a -r 4c255831b49de10f71edf16c7a2bd6d0de87bba1 yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
@@ -189,7 +189,7 @@
func = lambda x=key: data[x][:]
func.__name__ = "{}_non_cosmo_novpec".format(key)
test = GenericArrayTest(None, func)
- test_absorption_spectrum_non_cosmo.__name__ = test.description
+ test_absorption_spectrum_non_cosmo_novpec.__name__ = test.description
yield test
# clean up
https://bitbucket.org/yt_analysis/yt/commits/1d9965aca174/
Changeset: 1d9965aca174
Branch: yt
User: brittonsmith
Date: 2016-08-18 09:48:37+00:00
Summary: Updating test answer version and adding new test.
Affected #: 1 file
diff -r 4c255831b49de10f71edf16c7a2bd6d0de87bba1 -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 tests/tests.yaml
--- a/tests/tests.yaml
+++ b/tests/tests.yaml
@@ -67,8 +67,9 @@
local_ytdata_000:
- yt/frontends/ytdata
- local_absorption_spectrum_001:
+ local_absorption_spectrum_002:
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo
+ - yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo_novpec
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_cosmo
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo_sph
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_cosmo_sph
https://bitbucket.org/yt_analysis/yt/commits/9d20cd224c72/
Changeset: 9d20cd224c72
Branch: yt
User: brittonsmith
Date: 2016-08-18 16:10:55+00:00
Summary: Merging and updating test version.
Affected #: 28 files
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 doc/source/analyzing/analysis_modules/absorption_spectrum.rst
--- a/doc/source/analyzing/analysis_modules/absorption_spectrum.rst
+++ b/doc/source/analyzing/analysis_modules/absorption_spectrum.rst
@@ -116,7 +116,12 @@
Continuum features with optical depths that follow a power law can also be
added. Like adding lines, you must specify details like the wavelength
and the field in the dataset and LightRay that is tied to this feature.
-Below, we will add H Lyman continuum.
+The wavelength refers to the location at which the continuum begins to be
+applied to the dataset, and as it moves to lower wavelength values, the
+optical depth value decreases according to the defined power law. The
+normalization value is the column density of the linked field which results
+in an optical depth of 1 at the defined wavelength. Below, we add the hydrogen
+Lyman continuum.
.. code-block:: python
@@ -131,7 +136,7 @@
Making the Spectrum
^^^^^^^^^^^^^^^^^^^
-Once all the lines and continuum are added, it is time to make a spectrum out
+Once all the lines and continuua are added, it is time to make a spectrum out
of some light ray data.
.. code-block:: python
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 tests/tests.yaml
--- a/tests/tests.yaml
+++ b/tests/tests.yaml
@@ -67,12 +67,13 @@
local_ytdata_000:
- yt/frontends/ytdata
- local_absorption_spectrum_002:
+ local_absorption_spectrum_004:
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo_novpec
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_cosmo
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_non_cosmo_sph
- yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_cosmo_sph
+ - yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py:test_absorption_spectrum_with_continuum
local_axialpix_001:
- yt/geometry/coordinates/tests/test_axial_pixelization.py:test_axial_pixelization
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/absorption_spectrum.py
@@ -276,42 +276,85 @@
def _add_continua_to_spectrum(self, field_data, use_peculiar_velocity,
observing_redshift=0.):
"""
- Add continuum features to the spectrum.
+ Add continuum features to the spectrum. Continuua are recorded as
+ a name, associated field, wavelength, normalization value, and index.
+ Continuua are applied at and below the denoted wavelength, where the
+ optical depth decreases as a power law of desired index. For positive
+ index values, this means optical depth is highest at the denoted
+ wavelength, and it drops with shorter and shorter wavelengths.
+ Consequently, transmitted flux undergoes a discontinuous cutoff at the
+ denoted wavelength, and then slowly increases with decreasing wavelength
+ according to the power law.
"""
# Change the redshifts of continuum sources to account for the
# redshift at which the observer sits
redshift, redshift_eff = self._apply_observing_redshift(field_data,
use_peculiar_velocity, observing_redshift)
- # Only add continuum features down to tau of 1.e-4.
- min_tau = 1.e-3
+ # min_tau is the minimum optical depth value that warrants
+ # accounting for an absorber. for a single absorber, noticeable
+ # continuum effects begin for tau = 1e-3 (leading to transmitted
+ # flux of e^-tau ~ 0.999). but we apply a cutoff to remove
+ # absorbers with insufficient column_density to contribute
+ # significantly to a continuum (see below). because lots of
+ # low column density absorbers can add up to a significant
+ # continuum effect, we normalize min_tau by the n_absorbers.
+ n_absorbers = field_data['dl'].size
+ min_tau = 1.e-3/n_absorbers
for continuum in self.continuum_list:
- column_density = field_data[continuum['field_name']] * field_data['dl']
+
+ # Normalization is in cm**-2, so column density must be as well
+ column_density = (field_data[continuum['field_name']] *
+ field_data['dl']).in_units('cm**-2')
# redshift_eff field combines cosmological and velocity redshifts
if use_peculiar_velocity:
delta_lambda = continuum['wavelength'] * redshift_eff
else:
delta_lambda = continuum['wavelength'] * redshift
+
+ # right index of continuum affected area is wavelength itself
this_wavelength = delta_lambda + continuum['wavelength']
- right_index = np.digitize(this_wavelength, self.lambda_field).clip(0, self.n_lambda)
+ right_index = np.digitize(this_wavelength,
+ self.lambda_field).clip(0, self.n_lambda)
+ # left index of continuum affected area wavelength at which
+ # optical depth reaches tau_min
left_index = np.digitize((this_wavelength *
- np.power((min_tau * continuum['normalization'] /
- column_density), (1. / continuum['index']))),
- self.lambda_field).clip(0, self.n_lambda)
+ np.power((min_tau * continuum['normalization'] /
+ column_density),
+ (1. / continuum['index']))),
+ self.lambda_field).clip(0, self.n_lambda)
+ # Only calculate the effects of continuua where normalized
+ # column_density is greater than min_tau
+ # because lower column will not have significant contribution
valid_continuua = np.where(((column_density /
continuum['normalization']) > min_tau) &
(right_index - left_index > 1))[0]
+ if valid_continuua.size == 0:
+ mylog.info("Not adding continuum %s: insufficient column density" %
+ continuum['label'])
+ return
+
pbar = get_pbar("Adding continuum - %s [%f A]: " % \
(continuum['label'], continuum['wavelength']),
valid_continuua.size)
+
+ # Tau value is (wavelength / continuum_wavelength)**index /
+ # (column_dens / norm)
+ # i.e. a power law decreasing as wavelength decreases
+
+ # Step through the absorber list and add continuum tau for each to
+ # the total optical depth for all wavelengths
for i, lixel in enumerate(valid_continuua):
- line_tau = np.power((self.lambda_field[left_index[lixel]:right_index[lixel]] /
- this_wavelength[lixel]), continuum['index']) * \
- column_density[lixel] / continuum['normalization']
- self.tau_field[left_index[lixel]:right_index[lixel]] += line_tau
+ cont_tau = \
+ np.power((self.lambda_field[left_index[lixel] :
+ right_index[lixel]] /
+ this_wavelength[lixel]), \
+ continuum['index']) * \
+ (column_density[lixel] / continuum['normalization'])
+ self.tau_field[left_index[lixel]:right_index[lixel]] += cont_tau
pbar.update(i)
pbar.finish()
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
--- a/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
+++ b/yt/analysis_modules/absorption_spectrum/tests/test_absorption_spectrum.py
@@ -33,7 +33,7 @@
COSMO_PLUS_SINGLE = "enzo_cosmology_plus/RD0009/RD0009"
GIZMO_PLUS = "gizmo_cosmology_plus/N128L16.param"
GIZMO_PLUS_SINGLE = "gizmo_cosmology_plus/snap_N128L16_151.hdf5"
-
+ISO_GALAXY = "IsolatedGalaxy/galaxy0030/galaxy0030"
@requires_file(COSMO_PLUS)
@requires_answer_testing()
@@ -412,3 +412,64 @@
# clean up
os.chdir(curdir)
shutil.rmtree(tmpdir)
+
+ at requires_file(ISO_GALAXY)
+ at requires_answer_testing()
+def test_absorption_spectrum_with_continuum():
+ """
+ This test generates an absorption spectrum from a simple light ray on a
+ grid dataset and adds Lyman alpha and Lyman continuum to it
+ """
+
+ # Set up in a temp dir
+ tmpdir = tempfile.mkdtemp()
+ curdir = os.getcwd()
+ os.chdir(tmpdir)
+
+ ds = load(ISO_GALAXY)
+ lr = LightRay(ds)
+
+ ray_start = ds.domain_left_edge
+ ray_end = ds.domain_right_edge
+ lr.make_light_ray(start_position=ray_start, end_position=ray_end,
+ fields=['temperature', 'density', 'H_number_density'],
+ data_filename='lightray.h5')
+
+ sp = AbsorptionSpectrum(800.0, 1300.0, 5001)
+
+ my_label = 'HI Lya'
+ field = 'H_number_density'
+ wavelength = 1215.6700 # Angstromss
+ f_value = 4.164E-01
+ gamma = 6.265e+08
+ mass = 1.00794
+
+ sp.add_line(my_label, field, wavelength, f_value,
+ gamma, mass, label_threshold=1.e10)
+
+ my_label = 'Ly C'
+ field = 'H_number_density'
+ wavelength = 912.323660 # Angstroms
+ normalization = 1.6e17
+ index = 3.0
+
+ sp.add_continuum(my_label, field, wavelength, normalization, index)
+
+ wavelength, flux = sp.make_spectrum('lightray.h5',
+ output_file='spectrum.h5',
+ line_list_file='lines.txt',
+ use_peculiar_velocity=True)
+
+ # load just-generated hdf5 file of spectral data (for consistency)
+ data = h5.File('spectrum.h5', 'r')
+
+ for key in data.keys():
+ func = lambda x=key: data[x][:]
+ func.__name__ = "{}_continuum".format(key)
+ test = GenericArrayTest(None, func)
+ test_absorption_spectrum_with_continuum.__name__ = test.description
+ yield test
+
+ # clean up
+ os.chdir(curdir)
+ shutil.rmtree(tmpdir)
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/data_objects/static_output.py
--- a/yt/data_objects/static_output.py
+++ b/yt/data_objects/static_output.py
@@ -889,10 +889,12 @@
return new_unit
def set_code_units(self):
- self._set_code_unit_attributes()
# here we override units, if overrides have been provided.
self._override_code_units()
+ # set attributes like ds.length_unit
+ self._set_code_unit_attributes()
+
self.unit_registry.modify("code_length", self.length_unit)
self.unit_registry.modify("code_mass", self.mass_unit)
self.unit_registry.modify("code_time", self.time_unit)
@@ -932,19 +934,22 @@
def _override_code_units(self):
if len(self.units_override) == 0:
return
- mylog.warning("Overriding code units. This is an experimental and potentially "+
- "dangerous option that may yield inconsistent results, and must be used "+
- "very carefully, and only if you know what you want from it.")
+ mylog.warning(
+ "Overriding code units. This is an experimental and potentially "
+ "dangerous option that may yield inconsistent results, and must be "
+ "used very carefully, and only if you know what you want from it.")
for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g"),
- ("velocity","cm/s"), ("magnetic","gauss"), ("temperature","K")]:
+ ("velocity","cm/s"), ("magnetic","gauss"),
+ ("temperature","K")]:
val = self.units_override.get("%s_unit" % unit, None)
if val is not None:
if isinstance(val, YTQuantity):
val = (val.v, str(val.units))
elif not isinstance(val, tuple):
val = (val, cgs)
- u = getattr(self, "%s_unit" % unit)
- mylog.info("Overriding %s_unit: %g %s -> %g %s.", unit, u.v, u.units, val[0], val[1])
+ u = getattr(self, "%s_unit" % unit, None)
+ mylog.info("Overriding %s_unit: %g -> %g %s.",
+ unit, u, val[0], val[1])
setattr(self, "%s_unit" % unit, self.quan(val[0], val[1]))
_arr = None
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/art/data_structures.py
--- a/yt/frontends/art/data_structures.py
+++ b/yt/frontends/art/data_structures.py
@@ -25,7 +25,8 @@
from yt.data_objects.octree_subset import \
OctreeSubset
from yt.funcs import \
- mylog
+ mylog, \
+ setdefaultattr
from yt.geometry.oct_container import \
ARTOctreeContainer
from yt.frontends.art.definitions import \
@@ -243,10 +244,10 @@
mass = aM0 * 1.98892e33
self.cosmological_simulation = True
- self.mass_unit = self.quan(mass, "g*%s" % ng**3)
- self.length_unit = self.quan(box_proper, "Mpc")
- self.velocity_unit = self.quan(velocity, "cm/s")
- self.time_unit = self.length_unit / self.velocity_unit
+ setdefaultattr(self, 'mass_unit', self.quan(mass, "g*%s" % ng**3))
+ setdefaultattr(self, 'length_unit', self.quan(box_proper, "Mpc"))
+ setdefaultattr(self, 'velocity_unit', self.quan(velocity, "cm/s"))
+ setdefaultattr(self, 'time_unit', self.length_unit / self.velocity_unit)
def _parse_parameter_file(self):
"""
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/artio/data_structures.py
--- a/yt/frontends/artio/data_structures.py
+++ b/yt/frontends/artio/data_structures.py
@@ -30,7 +30,8 @@
ARTIOFieldInfo
from yt.funcs import \
- mylog
+ mylog, \
+ setdefaultattr
from yt.geometry.geometry_handler import \
Index, \
YTDataChunk
@@ -354,10 +355,13 @@
self.storage_filename = storage_filename
def _set_code_unit_attributes(self):
- self.mass_unit = self.quan(self.parameters["unit_m"], "g")
- self.length_unit = self.quan(self.parameters["unit_l"], "cm")
- self.time_unit = self.quan(self.parameters["unit_t"], "s")
- self.velocity_unit = self.length_unit / self.time_unit
+ setdefaultattr(
+ self, 'mass_unit', self.quan(self.parameters["unit_m"], "g"))
+ setdefaultattr(
+ self, 'length_unit', self.quan(self.parameters["unit_l"], "cm"))
+ setdefaultattr(
+ self, 'time_unit', self.quan(self.parameters["unit_t"], "s"))
+ setdefaultattr(self, 'velocity_unit', self.length_unit / self.time_unit)
def _parse_parameter_file(self):
# hard-coded -- not provided by headers
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/athena/data_structures.py
--- a/yt/frontends/athena/data_structures.py
+++ b/yt/frontends/athena/data_structures.py
@@ -471,12 +471,15 @@
def _set_code_unit_attributes(self):
"""
- Generates the conversion to various physical _units based on the parameter file
+ Generates the conversion to various physical _units based on the
+ parameter file
"""
if "length_unit" not in self.units_override:
self.no_cgs_equiv_length = True
for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
- # We set these to cgs for now, but they may be overridden later.
+ # We set these to cgs for now, but they may have been overriden
+ if getattr(self, unit+'_unit', None) is not None:
+ continue
mylog.warning("Assuming 1.0 = 1.0 %s", cgs)
setattr(self, "%s_unit" % unit, self.quan(1.0, cgs))
self.magnetic_unit = np.sqrt(4*np.pi * self.mass_unit /
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/athena/tests/test_outputs.py
--- a/yt/frontends/athena/tests/test_outputs.py
+++ b/yt/frontends/athena/tests/test_outputs.py
@@ -49,6 +49,20 @@
test_blast.__name__ = test.description
yield test
+uo_blast = {
+ 'length_unit': (1.0, 'pc'),
+ 'mass_unit': (2.38858753789e-24, 'g/cm**3*pc**3'),
+ 'time_unit': (1.0, 's*pc/km'),
+}
+
+ at requires_file(blast)
+def test_blast_override():
+ # verify that overriding units causes derived unit values to be updated.
+ # see issue #1259
+ ds = load(blast, units_override=uo_blast)
+ assert_equal(float(ds.magnetic_unit.in_units('gauss')),
+ 5.478674679698131e-07)
+
uo_stripping = {"time_unit":3.086e14,
"length_unit":8.0236e22,
"mass_unit":9.999e-30*8.0236e22**3}
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -22,8 +22,9 @@
import numpy as np
from yt.funcs import \
+ ensure_tuple, \
mylog, \
- ensure_tuple
+ setdefaultattr
from yt.data_objects.grid_patch import AMRGridPatch
from yt.extern.six.moves import zip as izip
from yt.geometry.grid_geometry_handler import GridIndex
@@ -608,10 +609,10 @@
self._setup2d()
def _set_code_unit_attributes(self):
- self.length_unit = self.quan(1.0, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
- self.velocity_unit = self.quan(1.0, "cm/s")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'velocity_unit', self.quan(1.0, "cm/s"))
def _setup1d(self):
# self._index_class = BoxlibHierarchy1D
@@ -1016,10 +1017,11 @@
self.particle_types_raw = self.particle_types
def _set_code_unit_attributes(self):
- self.mass_unit = self.quan(1.0, "Msun")
- self.time_unit = self.quan(1.0 / 3.08568025e19, "s")
- self.length_unit = self.quan(1.0 / (1 + self.current_redshift), "Mpc")
- self.velocity_unit = self.length_unit / self.time_unit
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "Msun"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0 / 3.08568025e19, "s"))
+ setdefaultattr(self, 'length_unit',
+ self.quan(1.0 / (1 + self.current_redshift), "Mpc"))
+ setdefaultattr(self, 'velocity_unit', self.length_unit / self.time_unit)
def _guess_pcast(vals):
# Now we guess some things about the parameter and its type
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/chombo/data_structures.py
--- a/yt/frontends/chombo/data_structures.py
+++ b/yt/frontends/chombo/data_structures.py
@@ -23,7 +23,9 @@
from stat import \
ST_CTIME
-from yt.funcs import mylog
+from yt.funcs import \
+ mylog, \
+ setdefaultattr
from yt.data_objects.grid_patch import \
AMRGridPatch
from yt.extern import six
@@ -275,14 +277,19 @@
self.parameters["EOSType"] = -1 # default
def _set_code_unit_attributes(self):
- mylog.warning("Setting code length to be 1.0 cm")
- mylog.warning("Setting code mass to be 1.0 g")
- mylog.warning("Setting code time to be 1.0 s")
- self.length_unit = self.quan(1.0, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
- self.magnetic_unit = self.quan(np.sqrt(4.*np.pi), "gauss")
- self.velocity_unit = self.length_unit / self.time_unit
+ if not hasattr(self, 'length_unit'):
+ mylog.warning("Setting code length unit to be 1.0 cm")
+ if not hasattr(self, 'mass_unit'):
+ mylog.warning("Setting code mass unit to be 1.0 g")
+ if not hasattr(self, 'time_unit'):
+ mylog.warning("Setting code time unit to be 1.0 s")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'magnetic_unit',
+ self.quan(np.sqrt(4.*np.pi), "gauss"))
+ setdefaultattr(self, 'velocity_unit',
+ self.length_unit / self.time_unit)
def _localize(self, f, default):
if f is None:
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/enzo/data_structures.py
--- a/yt/frontends/enzo/data_structures.py
+++ b/yt/frontends/enzo/data_structures.py
@@ -28,7 +28,8 @@
from yt.funcs import \
ensure_list, \
ensure_tuple, \
- get_pbar
+ get_pbar, \
+ setdefaultattr
from yt.config import ytcfg
from yt.data_objects.grid_patch import \
AMRGridPatch
@@ -917,11 +918,12 @@
if box_size is None:
box_size = self.parameters["Physics"]["Cosmology"]\
["CosmologyComovingBoxSize"]
- self.length_unit = self.quan(box_size, "Mpccm/h")
- self.mass_unit = \
- self.quan(k['urho'], 'g/cm**3') * (self.length_unit.in_cgs())**3
- self.time_unit = self.quan(k['utim'], 's')
- self.velocity_unit = self.quan(k['uvel'], 'cm/s')
+ setdefaultattr(self, 'length_unit', self.quan(box_size, "Mpccm/h"))
+ setdefaultattr(
+ self, 'mass_unit',
+ self.quan(k['urho'], 'g/cm**3') * (self.length_unit.in_cgs())**3)
+ setdefaultattr(self, 'time_unit', self.quan(k['utim'], 's'))
+ setdefaultattr(self, 'velocity_unit', self.quan(k['uvel'], 'cm/s'))
else:
if "LengthUnits" in self.parameters:
length_unit = self.parameters["LengthUnits"]
@@ -937,15 +939,16 @@
mylog.warning("Setting 1.0 in code units to be 1.0 s")
length_unit = mass_unit = time_unit = 1.0
- self.length_unit = self.quan(length_unit, "cm")
- self.mass_unit = self.quan(mass_unit, "g")
- self.time_unit = self.quan(time_unit, "s")
- self.velocity_unit = self.length_unit / self.time_unit
+ setdefaultattr(self, 'length_unit', self.quan(length_unit, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(mass_unit, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(time_unit, "s"))
+ setdefaultattr(
+ self, 'velocity_unit', self.length_unit / self.time_unit)
magnetic_unit = np.sqrt(4*np.pi * self.mass_unit /
(self.time_unit**2 * self.length_unit))
magnetic_unit = np.float64(magnetic_unit.in_cgs())
- self.magnetic_unit = self.quan(magnetic_unit, "gauss")
+ setdefaultattr(self, 'magnetic_unit', self.quan(magnetic_unit, "gauss"))
def cosmology_get_units(self):
"""
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/exodus_ii/data_structures.py
--- a/yt/frontends/exodus_ii/data_structures.py
+++ b/yt/frontends/exodus_ii/data_structures.py
@@ -14,6 +14,8 @@
#-----------------------------------------------------------------------------
import numpy as np
+from yt.funcs import \
+ setdefaultattr
from yt.geometry.unstructured_mesh_handler import \
UnstructuredIndex
from yt.data_objects.unstructured_mesh import \
@@ -163,9 +165,9 @@
# should be set, along with examples of how to set them to standard
# values.
#
- self.length_unit = self.quan(1.0, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
#
# These can also be set:
# self.velocity_unit = self.quan(1.0, "cm/s")
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/fits/data_structures.py
--- a/yt/frontends/fits/data_structures.py
+++ b/yt/frontends/fits/data_structures.py
@@ -25,8 +25,9 @@
from yt.config import ytcfg
from yt.funcs import \
+ ensure_list, \
mylog, \
- ensure_list
+ setdefaultattr
from yt.data_objects.grid_patch import \
AMRGridPatch
from yt.geometry.grid_geometry_handler import \
@@ -447,10 +448,10 @@
mylog.warning("No length conversion provided. Assuming 1 = 1 cm.")
length_factor = 1.0
length_unit = "cm"
- self.length_unit = self.quan(length_factor,length_unit)
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
- self.velocity_unit = self.quan(1.0, "cm/s")
+ setdefaultattr(self, 'length_unit', self.quan(length_factor,length_unit))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'velocity_unit', self.quan(1.0, "cm/s"))
if "beam_size" in self.specified_parameters:
beam_size = self.specified_parameters["beam_size"]
beam_size = self.quan(beam_size[0], beam_size[1]).in_cgs().value
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/flash/data_structures.py
--- a/yt/frontends/flash/data_structures.py
+++ b/yt/frontends/flash/data_structures.py
@@ -22,7 +22,9 @@
AMRGridPatch
from yt.data_objects.static_output import \
Dataset, ParticleFile
-from yt.funcs import mylog
+from yt.funcs import \
+ mylog, \
+ setdefaultattr
from yt.geometry.grid_geometry_handler import \
GridIndex
from yt.geometry.particle_geometry_handler import \
@@ -246,13 +248,14 @@
else:
length_factor = 1.0
temperature_factor = 1.0
- self.magnetic_unit = self.quan(b_factor, "gauss")
- self.length_unit = self.quan(length_factor, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
- self.velocity_unit = self.quan(1.0, "cm/s")
- self.temperature_unit = self.quan(temperature_factor, "K")
+ setdefaultattr(self, 'magnetic_unit', self.quan(b_factor, "gauss"))
+ setdefaultattr(self, 'length_unit', self.quan(length_factor, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'velocity_unit', self.quan(1.0, "cm/s"))
+ setdefaultattr(
+ self, 'temperature_unit', self.quan(temperature_factor, "K"))
def set_code_units(self):
super(FLASHDataset, self).set_code_units()
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/gadget_fof/data_structures.py
--- a/yt/frontends/gadget_fof/data_structures.py
+++ b/yt/frontends/gadget_fof/data_structures.py
@@ -33,7 +33,8 @@
GadgetFOFFieldInfo, \
GadgetFOFHaloFieldInfo
from yt.funcs import \
- only_on_root
+ only_on_root, \
+ setdefaultattr
from yt.geometry.particle_geometry_handler import \
ParticleIndex
from yt.utilities.cosmology import \
@@ -232,7 +233,8 @@
else:
raise RuntimeError
length_unit = _fix_unit_ordering(length_unit)
- self.length_unit = self.quan(length_unit[0], length_unit[1])
+ setdefaultattr(self, 'length_unit',
+ self.quan(length_unit[0], length_unit[1]))
if "velocity" in unit_base:
velocity_unit = unit_base["velocity"]
@@ -244,7 +246,8 @@
else:
velocity_unit = (1e5, "cmcm/s")
velocity_unit = _fix_unit_ordering(velocity_unit)
- self.velocity_unit = self.quan(velocity_unit[0], velocity_unit[1])
+ setdefaultattr(self, 'velocity_unit',
+ self.quan(velocity_unit[0], velocity_unit[1]))
# We set hubble_constant = 1.0 for non-cosmology, so this is safe.
# Default to 1e10 Msun/h if mass is not specified.
@@ -259,7 +262,7 @@
# Sane default
mass_unit = (1.0, "1e10*Msun/h")
mass_unit = _fix_unit_ordering(mass_unit)
- self.mass_unit = self.quan(mass_unit[0], mass_unit[1])
+ setdefaultattr(self, 'mass_unit', self.quan(mass_unit[0], mass_unit[1]))
if "time" in unit_base:
time_unit = unit_base["time"]
@@ -267,7 +270,7 @@
time_unit = (unit_base["UnitTime_in_s"], "s")
else:
time_unit = (1., "s")
- self.time_unit = self.quan(time_unit[0], time_unit[1])
+ setdefaultattr(self, 'time_unit', self.quan(time_unit[0], time_unit[1]))
def __repr__(self):
return self.basename.split(".", 1)[0]
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/gamer/data_structures.py
--- a/yt/frontends/gamer/data_structures.py
+++ b/yt/frontends/gamer/data_structures.py
@@ -18,7 +18,9 @@
import numpy as np
import weakref
-from yt.funcs import mylog
+from yt.funcs import \
+ mylog, \
+ setdefaultattr
from yt.data_objects.grid_patch import \
AMRGridPatch
from yt.geometry.grid_geometry_handler import \
@@ -205,7 +207,7 @@
"Use units_override to specify the units")
for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
- setattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
+ setdefaultattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
if len(self.units_override) == 0:
mylog.warning("Assuming 1.0 = 1.0 %s", cgs)
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/gdf/data_structures.py
--- a/yt/frontends/gdf/data_structures.py
+++ b/yt/frontends/gdf/data_structures.py
@@ -19,7 +19,9 @@
import os
from yt.extern.six import string_types
from yt.funcs import \
- just_one, ensure_tuple
+ ensure_tuple, \
+ just_one, \
+ setdefaultattr
from yt.data_objects.grid_patch import \
AMRGridPatch
from yt.geometry.grid_geometry_handler import \
@@ -223,17 +225,17 @@
un = unit_name[:-5]
un = un.replace('magnetic', 'magnetic_field', 1)
unit = self.unit_system[un]
- setattr(self, unit_name, self.quan(value, unit))
- setattr(self, unit_name, self.quan(value, unit))
+ setdefaultattr(self, unit_name, self.quan(value, unit))
+ setdefaultattr(self, unit_name, self.quan(value, unit))
if unit_name in h5f["/field_types"]:
if unit_name in self.field_units:
mylog.warning("'field_units' was overridden by 'dataset_units/%s'"
% (unit_name))
self.field_units[unit_name] = str(unit)
else:
- self.length_unit = self.quan(1.0, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.time_unit = self.quan(1.0, "s")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
h5f.close()
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/halo_catalog/data_structures.py
--- a/yt/frontends/halo_catalog/data_structures.py
+++ b/yt/frontends/halo_catalog/data_structures.py
@@ -23,6 +23,8 @@
from .fields import \
HaloCatalogFieldInfo
+from yt.funcs import \
+ setdefaultattr
from yt.geometry.particle_geometry_handler import \
ParticleIndex
from yt.data_objects.static_output import \
@@ -76,10 +78,10 @@
self.parameters.update(hvals)
def _set_code_unit_attributes(self):
- self.length_unit = self.quan(1.0, "cm")
- self.mass_unit = self.quan(1.0, "g")
- self.velocity_unit = self.quan(1.0, "cm / s")
- self.time_unit = self.quan(1.0, "s")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
+ setdefaultattr(self, 'velocity_unit', self.quan(1.0, "cm / s"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
@classmethod
def _is_valid(self, *args, **kwargs):
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/moab/data_structures.py
--- a/yt/frontends/moab/data_structures.py
+++ b/yt/frontends/moab/data_structures.py
@@ -19,6 +19,8 @@
import weakref
from yt.data_objects.unstructured_mesh import \
SemiStructuredMesh
+from yt.funcs import \
+ setdefaultattr
from yt.geometry.unstructured_mesh_handler import \
UnstructuredIndex
from yt.data_objects.static_output import \
@@ -78,9 +80,9 @@
def _set_code_unit_attributes(self):
# Almost everything is regarded as dimensionless in MOAB, so these will
# not be used very much or at all.
- self.length_unit = self.quan(1.0, "cm")
- self.time_unit = self.quan(1.0, "s")
- self.mass_unit = self.quan(1.0, "g")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
def _parse_parameter_file(self):
self._handle = h5py.File(self.parameter_filename, "r")
@@ -161,9 +163,9 @@
def _set_code_unit_attributes(self):
# Almost everything is regarded as dimensionless in MOAB, so these will
# not be used very much or at all.
- self.length_unit = self.quan(1.0, "cm")
- self.time_unit = self.quan(1.0, "s")
- self.mass_unit = self.quan(1.0, "g")
+ setdefaultattr(self, 'length_unit', self.quan(1.0, "cm"))
+ setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
def _parse_parameter_file(self):
# not sure if this import has side-effects so I'm not deleting it
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/owls_subfind/data_structures.py
--- a/yt/frontends/owls_subfind/data_structures.py
+++ b/yt/frontends/owls_subfind/data_structures.py
@@ -24,7 +24,9 @@
from .fields import \
OWLSSubfindFieldInfo
-from yt.funcs import only_on_root
+from yt.funcs import \
+ only_on_root, \
+ setdefaultattr
from yt.utilities.exceptions import \
YTException
from yt.utilities.logger import ytLogger as \
@@ -176,7 +178,8 @@
else:
raise RuntimeError
length_unit = _fix_unit_ordering(length_unit)
- self.length_unit = self.quan(length_unit[0], length_unit[1])
+ setdefaultattr(self, 'length_unit',
+ self.quan(length_unit[0], length_unit[1]))
if "velocity" in unit_base:
velocity_unit = unit_base["velocity"]
@@ -185,7 +188,8 @@
else:
velocity_unit = (1e5, "cm/s")
velocity_unit = _fix_unit_ordering(velocity_unit)
- self.velocity_unit = self.quan(velocity_unit[0], velocity_unit[1])
+ setdefaultattr(self, 'velocity_unit',
+ self.quan(velocity_unit[0], velocity_unit[1]))
# We set hubble_constant = 1.0 for non-cosmology, so this is safe.
# Default to 1e10 Msun/h if mass is not specified.
@@ -200,7 +204,7 @@
# Sane default
mass_unit = (1.0, "1e10*Msun/h")
mass_unit = _fix_unit_ordering(mass_unit)
- self.mass_unit = self.quan(mass_unit[0], mass_unit[1])
+ setdefaultattr(self, 'mass_unit', self.quan(mass_unit[0], mass_unit[1]))
if "time" in unit_base:
time_unit = unit_base["time"]
@@ -208,7 +212,7 @@
time_unit = (unit_base["UnitTime_in_s"], "s")
else:
time_unit = (1., "s")
- self.time_unit = self.quan(time_unit[0], time_unit[1])
+ setdefaultattr(self, 'time_unit', self.quan(time_unit[0], time_unit[1]))
@classmethod
def _is_valid(self, *args, **kwargs):
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/ramses/data_structures.py
--- a/yt/frontends/ramses/data_structures.py
+++ b/yt/frontends/ramses/data_structures.py
@@ -23,7 +23,8 @@
from yt.extern.six import string_types
from yt.funcs import \
- mylog
+ mylog, \
+ setdefaultattr
from yt.geometry.oct_geometry_handler import \
OctreeIndex
from yt.geometry.geometry_handler import \
@@ -565,17 +566,21 @@
# For now assume an atomic ideal gas with cosmic abundances (x_H = 0.76)
mean_molecular_weight_factor = _X**-1
- self.density_unit = self.quan(density_unit, 'g/cm**3')
- self.magnetic_unit = self.quan(magnetic_unit, "gauss")
- self.pressure_unit = self.quan(pressure_unit, 'dyne/cm**2')
- self.time_unit = self.quan(time_unit, "s")
- self.mass_unit = self.quan(mass_unit, "g")
- self.velocity_unit = self.quan(length_unit, 'cm') / self.time_unit
- self.temperature_unit = (self.velocity_unit**2*mp*
- mean_molecular_weight_factor/kb).in_units('K')
+ setdefaultattr(self, 'density_unit', self.quan(density_unit, 'g/cm**3'))
+ setdefaultattr(self, 'magnetic_unit', self.quan(magnetic_unit, "gauss"))
+ setdefaultattr(self, 'pressure_unit',
+ self.quan(pressure_unit, 'dyne/cm**2'))
+ setdefaultattr(self, 'time_unit', self.quan(time_unit, "s"))
+ setdefaultattr(self, 'mass_unit', self.quan(mass_unit, "g"))
+ setdefaultattr(self, 'velocity_unit',
+ self.quan(length_unit, 'cm') / self.time_unit)
+ temperature_unit = (
+ self.velocity_unit**2*mp*mean_molecular_weight_factor/kb)
+ setdefaultattr(self, 'temperature_unit', temperature_unit.in_units('K'))
# Only the length unit get scales by a factor of boxlen
- self.length_unit = self.quan(length_unit * boxlen, "cm")
+ setdefaultattr(self, 'length_unit',
+ self.quan(length_unit * boxlen, "cm"))
def _parse_parameter_file(self):
# hardcoded for now
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/rockstar/data_structures.py
--- a/yt/frontends/rockstar/data_structures.py
+++ b/yt/frontends/rockstar/data_structures.py
@@ -22,12 +22,14 @@
from .fields import \
RockstarFieldInfo
-from yt.utilities.cosmology import Cosmology
-from yt.geometry.particle_geometry_handler import \
- ParticleIndex
from yt.data_objects.static_output import \
Dataset, \
ParticleFile
+from yt.funcs import \
+ setdefaultattr
+from yt.geometry.particle_geometry_handler import \
+ ParticleIndex
+from yt.utilities.cosmology import Cosmology
import yt.utilities.fortran_utils as fpu
from .definitions import \
@@ -92,10 +94,10 @@
def _set_code_unit_attributes(self):
z = self.current_redshift
- self.length_unit = self.quan(1.0 / (1.0+z), "Mpc / h")
- self.mass_unit = self.quan(1.0, "Msun / h")
- self.velocity_unit = self.quan(1.0, "km / s")
- self.time_unit = self.length_unit / self.velocity_unit
+ setdefaultattr(self, 'length_unit', self.quan(1.0 / (1.0+z), "Mpc / h"))
+ setdefaultattr(self, 'mass_unit', self.quan(1.0, "Msun / h"))
+ setdefaultattr(self, 'velocity_unit', self.quan(1.0, "km / s"))
+ setdefaultattr(self, 'time_unit', self.length_unit / self.velocity_unit)
@classmethod
def _is_valid(self, *args, **kwargs):
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/frontends/sdf/data_structures.py
--- a/yt/frontends/sdf/data_structures.py
+++ b/yt/frontends/sdf/data_structures.py
@@ -28,7 +28,8 @@
from yt.data_objects.static_output import \
Dataset, ParticleFile
from yt.funcs import \
- get_requests
+ get_requests, \
+ setdefaultattr
from .fields import \
SDFFieldInfo
from yt.utilities.sdf import \
@@ -177,16 +178,22 @@
return self._midx
def _set_code_unit_attributes(self):
- self.length_unit = self.quan(1.0, self.parameters.get("length_unit", 'kpc'))
- self.velocity_unit = self.quan(1.0, self.parameters.get("velocity_unit", 'kpc/Gyr'))
- self.time_unit = self.quan(1.0, self.parameters.get("time_unit", 'Gyr'))
+ setdefaultattr(
+ self, 'length_unit',
+ self.quan(1.0, self.parameters.get("length_unit", 'kpc')))
+ setdefaultattr(
+ self, 'velocity_unit',
+ self.quan(1.0, self.parameters.get("velocity_unit", 'kpc/Gyr')))
+ setdefaultattr(
+ self, 'time_unit',
+ self.quan(1.0, self.parameters.get("time_unit", 'Gyr')))
mass_unit = self.parameters.get("mass_unit", '1e10 Msun')
if ' ' in mass_unit:
factor, unit = mass_unit.split(' ')
else:
factor = 1.0
unit = mass_unit
- self.mass_unit = self.quan(float(factor), unit)
+ setdefaultattr(self, 'mass_unit', self.quan(float(factor), unit))
@classmethod
def _is_valid(cls, *args, **kwargs):
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/funcs.py
--- a/yt/funcs.py
+++ b/yt/funcs.py
@@ -1004,3 +1004,12 @@
def get_interactivity():
return interactivity
+
+def setdefaultattr(obj, name, value):
+ """Set attribute with *name* on *obj* with *value* if it doesn't exist yet
+
+ Analogous to dict.setdefault
+ """
+ if not hasattr(obj, name):
+ setattr(obj, name, value)
+ return getattr(obj, name)
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/utilities/answer_testing/framework.py
--- a/yt/utilities/answer_testing/framework.py
+++ b/yt/utilities/answer_testing/framework.py
@@ -819,6 +819,10 @@
kwargs = self.kwargs
return self.array_func(*args, **kwargs)
def compare(self, new_result, old_result):
+ if not isinstance(new_result, dict):
+ new_result = {'answer': new_result}
+ old_result = {'answer': old_result}
+
assert_equal(len(new_result), len(old_result),
err_msg="Number of outputs not equal.",
verbose=True)
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -243,16 +243,18 @@
def frb():
doc = "The frb property."
def fget(self):
- if self._frb is None:
+ if self._frb is None or self._data_valid is False:
self._recreate_frb()
return self._frb
def fset(self, value):
self._frb = value
+ self._data_valid = True
def fdel(self):
del self._frb
self._frb = None
+ self._data_valid = False
return locals()
frb = property(**frb())
@@ -261,8 +263,8 @@
old_fields = None
# If we are regenerating an frb, we want to know what fields we had before
if self._frb is not None:
- old_fields = list(self.frb.keys())
- old_units = [str(self.frb[of].units) for of in old_fields]
+ old_fields = list(self._frb.keys())
+ old_units = [str(self._frb[of].units) for of in old_fields]
# Set the bounds
if hasattr(self,'zlim'):
@@ -273,12 +275,11 @@
bounds = np.array([b.in_units('code_length') for b in bounds])
# Generate the FRB
- self._frb = self._frb_generator(self.data_source, bounds,
- self.buff_size, self.antialias,
- periodic=self._periodic)
+ self.frb = self._frb_generator(self.data_source, bounds,
+ self.buff_size, self.antialias,
+ periodic=self._periodic)
# At this point the frb has the valid bounds, size, aliasing, etc.
- self._data_valid = True
if old_fields is None:
self._frb._get_data_source_fields()
else:
diff -r 1d9965aca17405e70f1b634a924bc263ba7fadd3 -r 9d20cd224c72503091c17dbe14fe177504828708 yt/visualization/tests/test_plotwindow.py
--- a/yt/visualization/tests/test_plotwindow.py
+++ b/yt/visualization/tests/test_plotwindow.py
@@ -444,3 +444,9 @@
assert_raises(
YTInvalidFieldType, object, ds, normal, field_name_list)
+
+def test_frb_regen():
+ ds = fake_random_ds(32)
+ slc = SlicePlot(ds, 2, 'density')
+ slc.set_buff_size(1200)
+ assert_equal(slc.frb['density'].shape, (1200, 1200))
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