[yt-svn] commit/yt: chummels: Merged in jzuhone/yt (pull request #1638)

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Thu Jul 16 09:28:38 PDT 2015


1 new commit in yt:

https://bitbucket.org/yt_analysis/yt/commits/ad366f1dd932/
Changeset:   ad366f1dd932
Branch:      yt
User:        chummels
Date:        2015-07-16 16:28:25+00:00
Summary:     Merged in jzuhone/yt (pull request #1638)

[bugfix] Bugfixes for Python 3
Affected #:  23 files

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/analyzing/analysis_modules/SZ_projections.ipynb
--- a/doc/source/analyzing/analysis_modules/SZ_projections.ipynb
+++ b/doc/source/analyzing/analysis_modules/SZ_projections.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:2cc168b2c1737c67647aa29892c0213e7a58233fa53c809f9cd975a4306e9bc8"
+  "signature": "sha256:487383ec23a092310522ec25bd02ad2eb16a3402c5ed3d2b103d33fe17697b3c"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -70,6 +70,13 @@
      ]
     },
     {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "<font color='red'>**NOTE**</font>: Currently, use of the SZpack library to create S-Z projections in yt is limited to Python 2.x."
+     ]
+    },
+    {
      "cell_type": "heading",
      "level": 2,
      "metadata": {},

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/analyzing/fields.rst
--- a/doc/source/analyzing/fields.rst
+++ b/doc/source/analyzing/fields.rst
@@ -174,7 +174,7 @@
 
 Field plugins can be loaded dynamically, although at present this is not
 particularly useful.  Plans for extending field plugins to dynamically load, to
-enable simple definition of common types (gradient, divergence, etc), and to
+enable simple definition of common types (divergence, curl, etc), and to
 more verbosely describe available fields, have been put in place for future
 versions.
 

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/cookbook/fit_spectrum.py
--- a/doc/source/cookbook/fit_spectrum.py
+++ b/doc/source/cookbook/fit_spectrum.py
@@ -10,10 +10,10 @@
 def _OVI_number_density(field, data):
     return data['H_number_density']*2.0
 
-# Define a function that will accept a ds and add the new field 
+# Define a function that will accept a ds and add the new field
 # defined above.  This will be given to the LightRay below.
 def setup_ds(ds):
-    ds.add_field("O_p5_number_density", 
+    ds.add_field(("gas","O_p5_number_density"),
                  function=_OVI_number_density,
                  units="cm**-3")
 
@@ -62,7 +62,7 @@
 
 # Get all fields that need to be added to the light ray
 fields = ['temperature']
-for s, params in species_dicts.iteritems():
+for s, params in species_dicts.items():
     fields.append(params['field'])
 
 # Make a light ray, and set njobs to -1 to use one core
@@ -79,7 +79,7 @@
 sp = AbsorptionSpectrum(900.0, 1400.0, 50000)
 
 # Iterate over species
-for s, params in species_dicts.iteritems():
+for s, params in species_dicts.items():
     # Iterate over transitions for a single species
     for i in range(params['numLines']):
         # Add the lines to the spectrum

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/cookbook/free_free_field.py
--- a/doc/source/cookbook/free_free_field.py
+++ /dev/null
@@ -1,105 +0,0 @@
-### THIS RECIPE IS CURRENTLY BROKEN IN YT-3.0
-### DO NOT TRUST THIS RECIPE UNTIL THIS LINE IS REMOVED
-
-import numpy as np
-import yt
-# Need to grab the proton mass from the constants database
-from yt.utilities.physical_constants import mp
-
-exit()
-# Define the emission field
-
-keVtoerg = 1.602e-9  # Convert energy in keV to energy in erg
-KtokeV = 8.617e-08  # Convert degrees Kelvin to degrees keV
-sqrt3 = np.sqrt(3.)
-expgamma = 1.78107241799  # Exponential of Euler's constant
-
-
-def _FreeFree_Emission(field, data):
-
-    if data.has_field_parameter("Z"):
-        Z = data.get_field_parameter("Z")
-    else:
-        Z = 1.077  # Primordial H/He plasma
-
-    if data.has_field_parameter("mue"):
-        mue = data.get_field_parameter("mue")
-    else:
-        mue = 1./0.875  # Primordial H/He plasma
-
-    if data.has_field_parameter("mui"):
-        mui = data.get_field_parameter("mui")
-    else:
-        mui = 1./0.8125  # Primordial H/He plasma
-
-    if data.has_field_parameter("Ephoton"):
-        Ephoton = data.get_field_parameter("Ephoton")
-    else:
-        Ephoton = 1.0  # in keV
-
-    if data.has_field_parameter("photon_emission"):
-        photon_emission = data.get_field_parameter("photon_emission")
-    else:
-        photon_emission = False  # Flag for energy or photon emission
-
-    n_e = data["density"]/(mue*mp)
-    n_i = data["density"]/(mui*mp)
-    kT = data["temperature"]*KtokeV
-
-    # Compute the Gaunt factor
-
-    g_ff = np.zeros(kT.shape)
-    g_ff[Ephoton/kT > 1.] = np.sqrt((3./np.pi)*kT[Ephoton/kT > 1.]/Ephoton)
-    g_ff[Ephoton/kT < 1.] = (sqrt3/np.pi)*np.log((4./expgamma) *
-                                                 kT[Ephoton/kT < 1.]/Ephoton)
-
-    eps_E = 1.64e-20*Z*Z*n_e*n_i/np.sqrt(data["temperature"]) * \
-        np.exp(-Ephoton/kT)*g_ff
-
-    if photon_emission:
-        eps_E /= (Ephoton*keVtoerg)
-
-    return eps_E
-
-yt.add_field("FreeFree_Emission", function=_FreeFree_Emission)
-
-# Define the luminosity derived quantity
-def _FreeFreeLuminosity(data):
-    return (data["FreeFree_Emission"]*data["cell_volume"]).sum()
-
-
-def _combFreeFreeLuminosity(data, luminosity):
-    return luminosity.sum()
-
-yt.add_quantity("FreeFree_Luminosity", function=_FreeFreeLuminosity,
-                combine_function=_combFreeFreeLuminosity, n_ret=1)
-
-ds = yt.load("GasSloshing/sloshing_nomag2_hdf5_plt_cnt_0150")
-
-sphere = ds.sphere(ds.domain_center, (100., "kpc"))
-
-# Print out the total luminosity at 1 keV for the sphere
-
-print("L_E (1 keV, primordial) = ", sphere.quantities["FreeFree_Luminosity"]())
-
-# The defaults for the field assume a H/He primordial plasma.
-# Let's set the appropriate parameters for a pure hydrogen plasma.
-
-sphere.set_field_parameter("mue", 1.0)
-sphere.set_field_parameter("mui", 1.0)
-sphere.set_field_parameter("Z", 1.0)
-
-print("L_E (1 keV, pure hydrogen) = ", sphere.quantities["FreeFree_Luminosity"]())
-
-# Now let's print the luminosity at an energy of E = 10 keV
-
-sphere.set_field_parameter("Ephoton", 10.0)
-
-print("L_E (10 keV, pure hydrogen) = ", sphere.quantities["FreeFree_Luminosity"]())
-
-# Finally, let's set the flag for photon emission, to get the total number
-# of photons emitted at this energy:
-
-sphere.set_field_parameter("photon_emission", True)
-
-print("L_ph (10 keV, pure hydrogen) = ", sphere.quantities["FreeFree_Luminosity"]())

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/cookbook/simulation_analysis.py
--- a/doc/source/cookbook/simulation_analysis.py
+++ b/doc/source/cookbook/simulation_analysis.py
@@ -2,11 +2,11 @@
 yt.enable_parallelism()
 import collections
 
-# Enable parallelism in the script (assuming it was called with 
+# Enable parallelism in the script (assuming it was called with
 # `mpirun -np <n_procs>` )
 yt.enable_parallelism()
 
-# By using wildcards such as ? and * with the load command, we can load up a 
+# By using wildcards such as ? and * with the load command, we can load up a
 # Time Series containing all of these datasets simultaneously.
 ts = yt.load('enzo_tiny_cosmology/DD????/DD????')
 
@@ -16,7 +16,7 @@
 # Create an empty dictionary
 data = {}
 
-# Iterate through each dataset in the Time Series (using piter allows it 
+# Iterate through each dataset in the Time Series (using piter allows it
 # to happen in parallel automatically across available processors)
 for ds in ts.piter():
     ad = ds.all_data()
@@ -31,6 +31,6 @@
 # Print out all the values we calculated.
 print("Dataset      Redshift        Density Min      Density Max")
 print("---------------------------------------------------------")
-for key, val in od.iteritems(): 
+for key, val in od.items(): 
     print("%s       %05.3f          %5.3g g/cm^3   %5.3g g/cm^3" % \
            (key, val[1], val[0][0], val[0][1]))

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf doc/source/cookbook/time_series.py
--- a/doc/source/cookbook/time_series.py
+++ b/doc/source/cookbook/time_series.py
@@ -12,7 +12,7 @@
 
 storage = {}
 
-# By using the piter() function, we can iterate on every dataset in 
+# By using the piter() function, we can iterate on every dataset in
 # the TimeSeries object.  By using the storage keyword, we can populate
 # a dictionary where the dataset is the key, and sto.result is the value
 # for later use when the loop is complete.
@@ -25,13 +25,13 @@
     sphere = ds.sphere("c", (100., "kpc"))
     # Calculate the entropy within that sphere
     entr = sphere["entropy"].sum()
-    # Store the current time and sphere entropy for this dataset in our 
+    # Store the current time and sphere entropy for this dataset in our
     # storage dictionary as a tuple
     store.result = (ds.current_time.in_units('Gyr'), entr)
 
 # Convert the storage dictionary values to a Nx2 array, so the can be easily
 # plotted
-arr = np.array(storage.values())
+arr = np.array(list(storage.values()))
 
 # Plot up the results: time versus entropy
 plt.semilogy(arr[:,0], arr[:,1], 'r-')

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/analysis_modules/absorption_spectrum/absorption_spectrum_fit.py
--- a/yt/analysis_modules/absorption_spectrum/absorption_spectrum_fit.py
+++ b/yt/analysis_modules/absorption_spectrum/absorption_spectrum_fit.py
@@ -1011,7 +1011,7 @@
 
     """
     f = h5py.File(file_name, 'w')
-    for ion, params in lineDic.iteritems():
+    for ion, params in lineDic.items():
         f.create_dataset("{0}/N".format(ion),data=params['N'])
         f.create_dataset("{0}/b".format(ion),data=params['b'])
         f.create_dataset("{0}/z".format(ion),data=params['z'])

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/analysis_modules/cosmological_observation/light_cone/light_cone.py
--- a/yt/analysis_modules/cosmological_observation/light_cone/light_cone.py
+++ b/yt/analysis_modules/cosmological_observation/light_cone/light_cone.py
@@ -343,7 +343,7 @@
             del output["object"]
 
         # Combine results from each slice.
-        all_slices = all_storage.keys()
+        all_slices = list(all_storage.keys())
         all_slices.sort()
         for my_slice in all_slices:
             if save_slice_images:

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/analysis_modules/halo_finding/halo_objects.py
--- a/yt/analysis_modules/halo_finding/halo_objects.py
+++ b/yt/analysis_modules/halo_finding/halo_objects.py
@@ -22,6 +22,7 @@
 import glob
 import os
 import os.path as path
+from functools import cmp_to_key
 from collections import defaultdict
 from yt.extern.six import add_metaclass
 from yt.extern.six.moves import zip as izip
@@ -39,7 +40,7 @@
     TINY
 from yt.utilities.physical_ratios import \
      rho_crit_g_cm3_h2
-    
+
 from .hop.EnzoHop import RunHOP
 from .fof.EnzoFOF import RunFOF
 
@@ -138,9 +139,9 @@
         c[2] = self["particle_position_z"] - self.ds.domain_left_edge[2]
         com = []
         for i in range(3):
-            # A halo is likely periodic around a boundary if the distance 
+            # A halo is likely periodic around a boundary if the distance
             # between the max and min particle
-            # positions are larger than half the box. 
+            # positions are larger than half the box.
             # So skip the rest if the converse is true.
             # Note we might make a change here when periodicity-handling is
             # fully implemented.
@@ -444,7 +445,7 @@
         Msun2g = mass_sun_cgs
         rho_crit = rho_crit * ((1.0 + z) ** 3.0)
         # Get some pertinent information about the halo.
-        self.mass_bins = self.ds.arr(np.zeros(self.bin_count + 1, 
+        self.mass_bins = self.ds.arr(np.zeros(self.bin_count + 1,
                                               dtype='float64'),'Msun')
         dist = np.empty(thissize, dtype='float64')
         cen = self.center_of_mass()
@@ -475,7 +476,7 @@
         self.overdensity = self.mass_bins * Msun2g / \
             (4./3. * math.pi * rho_crit * \
             (self.radial_bins )**3.0)
-        
+
     def _get_ellipsoid_parameters_basic(self):
         np.seterr(all='ignore')
         # check if there are 4 particles to form an ellipsoid
@@ -501,7 +502,7 @@
         for axis in range(np.size(DW)):
             cases = np.array([position[axis],
                                 position[axis] + DW[axis],
-                              position[axis] - DW[axis]])        
+                              position[axis] - DW[axis]])
             # pick out the smallest absolute distance from com
             position[axis] = np.choose(np.abs(cases).argmin(axis=0), cases)
         # find the furthest particle's index
@@ -571,7 +572,7 @@
     _name = "RockstarHalo"
     # See particle_mask
     _radjust = 4.
-    
+
     def maximum_density(self):
         r"""Not implemented."""
         return -1
@@ -635,11 +636,11 @@
     def get_ellipsoid_parameters(self):
         r"""Calculate the parameters that describe the ellipsoid of
         the particles that constitute the halo.
-        
+
         Parameters
         ----------
         None
-        
+
         Returns
         -------
         tuple : (cm, mag_A, mag_B, mag_C, e0_vector, tilt)
@@ -650,7 +651,7 @@
               #. mag_C as a float.
               #. e0_vector as an array.
               #. tilt as a float.
-        
+
         Examples
         --------
         >>> params = halos[0].get_ellipsoid_parameters()
@@ -662,22 +663,22 @@
             basic_parameters[4], basic_parameters[5]]), basic_parameters[6]]
         toreturn.extend(updated)
         return tuple(toreturn)
-    
+
     def get_ellipsoid(self):
         r"""Returns an ellipsoidal data object.
-        
+
         This will generate a new, empty ellipsoidal data object for this
         halo.
-        
+
         Parameters
         ----------
         None.
-        
+
         Returns
         -------
         ellipsoid : `yt.data_objects.data_containers.YTEllipsoidBase`
             The ellipsoidal data object.
-        
+
         Examples
         --------
         >>> ell = halos[0].get_ellipsoid()
@@ -686,7 +687,7 @@
         ell = self.data.ds.ellipsoid(ep[0], ep[1], ep[2], ep[3],
             ep[4], ep[5])
         return ell
-    
+
 class HOPHalo(Halo):
     _name = "HOPHalo"
     pass
@@ -763,14 +764,14 @@
             self.size, key)
         if field_data is not None:
             if key == 'particle_index':
-                #this is an index for turning data sorted by particle index 
+                #this is an index for turning data sorted by particle index
                 #into the same order as the fields on disk
                 self._pid_sort = field_data.argsort().argsort()
             #convert to YTArray using the data from disk
             if key == 'particle_mass':
                 field_data = self.ds.arr(field_data, 'Msun')
             else:
-                field_data = self.ds.arr(field_data, 
+                field_data = self.ds.arr(field_data,
                     self.ds._get_field_info('unknown',key).units)
             self._saved_fields[key] = field_data
             return self._saved_fields[key]
@@ -856,21 +857,21 @@
             basic_parameters[4], basic_parameters[5]]), basic_parameters[6]]
         toreturn.extend(updated)
         return tuple(toreturn)
-    
+
     def get_ellipsoid(self):
-        r"""Returns an ellipsoidal data object.        
+        r"""Returns an ellipsoidal data object.
         This will generate a new, empty ellipsoidal data object for this
         halo.
-        
+
         Parameters
         ----------
         None.
-        
+
         Returns
         -------
         ellipsoid : `yt.data_objects.data_containers.YTEllipsoidBase`
             The ellipsoidal data object.
-        
+
         Examples
         --------
         >>> ell = halos[0].get_ellipsoid()
@@ -947,11 +948,11 @@
     def maximum_density(self):
         r"""Undefined for text halos."""
         return -1
-    
+
     def maximum_density_location(self):
         r"""Undefined, default to CoM"""
         return self.center_of_mass()
-    
+
     def get_size(self):
         # Have to just get it from the sphere.
         return self["particle_position_x"].size
@@ -964,8 +965,8 @@
     def __init__(self, data_source, dm_only=True, redshift=-1):
         """
         Run hop on *data_source* with a given density *threshold*.  If
-        *dm_only* is True (default), only run it on the dark matter particles, 
-        otherwise on all particles.  Returns an iterable collection of 
+        *dm_only* is True (default), only run it on the dark matter particles,
+        otherwise on all particles.  Returns an iterable collection of
         *HopGroup* items.
         """
         self._data_source = data_source
@@ -1051,7 +1052,7 @@
         ellipsoid_data : bool.
             Whether to print the ellipsoidal information to the file.
             Default = False.
-        
+
         Examples
         --------
         >>> halos.write_out("HopAnalysis.out")
@@ -1144,10 +1145,10 @@
     _halo_dt = np.dtype([('id', np.int64), ('pos', (np.float32, 6)),
         ('corevel', (np.float32, 3)), ('bulkvel', (np.float32, 3)),
         ('m', np.float32), ('r', np.float32), ('child_r', np.float32),
-        ('vmax_r', np.float32), 
+        ('vmax_r', np.float32),
         ('mgrav', np.float32), ('vmax', np.float32),
         ('rvmax', np.float32), ('rs', np.float32),
-        ('klypin_rs', np.float32), 
+        ('klypin_rs', np.float32),
         ('vrms', np.float32), ('J', (np.float32, 3)),
         ('energy', np.float32), ('spin', np.float32),
         ('alt_m', (np.float32, 4)), ('Xoff', np.float32),
@@ -1221,9 +1222,9 @@
         """
         Read the out_*.list text file produced
         by Rockstar into memory."""
-        
+
         ds = self.ds
-        # In order to read the binary data, we need to figure out which 
+        # In order to read the binary data, we need to figure out which
         # binary files belong to this output.
         basedir = os.path.dirname(self.out_list)
         s = self.out_list.split('_')[-1]
@@ -1523,12 +1524,14 @@
                 id += 1
 
         def haloCmp(h1, h2):
+            def cmp(a, b):
+                return (a > b) - (a < b)
             c = cmp(h1.total_mass(), h2.total_mass())
             if c != 0:
                 return -1 * c
             if c == 0:
                 return cmp(h1.center_of_mass()[0], h2.center_of_mass()[0])
-        self._groups.sort(haloCmp)
+        self._groups.sort(key=cmp_to_key(haloCmp))
         sorted_max_dens = {}
         for i, halo in enumerate(self._groups):
             if halo.id in self._max_dens:
@@ -1873,7 +1876,7 @@
 
 class LoadTextHaloes(GenericHaloFinder, TextHaloList):
     r"""Load a text file of halos.
-    
+
     Like LoadHaloes, but when all that is available is a plain
     text file. This assumes the text file has the 3-positions of halos
     along with a radius. The halo objects created are spheres.
@@ -1882,7 +1885,7 @@
     ----------
     fname : String
         The name of the text file to read in.
-    
+
     columns : dict
         A dict listing the column name : column number pairs for data
         in the text file. It is zero-based (like Python).
@@ -1890,7 +1893,7 @@
         Any column name outside of ['x', 'y', 'z', 'r'] will be attached
         to each halo object in the supplementary dict 'supp'. See
         example.
-    
+
     comment : String
         If the first character of a line is equal to this, the line is
         skipped. Default = "#".
@@ -1915,7 +1918,7 @@
     Parameters
     ----------
     fname : String
-        The name of the Rockstar file to read in. Default = 
+        The name of the Rockstar file to read in. Default =
         "rockstar_halos/out_0.list'.
 
     Examples

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/analysis_modules/level_sets/clump_handling.py
--- a/yt/analysis_modules/level_sets/clump_handling.py
+++ b/yt/analysis_modules/level_sets/clump_handling.py
@@ -20,7 +20,8 @@
 from yt.fields.derived_field import \
     ValidateSpatial
 from yt.funcs import mylog
-    
+from yt.extern.six import string_types
+
 from .clump_info_items import \
     clump_info_registry
 from .clump_validators import \
@@ -268,7 +269,7 @@
 
 def write_clump_index(clump, level, fh):
     top = False
-    if not isinstance(fh, file):
+    if isinstance(fh, string_types):
         fh = open(fh, "w")
         top = True
     for q in range(level):
@@ -285,7 +286,7 @@
 
 def write_clumps(clump, level, fh):
     top = False
-    if not isinstance(fh, file):
+    if isinstance(fh, string_types):
         fh = open(fh, "w")
         top = True
     if ((clump.children is None) or (len(clump.children) == 0)):

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/data_objects/time_series.py
--- a/yt/data_objects/time_series.py
+++ b/yt/data_objects/time_series.py
@@ -130,7 +130,7 @@
     def __new__(cls, outputs, *args, **kwargs):
         if isinstance(outputs, string_types):
             outputs = get_filenames_from_glob_pattern(outputs)
-        ret = super(DatasetSeries, cls).__new__(cls, *args, **kwargs)
+        ret = super(DatasetSeries, cls).__new__(cls)
         try:
             ret._pre_outputs = outputs[:]
         except TypeError:

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/chombo/io.py
--- a/yt/frontends/chombo/io.py
+++ b/yt/frontends/chombo/io.py
@@ -76,7 +76,7 @@
         for key, val in self._handle.attrs.items():
             if key.startswith('component_'):
                 comp_number = int(re.match('component_(\d+)', key).groups()[0])
-                field_dict[val] = comp_number
+                field_dict[val.decode('utf-8')] = comp_number
         self._field_dict = field_dict
         return self._field_dict
 

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/fits/io.py
--- a/yt/frontends/fits/io.py
+++ b/yt/frontends/fits/io.py
@@ -32,7 +32,7 @@
     def _read_particle_coords(self, chunks, ptf):
         pdata = self.ds._handle[self.ds.first_image].data
         assert(len(ptf) == 1)
-        ptype = ptf.keys()[0]
+        ptype = list(ptf.keys())[0]
         x = np.asarray(pdata.field("X"), dtype="=f8")
         y = np.asarray(pdata.field("Y"), dtype="=f8")
         z = np.ones(x.shape)
@@ -43,7 +43,7 @@
     def _read_particle_fields(self, chunks, ptf, selector):
         pdata = self.ds._handle[self.ds.first_image].data
         assert(len(ptf) == 1)
-        ptype = ptf.keys()[0]
+        ptype = list(ptf.keys())[0]
         field_list = ptf[ptype]
         x = np.asarray(pdata.field("X"), dtype="=f8")
         y = np.asarray(pdata.field("Y"), dtype="=f8")

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/fits/misc.py
--- a/yt/frontends/fits/misc.py
+++ b/yt/frontends/fits/misc.py
@@ -12,14 +12,18 @@
 
 import numpy as np
 import base64
-from yt.extern.six.moves import StringIO
+from yt.extern.six import PY3
 from yt.fields.derived_field import ValidateSpatial
 from yt.utilities.on_demand_imports import _astropy
 from yt.funcs import mylog, get_image_suffix
 from yt.visualization._mpl_imports import FigureCanvasAgg
 from yt.units.yt_array import YTQuantity, YTArray
 from yt.utilities.fits_image import FITSImageData
-
+if PY3:
+    from io import BytesIO as IO
+else:
+    from yt.extern.six.moves import StringIO as IO
+    
 import os
 
 def _make_counts(emin, emax):
@@ -255,12 +259,12 @@
 
     def _repr_html_(self):
         ret = ''
-        for k, v in self.plots.iteritems():
+        for k, v in self.plots.items():
             canvas = FigureCanvasAgg(v)
-            f = StringIO()
+            f = IO()
             canvas.print_figure(f)
             f.seek(0)
-            img = base64.b64encode(f.read())
+            img = base64.b64encode(f.read()).decode()
             ret += r'<img style="max-width:100%%;max-height:100%%;" ' \
                    r'src="data:image/png;base64,%s"><br>' % img
         return ret

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/halo_catalog/io.py
--- a/yt/frontends/halo_catalog/io.py
+++ b/yt/frontends/halo_catalog/io.py
@@ -39,7 +39,7 @@
         data_files = set([])
         # Only support halo reading for now.
         assert(len(ptf) == 1)
-        assert(ptf.keys()[0] == "halos")
+        assert(list(ptf.keys())[0] == "halos")
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)
@@ -57,7 +57,7 @@
         data_files = set([])
         # Only support halo reading for now.
         assert(len(ptf) == 1)
-        assert(ptf.keys()[0] == "halos")
+        assert(list(ptf.keys())[0] == "halos")
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/owls/io.py
--- a/yt/frontends/owls/io.py
+++ b/yt/frontends/owls/io.py
@@ -70,7 +70,7 @@
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)
-        for data_file in sorted(data_files):
+        for data_file in sorted(data_files, key=lambda x: x.filename):
             f = _get_h5_handle(data_file.filename)
             # This double-reads
             for ptype, field_list in sorted(ptf.items()):
@@ -88,7 +88,7 @@
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)
-        for data_file in sorted(data_files):
+        for data_file in sorted(data_files, key=lambda x: x.filename):
             f = _get_h5_handle(data_file.filename)
             for ptype, field_list in sorted(ptf.items()):
                 if data_file.total_particles[ptype] == 0:

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/ramses/io.py
--- a/yt/frontends/ramses/io.py
+++ b/yt/frontends/ramses/io.py
@@ -20,7 +20,12 @@
     BaseIOHandler
 from yt.utilities.logger import ytLogger as mylog
 import yt.utilities.fortran_utils as fpu
-from yt.extern.six.moves import cStringIO
+from yt.extern.six import PY3
+
+if PY3:
+    from io import BytesIO as IO
+else:
+    from cStringIO import StringIO as IO
 
 class IOHandlerRAMSES(BaseIOHandler):
     _dataset_type = "ramses"
@@ -37,7 +42,7 @@
                 f = open(subset.domain.hydro_fn, "rb")
                 # This contains the boundary information, so we skim through
                 # and pick off the right vectors
-                content = cStringIO(f.read())
+                content = IO(f.read())
                 rv = subset.fill(content, fields, selector)
                 for ft, f in fields:
                     d = rv.pop(f)

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/frontends/rockstar/io.py
--- a/yt/frontends/rockstar/io.py
+++ b/yt/frontends/rockstar/io.py
@@ -28,6 +28,7 @@
 from yt.utilities.lib.geometry_utils import compute_morton
 
 from yt.geometry.oct_container import _ORDER_MAX
+from operator import attrgetter
 
 class IOHandlerRockstarBinary(BaseIOHandler):
     _dataset_type = "rockstar_binary"
@@ -45,12 +46,11 @@
         data_files = set([])
         # Only support halo reading for now.
         assert(len(ptf) == 1)
-        assert(ptf.keys()[0] == "halos")
+        assert(list(ptf.keys())[0] == "halos")
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)
-        
-        for data_file in sorted(data_files):
+        for data_file in sorted(data_files,key=attrgetter("filename")):
             pcount = data_file.header['num_halos']
             with open(data_file.filename, "rb") as f:
                 f.seek(data_file._position_offset, os.SEEK_SET)
@@ -66,11 +66,11 @@
         data_files = set([])
         # Only support halo reading for now.
         assert(len(ptf) == 1)
-        assert(ptf.keys()[0] == "halos")
+        assert(list(ptf.keys())[0] == "halos")
         for chunk in chunks:
             for obj in chunk.objs:
                 data_files.update(obj.data_files)
-        for data_file in sorted(data_files):
+        for data_file in sorted(data_files,key=attrgetter("filename")):
             pcount = data_file.header['num_halos']
             with open(data_file.filename, "rb") as f:
                 for ptype, field_list in sorted(ptf.items()):

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/utilities/fits_image.py
--- a/yt/utilities/fits_image.py
+++ b/yt/utilities/fits_image.py
@@ -122,7 +122,7 @@
         for key in fields:
             if key not in exclude_fields:
                 if hasattr(img_data[key], "units"):
-                    self.field_units[key] = str(img_data[key].units)
+                    self.field_units[key] = img_data[key].units
                 else:
                     self.field_units[key] = "dimensionless"
                 mylog.info("Making a FITS image of field %s" % key)

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/visualization/color_maps.py
--- a/yt/visualization/color_maps.py
+++ b/yt/visualization/color_maps.py
@@ -11,7 +11,6 @@
 # The full license is in the file COPYING.txt, distributed with this software.
 #-----------------------------------------------------------------------------
 import numpy as np
-from yt.extern.six.moves import zip as izip
 
 import matplotlib
 import matplotlib.colors as cc
@@ -86,9 +85,9 @@
                 194.5*_vs**2.88+99.72*np.exp(-77.24*(_vs-0.742)**2.0)
               + 45.40*_vs**0.089+10.0)/255.0
 
-cdict = {'red':zip(_vs,_kamae_red,_kamae_red),
-         'green':zip(_vs,_kamae_grn,_kamae_grn),
-         'blue':zip(_vs,_kamae_blu,_kamae_blu)}
+cdict = {'red':np.transpose([_vs,_kamae_red,_kamae_red]),
+         'green':np.transpose([_vs,_kamae_grn,_kamae_grn]),
+         'blue':np.transpose([_vs,_kamae_blu,_kamae_blu])}
 add_cmap('kamae', cdict)
 
 # This one is a simple black & green map
@@ -151,9 +150,9 @@
 _vs = np.linspace(0,1,256)
 for k,v in list(_cm.color_map_luts.items()):
     if k not in yt_colormaps and k not in mcm.cmap_d:
-        cdict = { 'red': zip(_vs,v[0],v[0]),
-                  'green': zip(_vs,v[1],v[1]),
-                  'blue': zip(_vs,v[2],v[2]) }
+        cdict = { 'red': np.transpose([_vs,v[0],v[0]]),
+                  'green': np.transpose([_vs,v[1],v[1]]),
+                  'blue': np.transpose([_vs,v[2],v[2]]) }
         add_cmap(k, cdict)
 
 def _extract_lookup_table(cmap_name):
@@ -393,9 +392,9 @@
     #   Second number is the (0..1) number to interpolate to when coming *from below*
     #   Third number is the (0..1) number to interpolate to when coming *from above*
     _vs = np.linspace(0,1,256)
-    cdict = {'red':   zip(_vs, cmap[:,0], cmap[:,0]),
-             'green': zip(_vs, cmap[:,1], cmap[:,1]),
-             'blue':  zip(_vs, cmap[:,2], cmap[:,2])}
+    cdict = {'red':   np.transpose([_vs, cmap[:,0], cmap[:,0]]),
+             'green': np.transpose([_vs, cmap[:,1], cmap[:,1]]),
+             'blue':  np.transpose([_vs, cmap[:,2], cmap[:,2]])}
 
     if name is not None:
         add_cmap(name, cdict)

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/visualization/fixed_resolution.py
--- a/yt/visualization/fixed_resolution.py
+++ b/yt/visualization/fixed_resolution.py
@@ -27,7 +27,6 @@
 import numpy as np
 import weakref
 import re
-import string
 
 class FixedResolutionBuffer(object):
     r"""
@@ -178,13 +177,13 @@
             pstr = m.string[m.start()+1:m.end()-1]
             segments = fname.split("_")
             for i,s in enumerate(segments):
-                segments[i] = string.capitalize(s)
+                segments[i] = s.capitalize()
                 if s == pstr:
                     ipstr = i
             element = segments[ipstr-1]
             roman = pnum2rom[pstr[1:]]
             label = element + '\ ' + roman + '\ ' + \
-                string.join(segments[ipstr+1:], '\ ')
+                '\ '.join(segments[ipstr+1:])
         else:
             label = fname
         return label

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/visualization/image_writer.py
--- a/yt/visualization/image_writer.py
+++ b/yt/visualization/image_writer.py
@@ -170,7 +170,7 @@
         bitmap_array = np.concatenate([bitmap_array.astype('uint8'),
                                        alpha_channel], axis=-1)
     if transpose:
-        bitmap_array = bitmap_array.swapaxes(0,1)
+        bitmap_array = bitmap_array.swapaxes(0,1).copy(order="C")
     if filename is not None:
         pw.write_png(bitmap_array, filename)
     else:

diff -r b7b8cdbad2505dea1391bddbe3ab6e5d65f2e9b6 -r ad366f1dd932031937b1a7b59937fa3f0a278ecf yt/visualization/profile_plotter.py
--- a/yt/visualization/profile_plotter.py
+++ b/yt/visualization/profile_plotter.py
@@ -222,7 +222,7 @@
             plot_spec = [plot_spec.copy() for p in profiles]
 
         ProfilePlot._initialize_instance(self, profiles, label, plot_spec, y_log)
-
+        
     @validate_plot
     def save(self, name=None, suffix=None):
         r"""
@@ -530,15 +530,20 @@
                 xma = xmax
             extrema = {p.x_field: ((xmi, str(p.x.units)), (xma, str(p.x.units)))}
             units = {p.x_field: str(p.x.units)}
+            if self.x_log is None:
+                logs = None
+            else:
+                logs = {p.x_field: self.x_log}
             for field in p.field_map.values():
                 units[field] = str(p.field_data[field].units)
             self.profiles[i] = \
                 create_profile(p.data_source, p.x_field,
                                n_bins=len(p.x_bins)-1,
-                               fields=p.field_map.values(),
+                               fields=list(p.field_map.values()),
                                weight_field=p.weight_field,
                                accumulation=p.accumulation,
                                fractional=p.fractional,
+                               logs=logs,
                                extrema=extrema, units=units)
         return self
 
@@ -1146,6 +1151,14 @@
         extrema = {p.x_field: ((xmin, str(p.x.units)), (xmax, str(p.x.units))),
                    p.y_field: ((p.y_bins.min(), str(p.y.units)),
                                (p.y_bins.max(), str(p.y.units)))}
+        if self.x_log is not None or self.y_log is not None:
+            logs = {}
+        else:
+            logs = None
+        if self.x_log is not None:
+            logs[p.x_field] = self.x_log
+        if self.y_log is not None:
+            logs[p.y_field] = self.y_log
         deposition = getattr(self.profile, "deposition", None)
         if deposition is None:
             additional_kwargs = {'accumulation': p.accumulation,
@@ -1155,11 +1168,12 @@
         self.profile = create_profile(
             p.data_source,
             [p.x_field, p.y_field],
-            p.field_map.values(),
+            list(p.field_map.values()),
             n_bins=[len(p.x_bins)-1, len(p.y_bins)-1],
             weight_field=p.weight_field,
             units=units,
             extrema=extrema,
+            logs=logs,
             **additional_kwargs)
         for field in zunits:
             self.profile.set_field_unit(field, zunits[field])
@@ -1201,6 +1215,14 @@
         extrema = {p.x_field: ((p.x_bins.min(), str(p.x.units)),
                                (p.x_bins.max(), str(p.x.units))),
                    p.y_field: ((ymin, str(p.y.units)), (ymax, str(p.y.units)))}
+        if self.x_log is not None or self.y_log is not None:
+            logs = {}
+        else:
+            logs = None
+        if self.x_log is not None:
+            logs[p.x_field] = self.x_log
+        if self.y_log is not None:
+            logs[p.y_field] = self.y_log
         deposition = getattr(self.profile, "deposition", None)
         if deposition is None:
             additional_kwargs = {'accumulation': p.accumulation,
@@ -1210,11 +1232,12 @@
         self.profile = create_profile(
             p.data_source,
             [p.x_field, p.y_field],
-            p.field_map.values(),
+            list(p.field_map.values()),
             n_bins=[len(p.x_bins)-1, len(p.y_bins)-1],
             weight_field=p.weight_field,
             units=units,
             extrema=extrema,
+            logs=logs,
             **additional_kwargs)
         for field in zunits:
             self.profile.set_field_unit(field, zunits[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