[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