[yt-svn] commit/yt: 2 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Tue Jan 31 10:58:32 PST 2017
2 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/fce3ce84ec14/
Changeset: fce3ce84ec14
Branch: yt
User: ngoldbaum
Date: 2017-01-25 17:32:45+00:00
Summary: Mutate MutableAttribute instances via attribute setting rather than indexing
This fixes an issue reported by Jonathan Slavin on the mailing list.
Since PR 2251 (https://bitbucket.org/yt_analysis/yt/pull-requests/2251), dataset
attributes that contain ndarray data are not managed using the
`MutableAttribute` descriptor. This ensures that it's impossible for a user to
accidentally overwrite simulation metadata, which can happen unintentionally if
(say) someone creates a reference to the attribute and then mutates
*that*. Unfortunately this also makes it more difficult to mutate these
attributes when we *want* to, like when we are setting them in the various
frontends. Unfortunately this design leads to silent brokenness when we *do* try
to mutate a MutableAttribute via indexing in a frontend - since we are only
mutating a copy and not the original data stored in the MutableAttribute.
I think I've found all of the places in frontends where we try to mutate a
MutableAttribute via indexing rather than attribute setting.
If someone has ideas about how to do this in a way that's less surprising to
frontend authors, I'd very much appreciate some advice.
Affected #: 4 files
diff -r 5c3af8da1dd806d6f5d76466e04feade4b1d6e5f -r fce3ce84ec14377539ca9d54576bb0e2560f2a8f yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -666,7 +666,9 @@
self.domain_right_edge = \
np.concatenate([self.domain_right_edge, [1.0]])
if self.geometry == "cylindrical":
- self.domain_right_edge[2] = 2.0 * np.pi
+ dre = self.domain_right_edge
+ dre[2] = 2.0 * np.pi
+ self.domain_right_edge = dre
tmp = self.domain_dimensions.tolist()
tmp.append(1)
self.domain_dimensions = np.array(tmp)
diff -r 5c3af8da1dd806d6f5d76466e04feade4b1d6e5f -r fce3ce84ec14377539ca9d54576bb0e2560f2a8f yt/frontends/fits/data_structures.py
--- a/yt/frontends/fits/data_structures.py
+++ b/yt/frontends/fits/data_structures.py
@@ -489,12 +489,15 @@
self.domain_dimensions = np.append(self.domain_dimensions,
[int(1)])
- self.domain_left_edge = np.array([0.5]*3)
- self.domain_right_edge = np.array([float(dim)+0.5 for dim in self.domain_dimensions])
+ domain_left_edge = np.array([0.5]*3)
+ domain_right_edge = np.array([float(dim)+0.5 for dim in self.domain_dimensions])
if self.dimensionality == 2:
- self.domain_left_edge[-1] = 0.5
- self.domain_right_edge[-1] = 1.5
+ domain_left_edge[-1] = 0.5
+ domain_right_edge[-1] = 1.5
+
+ self.domain_left_edge = domain_left_edge
+ self.domain_right_edge = domain_right_edge
# Get the simulation time
try:
@@ -611,8 +614,10 @@
self.spectral_factor /= self.domain_dimensions[self.spec_axis]
mylog.info("Setting the spectral factor to %f" % (self.spectral_factor))
Dz = self.domain_right_edge[self.spec_axis]-self.domain_left_edge[self.spec_axis]
- self.domain_right_edge[self.spec_axis] = self.domain_left_edge[self.spec_axis] + \
- self.spectral_factor*Dz
+ dre = self.domain_right_edge
+ dre[self.spec_axis] = (self.domain_left_edge[self.spec_axis] +
+ self.spectral_factor*Dz)
+ self.domain_right_edge = dre
self._dz /= self.spectral_factor
self._p0 = (self._p0-0.5)*self.spectral_factor + 0.5
diff -r 5c3af8da1dd806d6f5d76466e04feade4b1d6e5f -r fce3ce84ec14377539ca9d54576bb0e2560f2a8f yt/frontends/flash/data_structures.py
--- a/yt/frontends/flash/data_structures.py
+++ b/yt/frontends/flash/data_structures.py
@@ -377,28 +377,32 @@
if self.dimensionality == 1: nblocky = 1
# Determine domain boundaries
- self.domain_left_edge = np.array(
+ dle = np.array(
[self.parameters["%smin" % ax] for ax in 'xyz']).astype("float64")
- self.domain_right_edge = np.array(
+ dre = np.array(
[self.parameters["%smax" % ax] for ax in 'xyz']).astype("float64")
if self.dimensionality < 3:
for d in [dimensionality]+list(range(3-dimensionality)):
- if self.domain_left_edge[d] == self.domain_right_edge[d]:
- mylog.warning('Identical domain left edge and right edges '
- 'along dummy dimension (%i), attempting to read anyway' % d)
- self.domain_right_edge[d] = self.domain_left_edge[d]+1.0
+ if dle[d] == dre[d]:
+ mylog.warning(
+ 'Identical domain left edge and right edges '
+ 'along dummy dimension (%i), attempting to read anyway'
+ % d)
+ dre[d] = dle[d]+1.0
if self.dimensionality < 3 and self.geometry == "cylindrical":
mylog.warning("Extending theta dimension to 2PI + left edge.")
- self.domain_right_edge[2] = self.domain_left_edge[2] + 2*np.pi
+ dre[2] = dle[2] + 2*np.pi
elif self.dimensionality < 3 and self.geometry == "polar":
mylog.warning("Extending theta dimension to 2PI + left edge.")
- self.domain_right_edge[1] = self.domain_left_edge[1] + 2*np.pi
+ dre[1] = dle[1] + 2*np.pi
elif self.dimensionality < 3 and self.geometry == "spherical":
mylog.warning("Extending phi dimension to 2PI + left edge.")
- self.domain_right_edge[2] = self.domain_left_edge[2] + 2*np.pi
+ dre[2] = dle[2] + 2*np.pi
if self.dimensionality == 1 and self.geometry == "spherical":
mylog.warning("Extending theta dimension to PI + left edge.")
- self.domain_right_edge[1] = self.domain_left_edge[1] + np.pi
+ dre[1] = dle[1] + np.pi
+ self.domain_left_edge = dle
+ self.domain_right_edge = dre
self.domain_dimensions = \
np.array([nblockx*nxb,nblocky*nyb,nblockz*nzb])
diff -r 5c3af8da1dd806d6f5d76466e04feade4b1d6e5f -r fce3ce84ec14377539ca9d54576bb0e2560f2a8f yt/frontends/ytdata/data_structures.py
--- a/yt/frontends/ytdata/data_structures.py
+++ b/yt/frontends/ytdata/data_structures.py
@@ -750,18 +750,19 @@
self.base_domain_right_edge = self.domain_right_edge
self.base_domain_dimensions = self.domain_dimensions
- self.domain_dimensions = np.ones(3, dtype="int")
- self.domain_dimensions[:self.dimensionality] = \
+ domain_dimensions = np.ones(3, dtype="int")
+ domain_dimensions[:self.dimensionality] = \
self.profile_dimensions
- self.domain_left_edge = np.zeros(3)
- self.domain_right_edge = np.ones(3)
+ self.domain_dimensions = domain_dimensions
+ domain_left_edge = np.zeros(3)
+ domain_right_edge = np.ones(3)
for i, ax in enumerate("xyz"[:self.dimensionality]):
range_name = "%s_range" % ax
my_range = self.parameters[range_name]
if getattr(self, "%s_log" % ax, False):
my_range = np.log10(my_range)
- self.domain_left_edge[i] = my_range[0]
- self.domain_right_edge[i] = my_range[1]
+ domain_left_edge[i] = my_range[0]
+ domain_right_edge[i] = my_range[1]
setattr(self, range_name, self.parameters[range_name])
bin_field = "%s_field" % ax
@@ -772,6 +773,8 @@
self.parameters[bin_field] = \
tuple(self.parameters[bin_field].astype(str))
setattr(self, bin_field, self.parameters[bin_field])
+ self.domain_left_edge = domain_left_edge
+ self.domain_right_edge = domain_right_edge
def _setup_gas_alias(self):
"Alias the grid type to gas with a field alias."
https://bitbucket.org/yt_analysis/yt/commits/2e2dcac8a83a/
Changeset: 2e2dcac8a83a
Branch: yt
User: ngoldbaum
Date: 2017-01-31 18:58:24+00:00
Summary: Merged in ngoldbaum/yt (pull request #2501)
Mutate MutableAttribute instances via attribute setting rather than indexing
Affected #: 4 files
diff -r 12ab7e374fcbdd45e56622c9bae43cd9dd334b2c -r 2e2dcac8a83a1086033d4640cb4767373478a4ad yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -666,7 +666,9 @@
self.domain_right_edge = \
np.concatenate([self.domain_right_edge, [1.0]])
if self.geometry == "cylindrical":
- self.domain_right_edge[2] = 2.0 * np.pi
+ dre = self.domain_right_edge
+ dre[2] = 2.0 * np.pi
+ self.domain_right_edge = dre
tmp = self.domain_dimensions.tolist()
tmp.append(1)
self.domain_dimensions = np.array(tmp)
diff -r 12ab7e374fcbdd45e56622c9bae43cd9dd334b2c -r 2e2dcac8a83a1086033d4640cb4767373478a4ad yt/frontends/fits/data_structures.py
--- a/yt/frontends/fits/data_structures.py
+++ b/yt/frontends/fits/data_structures.py
@@ -489,12 +489,15 @@
self.domain_dimensions = np.append(self.domain_dimensions,
[int(1)])
- self.domain_left_edge = np.array([0.5]*3)
- self.domain_right_edge = np.array([float(dim)+0.5 for dim in self.domain_dimensions])
+ domain_left_edge = np.array([0.5]*3)
+ domain_right_edge = np.array([float(dim)+0.5 for dim in self.domain_dimensions])
if self.dimensionality == 2:
- self.domain_left_edge[-1] = 0.5
- self.domain_right_edge[-1] = 1.5
+ domain_left_edge[-1] = 0.5
+ domain_right_edge[-1] = 1.5
+
+ self.domain_left_edge = domain_left_edge
+ self.domain_right_edge = domain_right_edge
# Get the simulation time
try:
@@ -611,8 +614,10 @@
self.spectral_factor /= self.domain_dimensions[self.spec_axis]
mylog.info("Setting the spectral factor to %f" % (self.spectral_factor))
Dz = self.domain_right_edge[self.spec_axis]-self.domain_left_edge[self.spec_axis]
- self.domain_right_edge[self.spec_axis] = self.domain_left_edge[self.spec_axis] + \
- self.spectral_factor*Dz
+ dre = self.domain_right_edge
+ dre[self.spec_axis] = (self.domain_left_edge[self.spec_axis] +
+ self.spectral_factor*Dz)
+ self.domain_right_edge = dre
self._dz /= self.spectral_factor
self._p0 = (self._p0-0.5)*self.spectral_factor + 0.5
diff -r 12ab7e374fcbdd45e56622c9bae43cd9dd334b2c -r 2e2dcac8a83a1086033d4640cb4767373478a4ad yt/frontends/flash/data_structures.py
--- a/yt/frontends/flash/data_structures.py
+++ b/yt/frontends/flash/data_structures.py
@@ -377,28 +377,32 @@
if self.dimensionality == 1: nblocky = 1
# Determine domain boundaries
- self.domain_left_edge = np.array(
+ dle = np.array(
[self.parameters["%smin" % ax] for ax in 'xyz']).astype("float64")
- self.domain_right_edge = np.array(
+ dre = np.array(
[self.parameters["%smax" % ax] for ax in 'xyz']).astype("float64")
if self.dimensionality < 3:
for d in [dimensionality]+list(range(3-dimensionality)):
- if self.domain_left_edge[d] == self.domain_right_edge[d]:
- mylog.warning('Identical domain left edge and right edges '
- 'along dummy dimension (%i), attempting to read anyway' % d)
- self.domain_right_edge[d] = self.domain_left_edge[d]+1.0
+ if dle[d] == dre[d]:
+ mylog.warning(
+ 'Identical domain left edge and right edges '
+ 'along dummy dimension (%i), attempting to read anyway'
+ % d)
+ dre[d] = dle[d]+1.0
if self.dimensionality < 3 and self.geometry == "cylindrical":
mylog.warning("Extending theta dimension to 2PI + left edge.")
- self.domain_right_edge[2] = self.domain_left_edge[2] + 2*np.pi
+ dre[2] = dle[2] + 2*np.pi
elif self.dimensionality < 3 and self.geometry == "polar":
mylog.warning("Extending theta dimension to 2PI + left edge.")
- self.domain_right_edge[1] = self.domain_left_edge[1] + 2*np.pi
+ dre[1] = dle[1] + 2*np.pi
elif self.dimensionality < 3 and self.geometry == "spherical":
mylog.warning("Extending phi dimension to 2PI + left edge.")
- self.domain_right_edge[2] = self.domain_left_edge[2] + 2*np.pi
+ dre[2] = dle[2] + 2*np.pi
if self.dimensionality == 1 and self.geometry == "spherical":
mylog.warning("Extending theta dimension to PI + left edge.")
- self.domain_right_edge[1] = self.domain_left_edge[1] + np.pi
+ dre[1] = dle[1] + np.pi
+ self.domain_left_edge = dle
+ self.domain_right_edge = dre
self.domain_dimensions = \
np.array([nblockx*nxb,nblocky*nyb,nblockz*nzb])
diff -r 12ab7e374fcbdd45e56622c9bae43cd9dd334b2c -r 2e2dcac8a83a1086033d4640cb4767373478a4ad yt/frontends/ytdata/data_structures.py
--- a/yt/frontends/ytdata/data_structures.py
+++ b/yt/frontends/ytdata/data_structures.py
@@ -750,18 +750,19 @@
self.base_domain_right_edge = self.domain_right_edge
self.base_domain_dimensions = self.domain_dimensions
- self.domain_dimensions = np.ones(3, dtype="int")
- self.domain_dimensions[:self.dimensionality] = \
+ domain_dimensions = np.ones(3, dtype="int")
+ domain_dimensions[:self.dimensionality] = \
self.profile_dimensions
- self.domain_left_edge = np.zeros(3)
- self.domain_right_edge = np.ones(3)
+ self.domain_dimensions = domain_dimensions
+ domain_left_edge = np.zeros(3)
+ domain_right_edge = np.ones(3)
for i, ax in enumerate("xyz"[:self.dimensionality]):
range_name = "%s_range" % ax
my_range = self.parameters[range_name]
if getattr(self, "%s_log" % ax, False):
my_range = np.log10(my_range)
- self.domain_left_edge[i] = my_range[0]
- self.domain_right_edge[i] = my_range[1]
+ domain_left_edge[i] = my_range[0]
+ domain_right_edge[i] = my_range[1]
setattr(self, range_name, self.parameters[range_name])
bin_field = "%s_field" % ax
@@ -772,6 +773,8 @@
self.parameters[bin_field] = \
tuple(self.parameters[bin_field].astype(str))
setattr(self, bin_field, self.parameters[bin_field])
+ self.domain_left_edge = domain_left_edge
+ self.domain_right_edge = domain_right_edge
def _setup_gas_alias(self):
"Alias the grid type to gas with a field alias."
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