[yt-svn] commit/yt: 4 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Wed Oct 29 10:25:18 PDT 2014
4 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/cd41f1b5a443/
Changeset: cd41f1b5a443
Branch: yt
User: jzuhone
Date: 2014-10-14 12:55:48+00:00
Summary: This is just a dict that doesn't know anything about field types.
Affected #: 1 file
diff -r bcd4895dd0021a121432cf8b50a4df7306064eba -r cd41f1b5a443d75af09c258934e6d7aea0316d4f yt/utilities/particle_generator.py
--- a/yt/utilities/particle_generator.py
+++ b/yt/utilities/particle_generator.py
@@ -226,9 +226,9 @@
"""
field_list = data.keys()
- x = data.pop(("io", "particle_position_x"))
- y = data.pop(("io", "particle_position_y"))
- z = data.pop(("io", "particle_position_z"))
+ x = data.pop("particle_position_x")
+ y = data.pop("particle_position_y")
+ z = data.pop("particle_position_z")
xcond = np.logical_or(x < ds.domain_left_edge[0],
x >= ds.domain_right_edge[0])
https://bitbucket.org/yt_analysis/yt/commits/100bf9acb0b1/
Changeset: 100bf9acb0b1
Branch: yt
User: jzuhone
Date: 2014-10-14 14:39:12+00:00
Summary: Changed my mind about the dict setup. This re-arranging of field names should allow fields, whether (ftype,fname) tuples or just names, to be passed through. Also fixed a lot of PEP8-isms.
Affected #: 1 file
diff -r cd41f1b5a443d75af09c258934e6d7aea0316d4f -r 100bf9acb0b141c2b8c37eb776c6740653ecbdcb yt/utilities/particle_generator.py
--- a/yt/utilities/particle_generator.py
+++ b/yt/utilities/particle_generator.py
@@ -1,16 +1,15 @@
import numpy as np
-import h5py
from yt.utilities.lib.CICDeposit import CICSample_3
from yt.funcs import *
from yt.units.yt_array import uconcatenate, YTArray
-class ParticleGenerator(object) :
+class ParticleGenerator(object):
default_fields = [("io", "particle_position_x"),
("io", "particle_position_y"),
("io", "particle_position_z")]
- def __init__(self, ds, num_particles, field_list) :
+ def __init__(self, ds, num_particles, field_list):
"""
Base class for generating particle fields which may be applied to
streams. Normally this would not be called directly, since it doesn't
@@ -20,20 +19,21 @@
"""
self.ds = ds
self.num_particles = num_particles
- self.field_list = field_list
+ self.field_list = [("io",fd) if isinstance(fd,basestring) else fd
+ for fd in field_list]
self.field_list.append(("io", "particle_index"))
self.field_units = dict(
(('io', 'particle_position_%s' % ax), 'code_length')
for ax in 'xyz')
self.field_units['io', 'particle_index'] = ''
- try :
+ try:
self.posx_index = self.field_list.index(self.default_fields[0])
self.posy_index = self.field_list.index(self.default_fields[1])
self.posz_index = self.field_list.index(self.default_fields[2])
- except :
- raise KeyError("Field list must contain the following fields: " +
- "\n".join(self.default_fields))
+ except:
+ raise KeyError("You must specify position fields: " +
+ " ".join(["particle_position_%s" % ax for ax in "xyz"]))
self.index_index = self.field_list.index(("io", "particle_index"))
self.num_grids = self.ds.index.num_grids
@@ -45,25 +45,25 @@
self.particles = np.zeros((self.num_particles, self.num_fields),
dtype='float64')
- def has_key(self, key) :
+ def has_key(self, key):
"""
Check to see if *key* is in the particle field list.
"""
- return (key in self.field_list)
+ return key in self.field_list
- def keys(self) :
+ def keys(self):
"""
Return the list of particle fields.
"""
return self.field_list
- def __getitem__(self, key) :
+ def __getitem__(self, key):
"""
Get the field associated with key.
"""
return self.particles[:,self.field_list.index(key)]
- def __setitem__(self, key, val) :
+ def __setitem__(self, key, val):
"""
Sets a field to be some other value. Note that we assume
that the particles have been sorted by grid already, so
@@ -71,13 +71,13 @@
"""
self.particles[:,self.field_list.index(key)] = val[:]
- def __len__(self) :
+ def __len__(self):
"""
The number of particles
"""
return self.num_particles
- def get_for_grid(self, grid) :
+ def get_for_grid(self, grid):
"""
Return a dict containing all of the particle fields in the specified grid.
"""
@@ -94,7 +94,7 @@
tr[field] = self.particles[start:end, fi]
return tr
- def _setup_particles(self,x,y,z,setup_fields=None) :
+ def _setup_particles(self,x,y,z,setup_fields=None):
"""
Assigns grids to particles and sets up particle positions. *setup_fields* is
a dict of fields other than the particle positions to set up.
@@ -106,17 +106,18 @@
self.particles[:,self.posz_index] = z[idxs]
self.NumberOfParticles = np.bincount(particle_grid_inds.astype("intp"),
minlength=self.num_grids)
- if self.num_grids > 1 :
+ if self.num_grids > 1:
np.add.accumulate(self.NumberOfParticles.squeeze(),
out=self.ParticleGridIndices[1:])
- else :
+ else:
self.ParticleGridIndices[1] = self.NumberOfParticles.squeeze()
if setup_fields is not None:
for key, value in setup_fields.items():
- if key not in self.default_fields:
- self.particles[:,self.field_list.index(key)] = value[idxs]
+ field = ("io",key) if isinstance(key, basestring) else key
+ if field not in self.default_fields:
+ self.particles[:,self.field_list.index(field)] = value[idxs]
- def assign_indices(self, function=None, **kwargs) :
+ def assign_indices(self, function=None, **kwargs):
"""
Assign unique indices to the particles. The default is to just use
numpy.arange, but any function may be supplied with keyword arguments.
@@ -126,7 +127,7 @@
else :
self.particles[:,self.index_index] = function(**kwargs)
- def map_grid_fields_to_particles(self, mapping_dict) :
+ def map_grid_fields_to_particles(self, mapping_dict):
r"""
For the fields in *mapping_dict*, map grid fields to the particles
using CIC sampling.
@@ -138,7 +139,7 @@
>>> particles.map_grid_fields_to_particles(field_map)
"""
pbar = get_pbar("Mapping fields to particles", self.num_grids)
- for i, grid in enumerate(self.ds.index.grids) :
+ for i, grid in enumerate(self.ds.index.grids):
pbar.update(i)
if self.NumberOfParticles[i] > 0:
start = self.ParticleGridIndices[i]
@@ -147,7 +148,7 @@
cube = grid.retrieve_ghost_zones(1, mapping_dict.keys())
le = np.array(grid.LeftEdge).astype(np.float64)
dims = np.array(grid.ActiveDimensions).astype(np.int32)
- for gfield, pfield in mapping_dict.items() :
+ for gfield, pfield in mapping_dict.items():
self.field_units[pfield] = cube[gfield].units
field_index = self.field_list.index(pfield)
CICSample_3(self.particles[start:end,self.posx_index],
@@ -159,13 +160,13 @@
grid.dds[0])
pbar.finish()
- def apply_to_stream(self, clobber=False) :
+ def apply_to_stream(self, clobber=False):
"""
Apply the particles to a stream dataset. If particles already exist,
and clobber=False, do not overwrite them, but add the new ones to them.
"""
grid_data = []
- for i,g in enumerate(self.ds.index.grids) :
+ for i,g in enumerate(self.ds.index.grids):
data = {}
if clobber :
data["number_of_particles"] = self.NumberOfParticles[i]
@@ -174,14 +175,14 @@
g.NumberOfParticles
grid_particles = self.get_for_grid(g)
for field in self.field_list :
- if data["number_of_particles"] > 0 :
+ if data["number_of_particles"] > 0:
# We have particles in this grid
if g.NumberOfParticles > 0 and not clobber:
# Particles already exist
- if field in self.ds.field_list :
+ if field in self.ds.field_list:
# This field already exists
prev_particles = g[field]
- else :
+ else:
# This one doesn't, set the previous particles' field
# values to zero
prev_particles = np.zeros((g.NumberOfParticles))
@@ -189,18 +190,18 @@
input_units = self.field_units[field])
data[field] = uconcatenate((prev_particles,
grid_particles[field]))
- else :
+ else:
# Particles do not already exist or we're clobbering
data[field] = grid_particles[field]
- else :
+ else:
# We don't have particles in this grid
data[field] = np.array([], dtype='float64')
grid_data.append(data)
self.ds.index.update_data(grid_data)
-class FromListParticleGenerator(ParticleGenerator) :
+class FromListParticleGenerator(ParticleGenerator):
- def __init__(self, ds, num_particles, data) :
+ def __init__(self, ds, num_particles, data):
r"""
Generate particle fields from array-like lists contained in a dict.
@@ -226,9 +227,14 @@
"""
field_list = data.keys()
- x = data.pop("particle_position_x")
- y = data.pop("particle_position_y")
- z = data.pop("particle_position_z")
+ if "particle_position_x" in data:
+ x = data.pop("particle_position_x")
+ y = data.pop("particle_position_y")
+ z = data.pop("particle_position_z")
+ elif ("io","particle_position_x") in data:
+ x = data.pop(("io", "particle_position_x"))
+ y = data.pop(("io", "particle_position_y"))
+ z = data.pop(("io", "particle_position_z"))
xcond = np.logical_or(x < ds.domain_left_edge[0],
x >= ds.domain_right_edge[0])
@@ -239,16 +245,16 @@
cond = np.logical_or(xcond, ycond)
cond = np.logical_or(zcond, cond)
- if np.any(cond) :
+ if np.any(cond):
raise ValueError("Some particles are outside of the domain!!!")
ParticleGenerator.__init__(self, ds, num_particles, field_list)
self._setup_particles(x,y,z,setup_fields=data)
-class LatticeParticleGenerator(ParticleGenerator) :
+class LatticeParticleGenerator(ParticleGenerator):
def __init__(self, ds, particles_dims, particles_left_edge,
- particles_right_edge, field_list) :
+ particles_right_edge, field_list):
r"""
Generate particles in a lattice arrangement.
@@ -308,10 +314,10 @@
self._setup_particles(xpos.flat[:], ypos.flat[:], zpos.flat[:])
-class WithDensityParticleGenerator(ParticleGenerator) :
+class WithDensityParticleGenerator(ParticleGenerator):
def __init__(self, ds, data_source, num_particles, field_list,
- density_field="density") :
+ density_field="density"):
r"""
Generate particles based on a density field.
https://bitbucket.org/yt_analysis/yt/commits/89697e917d07/
Changeset: 89697e917d07
Branch: yt
User: jzuhone
Date: 2014-10-21 12:37:33+00:00
Summary: Merge
Affected #: 1 file
diff -r 100bf9acb0b141c2b8c37eb776c6740653ecbdcb -r 89697e917d0779db8a3334c5d249d9f2294c1909 yt/frontends/fits/data_structures.py
--- a/yt/frontends/fits/data_structures.py
+++ b/yt/frontends/fits/data_structures.py
@@ -157,6 +157,8 @@
naxis4 = 1
for i, fits_file in enumerate(self.dataset._handle._fits_files):
for j, hdu in enumerate(fits_file):
+ if isinstance(hdu, _astropy.pyfits.BinTableHDU):
+ continue
if self._ensure_same_dims(hdu):
units = self._determine_image_units(hdu.header, known_units)
try:
https://bitbucket.org/yt_analysis/yt/commits/7fadbdeb3628/
Changeset: 7fadbdeb3628
Branch: yt
User: ngoldbaum
Date: 2014-10-29 17:25:07+00:00
Summary: Merged in jzuhone/yt (pull request #1278)
[BUGFIX] Bug fixes for Particle Generators
Affected #: 1 file
diff -r 320c9d8294991c2f88d8066d0b3ef348779969a5 -r 7fadbdeb3628a163be440e7ee15173942c44382c yt/utilities/particle_generator.py
--- a/yt/utilities/particle_generator.py
+++ b/yt/utilities/particle_generator.py
@@ -1,16 +1,15 @@
import numpy as np
-import h5py
from yt.utilities.lib.CICDeposit import CICSample_3
from yt.funcs import *
from yt.units.yt_array import uconcatenate, YTArray
-class ParticleGenerator(object) :
+class ParticleGenerator(object):
default_fields = [("io", "particle_position_x"),
("io", "particle_position_y"),
("io", "particle_position_z")]
- def __init__(self, ds, num_particles, field_list) :
+ def __init__(self, ds, num_particles, field_list):
"""
Base class for generating particle fields which may be applied to
streams. Normally this would not be called directly, since it doesn't
@@ -20,20 +19,21 @@
"""
self.ds = ds
self.num_particles = num_particles
- self.field_list = field_list
+ self.field_list = [("io",fd) if isinstance(fd,basestring) else fd
+ for fd in field_list]
self.field_list.append(("io", "particle_index"))
self.field_units = dict(
(('io', 'particle_position_%s' % ax), 'code_length')
for ax in 'xyz')
self.field_units['io', 'particle_index'] = ''
- try :
+ try:
self.posx_index = self.field_list.index(self.default_fields[0])
self.posy_index = self.field_list.index(self.default_fields[1])
self.posz_index = self.field_list.index(self.default_fields[2])
- except :
- raise KeyError("Field list must contain the following fields: " +
- "\n".join(self.default_fields))
+ except:
+ raise KeyError("You must specify position fields: " +
+ " ".join(["particle_position_%s" % ax for ax in "xyz"]))
self.index_index = self.field_list.index(("io", "particle_index"))
self.num_grids = self.ds.index.num_grids
@@ -45,25 +45,25 @@
self.particles = np.zeros((self.num_particles, self.num_fields),
dtype='float64')
- def has_key(self, key) :
+ def has_key(self, key):
"""
Check to see if *key* is in the particle field list.
"""
- return (key in self.field_list)
+ return key in self.field_list
- def keys(self) :
+ def keys(self):
"""
Return the list of particle fields.
"""
return self.field_list
- def __getitem__(self, key) :
+ def __getitem__(self, key):
"""
Get the field associated with key.
"""
return self.particles[:,self.field_list.index(key)]
- def __setitem__(self, key, val) :
+ def __setitem__(self, key, val):
"""
Sets a field to be some other value. Note that we assume
that the particles have been sorted by grid already, so
@@ -71,13 +71,13 @@
"""
self.particles[:,self.field_list.index(key)] = val[:]
- def __len__(self) :
+ def __len__(self):
"""
The number of particles
"""
return self.num_particles
- def get_for_grid(self, grid) :
+ def get_for_grid(self, grid):
"""
Return a dict containing all of the particle fields in the specified grid.
"""
@@ -94,7 +94,7 @@
tr[field] = self.particles[start:end, fi]
return tr
- def _setup_particles(self,x,y,z,setup_fields=None) :
+ def _setup_particles(self,x,y,z,setup_fields=None):
"""
Assigns grids to particles and sets up particle positions. *setup_fields* is
a dict of fields other than the particle positions to set up.
@@ -106,17 +106,18 @@
self.particles[:,self.posz_index] = z[idxs]
self.NumberOfParticles = np.bincount(particle_grid_inds.astype("intp"),
minlength=self.num_grids)
- if self.num_grids > 1 :
+ if self.num_grids > 1:
np.add.accumulate(self.NumberOfParticles.squeeze(),
out=self.ParticleGridIndices[1:])
- else :
+ else:
self.ParticleGridIndices[1] = self.NumberOfParticles.squeeze()
if setup_fields is not None:
for key, value in setup_fields.items():
- if key not in self.default_fields:
- self.particles[:,self.field_list.index(key)] = value[idxs]
+ field = ("io",key) if isinstance(key, basestring) else key
+ if field not in self.default_fields:
+ self.particles[:,self.field_list.index(field)] = value[idxs]
- def assign_indices(self, function=None, **kwargs) :
+ def assign_indices(self, function=None, **kwargs):
"""
Assign unique indices to the particles. The default is to just use
numpy.arange, but any function may be supplied with keyword arguments.
@@ -126,7 +127,7 @@
else :
self.particles[:,self.index_index] = function(**kwargs)
- def map_grid_fields_to_particles(self, mapping_dict) :
+ def map_grid_fields_to_particles(self, mapping_dict):
r"""
For the fields in *mapping_dict*, map grid fields to the particles
using CIC sampling.
@@ -138,7 +139,7 @@
>>> particles.map_grid_fields_to_particles(field_map)
"""
pbar = get_pbar("Mapping fields to particles", self.num_grids)
- for i, grid in enumerate(self.ds.index.grids) :
+ for i, grid in enumerate(self.ds.index.grids):
pbar.update(i)
if self.NumberOfParticles[i] > 0:
start = self.ParticleGridIndices[i]
@@ -147,7 +148,7 @@
cube = grid.retrieve_ghost_zones(1, mapping_dict.keys())
le = np.array(grid.LeftEdge).astype(np.float64)
dims = np.array(grid.ActiveDimensions).astype(np.int32)
- for gfield, pfield in mapping_dict.items() :
+ for gfield, pfield in mapping_dict.items():
self.field_units[pfield] = cube[gfield].units
field_index = self.field_list.index(pfield)
CICSample_3(self.particles[start:end,self.posx_index],
@@ -159,13 +160,13 @@
grid.dds[0])
pbar.finish()
- def apply_to_stream(self, clobber=False) :
+ def apply_to_stream(self, clobber=False):
"""
Apply the particles to a stream dataset. If particles already exist,
and clobber=False, do not overwrite them, but add the new ones to them.
"""
grid_data = []
- for i,g in enumerate(self.ds.index.grids) :
+ for i,g in enumerate(self.ds.index.grids):
data = {}
if clobber :
data["number_of_particles"] = self.NumberOfParticles[i]
@@ -174,14 +175,14 @@
g.NumberOfParticles
grid_particles = self.get_for_grid(g)
for field in self.field_list :
- if data["number_of_particles"] > 0 :
+ if data["number_of_particles"] > 0:
# We have particles in this grid
if g.NumberOfParticles > 0 and not clobber:
# Particles already exist
- if field in self.ds.field_list :
+ if field in self.ds.field_list:
# This field already exists
prev_particles = g[field]
- else :
+ else:
# This one doesn't, set the previous particles' field
# values to zero
prev_particles = np.zeros((g.NumberOfParticles))
@@ -189,18 +190,18 @@
input_units = self.field_units[field])
data[field] = uconcatenate((prev_particles,
grid_particles[field]))
- else :
+ else:
# Particles do not already exist or we're clobbering
data[field] = grid_particles[field]
- else :
+ else:
# We don't have particles in this grid
data[field] = np.array([], dtype='float64')
grid_data.append(data)
self.ds.index.update_data(grid_data)
-class FromListParticleGenerator(ParticleGenerator) :
+class FromListParticleGenerator(ParticleGenerator):
- def __init__(self, ds, num_particles, data) :
+ def __init__(self, ds, num_particles, data):
r"""
Generate particle fields from array-like lists contained in a dict.
@@ -226,9 +227,14 @@
"""
field_list = data.keys()
- x = data.pop(("io", "particle_position_x"))
- y = data.pop(("io", "particle_position_y"))
- z = data.pop(("io", "particle_position_z"))
+ if "particle_position_x" in data:
+ x = data.pop("particle_position_x")
+ y = data.pop("particle_position_y")
+ z = data.pop("particle_position_z")
+ elif ("io","particle_position_x") in data:
+ x = data.pop(("io", "particle_position_x"))
+ y = data.pop(("io", "particle_position_y"))
+ z = data.pop(("io", "particle_position_z"))
xcond = np.logical_or(x < ds.domain_left_edge[0],
x >= ds.domain_right_edge[0])
@@ -239,16 +245,16 @@
cond = np.logical_or(xcond, ycond)
cond = np.logical_or(zcond, cond)
- if np.any(cond) :
+ if np.any(cond):
raise ValueError("Some particles are outside of the domain!!!")
ParticleGenerator.__init__(self, ds, num_particles, field_list)
self._setup_particles(x,y,z,setup_fields=data)
-class LatticeParticleGenerator(ParticleGenerator) :
+class LatticeParticleGenerator(ParticleGenerator):
def __init__(self, ds, particles_dims, particles_left_edge,
- particles_right_edge, field_list) :
+ particles_right_edge, field_list):
r"""
Generate particles in a lattice arrangement.
@@ -308,10 +314,10 @@
self._setup_particles(xpos.flat[:], ypos.flat[:], zpos.flat[:])
-class WithDensityParticleGenerator(ParticleGenerator) :
+class WithDensityParticleGenerator(ParticleGenerator):
def __init__(self, ds, data_source, num_particles, field_list,
- density_field="density") :
+ density_field="density"):
r"""
Generate particles based on a density field.
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