Example #1
0
    def _read_field_names(self, grid):
        if grid.filename is None: return []
        f = h5py.File(grid.filename, "r")
        try:
            group = f["/Grid%08i" % grid.id]
        except KeyError:
            group = f
        fields = []
        dtypes = set([])
        add_io = "io" in grid.ds.particle_types
        for name, v in iteritems(group):
            # NOTE: This won't work with 1D datasets or references.
            # For all versions of Enzo I know about, we can assume all floats
            # are of the same size.  So, let's grab one.
            if not hasattr(v, "shape") or v.dtype == "O":
                continue
            elif len(v.dims) == 1:
                if grid.ds.dimensionality == 1:
                    fields.append( ("enzo", str(name)) )
                elif add_io:
                    fields.append( ("io", str(name)) )
            else:
                fields.append( ("enzo", str(name)) )
                dtypes.add(v.dtype)

        if len(dtypes) == 1:
            # Now, if everything we saw was the same dtype, we can go ahead and
            # set it here.  We do this because it is a HUGE savings for 32 bit
            # floats, since our numpy copying/casting is way faster than
            # h5py's, for some reason I don't understand.  This does *not* need
            # to be correct -- it will get fixed later -- it just needs to be
            # okay for now.
            self._field_dtype = list(dtypes)[0]
        f.close()
        return fields
    def save(self, name=None, suffix=None, mpl_kwargs=None):
        r"""
        Saves a 2d profile plot.

        Parameters
        ----------
        name : str
            The output file keyword.
        suffix : string
           Specify the image type by its suffix. If not specified, the output
           type will be inferred from the filename. Defaults to PNG.
        mpl_kwargs : dict
           A dict of keyword arguments to be passed to matplotlib.

        >>> plot.save(mpl_kwargs={'bbox_inches':'tight'})

        """
        names = []
        if not self._plot_valid:
            self._setup_plots()
        if mpl_kwargs is None:
            mpl_kwargs = {}
        if name is None:
            name = str(self.profile.ds)
        name = os.path.expanduser(name)
        xfn = self.profile.x_field
        yfn = self.profile.y_field
        if isinstance(xfn, tuple):
            xfn = xfn[1]
        if isinstance(yfn, tuple):
            yfn = yfn[1]
        for f in self.profile.field_data:
            _f = f
            if isinstance(f, tuple):
                _f = _f[1]
            middle = "2d-Profile_%s_%s_%s" % (xfn, yfn, _f)
            splitname = os.path.split(name)
            if splitname[0] != '' and not os.path.isdir(splitname[0]):
                os.makedirs(splitname[0])
            if os.path.isdir(name) and name != str(self.profile.ds):
                prefix = name + (os.sep if name[-1] != os.sep else '')
                prefix += str(self.profile.ds)
            else:
                prefix = name
            if suffix is None:
                suffix = get_image_suffix(name)
                if suffix != '':
                    for k, v in iteritems(self.plots):
                        names.append(v.save(name, mpl_kwargs))
                    return names
                else:
                    suffix = "png"
            fn = "%s_%s.%s" % (prefix, middle, suffix)
            names.append(fn)
            self.plots[f].save(fn, mpl_kwargs)
        return names
Example #3
0
    def save(self, name=None, suffix=None, mpl_kwargs=None):
        r"""
        Saves a 2d profile plot.

        Parameters
        ----------
        name : str
            The output file keyword.
        suffix : string
           Specify the image type by its suffix. If not specified, the output
           type will be inferred from the filename. Defaults to PNG.
        mpl_kwargs : dict
           A dict of keyword arguments to be passed to matplotlib.

        >>> plot.save(mpl_kwargs={'bbox_inches':'tight'})

        """
        names = []
        if not self._plot_valid:
            self._setup_plots()
        if mpl_kwargs is None:
            mpl_kwargs = {}
        if name is None:
            name = str(self.profile.ds)
        name = os.path.expanduser(name)
        xfn = self.profile.x_field
        yfn = self.profile.y_field
        if isinstance(xfn, tuple):
            xfn = xfn[1]
        if isinstance(yfn, tuple):
            yfn = yfn[1]
        for f in self.profile.field_data:
            _f = f
            if isinstance(f, tuple):
                _f = _f[1]
            middle = "2d-Profile_%s_%s_%s" % (xfn, yfn, _f)
            splitname = os.path.split(name)
            if splitname[0] != '' and not os.path.isdir(splitname[0]):
                os.makedirs(splitname[0])
            if os.path.isdir(name) and name != str(self.profile.ds):
                prefix = name + (os.sep if name[-1] != os.sep else '')
                prefix += str(self.profile.ds)
            else:
                prefix = name
            if suffix is None:
                suffix = get_image_suffix(name)
                if suffix != '':
                    for k, v in iteritems(self.plots):
                        names.append(v.save(name, mpl_kwargs))
                    return names
                else:
                    suffix = "png"
            fn = "%s_%s.%s" % (prefix, middle, suffix)
            names.append(fn)
            self.plots[f].save(fn, mpl_kwargs)
        return names
Example #4
0
    def save(self, name=None, suffix=None, mpl_kwargs=None):
        r"""
        Saves a 1d profile plot.

        Parameters
        ----------
        name : str
            The output file keyword.
        suffix : string
            Specify the image type by its suffix. If not specified, the output
            type will be inferred from the filename. Defaults to PNG.
        mpl_kwargs : dict
            A dict of keyword arguments to be passed to matplotlib.
        """
        if not self._plot_valid:
            self._setup_plots()
        unique = set(self.plots.values())
        if len(unique) < len(self.plots):
            iters = izip(range(len(unique)), sorted(unique))
        else:
            iters = iteritems(self.plots)
        if not suffix:
            suffix = "png"
        suffix = ".%s" % suffix
        fullname = False
        if name is None:
            if len(self.profiles) == 1:
                prefix = self.profiles[0].ds
            else:
                prefix = "Multi-data"
            name = "%s%s" % (prefix, suffix)
        else:
            sfx = get_image_suffix(name)
            if sfx != '':
                suffix = sfx
                prefix = name[:name.rfind(suffix)]
                fullname = True
            else:
                prefix = name
        xfn = self.profiles[0].x_field
        if isinstance(xfn, tuple):
            xfn = xfn[1]
        fns = []
        for uid, plot in iters:
            if isinstance(uid, tuple):
                uid = uid[1]
            if fullname:
                fns.append("%s%s" % (prefix, suffix))
            else:
                fns.append("%s_1d-Profile_%s_%s%s" %
                           (prefix, xfn, uid, suffix))
            mylog.info("Saving %s", fns[-1])
            with matplotlib_style_context():
                plot.save(fns[-1], mpl_kwargs=mpl_kwargs)
        return fns
Example #5
0
    def from_json(cls, json_text):
        """
        Returns a UnitRegistry object from a json-serialized unit registry
        """
        data = json.loads(json_text)
        lut = {}
        for k, v in six.iteritems(data):
            unsan_v = list(v)
            unsan_v[1] = sympify(v[1])
            lut[k] = tuple(unsan_v)

        return cls(lut=lut, add_default_symbols=False)
 def _send_zmq(self):
     try:
         # pre-IPython v1.0
         from IPython.zmq.pylab.backend_inline import send_figure as display
     except ImportError:
         # IPython v1.0+
         from IPython.core.display import display
     for k, v in sorted(iteritems(self.plots)):
         # Due to a quirk in the matplotlib API, we need to create
         # a dummy canvas variable here that is never used.
         canvas = FigureCanvasAgg(v.figure)  # NOQA
         display(v.figure)
    def save(self, name=None, suffix=None):
        r"""
        Saves a 1d profile plot.

        Parameters
        ----------
        name : str
            The output file keyword.
        suffix : string
            Specify the image type by its suffix. If not specified, the output
            type will be inferred from the filename. Defaults to PNG.
        """
        if not self._plot_valid:
            self._setup_plots()
        unique = set(self.figures.values())
        if len(unique) < len(self.figures):
            iters = izip(range(len(unique)), sorted(unique))
        else:
            iters = iteritems(self.figures)
        if not suffix:
            suffix = "png"
        suffix = ".%s" % suffix
        if name is None:
            if len(self.profiles) == 1:
                prefix = self.profiles[0].ds
            else:
                prefix = "Multi-data"
            name = "%s%s" % (prefix, suffix)
        else:
            sfx = get_image_suffix(name)
            if sfx != '':
                suffix = sfx
                prefix = name[:name.rfind(suffix)]
            else:
                prefix = name
        xfn = self.profiles[0].x_field
        if isinstance(xfn, tuple):
            xfn = xfn[1]
        canvas_cls = get_canvas(name)
        fns = []
        for uid, fig in iters:
            if isinstance(uid, tuple):
                uid = uid[1]
            canvas = canvas_cls(fig)
            fns.append("%s_1d-Profile_%s_%s%s" % (prefix, xfn, uid, suffix))
            mylog.info("Saving %s", fns[-1])
            canvas.print_figure(fns[-1])
        return fns
Example #8
0
    def save(self, name=None, suffix=None):
        r"""
        Saves a 1d profile plot.

        Parameters
        ----------
        name : str
            The output file keyword.
        suffix : string
            Specify the image type by its suffix. If not specified, the output
            type will be inferred from the filename. Defaults to PNG.
        """
        if not self._plot_valid:
            self._setup_plots()
        unique = set(self.figures.values())
        if len(unique) < len(self.figures):
            iters = izip(range(len(unique)), sorted(unique))
        else:
            iters = iteritems(self.figures)
        if not suffix:
            suffix = "png"
        suffix = ".%s" % suffix
        if name is None:
            if len(self.profiles) == 1:
                prefix = self.profiles[0].ds
            else:
                prefix = "Multi-data"
            name = "%s%s" % (prefix, suffix)
        else:
            sfx = get_image_suffix(name)
            if sfx != '':
                suffix = sfx
                prefix = name[:name.rfind(suffix)]
            else:
                prefix = name
        xfn = self.profiles[0].x_field
        if isinstance(xfn, tuple):
            xfn = xfn[1]
        canvas_cls = get_canvas(name)
        fns = []
        for uid, fig in iters:
            if isinstance(uid, tuple):
                uid = uid[1]
            canvas = canvas_cls(fig)
            fns.append("%s_1d-Profile_%s_%s%s" % (prefix, xfn, uid, suffix))
            mylog.info("Saving %s", fns[-1])
            canvas.print_figure(fns[-1])
        return fns
Example #9
0
    def to_json(self):
        """
        Returns a json-serialized version of the unit registry
        """
        sanitized_lut = {}
        for k, v in six.iteritems(self.lut):
            san_v = list(v)
            repr_dims = srepr(v[1])
            if SYMPY_VERSION < LooseVersion("1.0.0"):
                # see https://github.com/sympy/sympy/issues/6131
                repr_dims = re.sub("Symbol\('\([a-z_]*\)'\)",
                                   positive_symbol_replacer, repr_dims)
            san_v[1] = repr_dims
            sanitized_lut[k] = tuple(san_v)

        return json.dumps(sanitized_lut)
Example #10
0
 def _repr_html_(self):
     """Return an html representation of the plot object. Will display as a
     png for each WindowPlotMPL instance in self.plots"""
     ret = ''
     unique = set(self.plots.values())
     if len(unique) < len(self.plots):
         iters = izip(range(len(unique)), sorted(unique))
     else:
         iters = iteritems(self.plots)
     for uid, plot in iters:
         with matplotlib_style_context():
             img = plot._repr_png_()
         img = base64.b64encode(img).decode()
         ret += r'<img style="max-width:100%%;max-height:100%%;" ' \
                r'src="data:image/png;base64,{0}"><br>'.format(img)
     return ret
 def _repr_html_(self):
     """Return an html representation of the plot object. Will display as a
     png for each WindowPlotMPL instance in self.plots"""
     ret = ''
     unique = set(self.figures.values())
     if len(unique) < len(self.figures):
         iters = izip(range(len(unique)), sorted(unique))
     else:
         iters = iteritems(self.figures)
     for uid, fig in iters:
         canvas = mpl.FigureCanvasAgg(fig)
         f = BytesIO()
         canvas.print_figure(f)
         f.seek(0)
         img = base64.b64encode(f.read()).decode()
         ret += r'<img style="max-width:100%%;max-height:100%%;" ' \
                r'src="data:image/png;base64,{0}"><br>'.format(img)
     return ret
Example #12
0
 def _repr_html_(self):
     """Return an html representation of the plot object. Will display as a
     png for each WindowPlotMPL instance in self.plots"""
     ret = ''
     unique = set(self.figures.values())
     if len(unique) < len(self.figures):
         iters = izip(range(len(unique)), sorted(unique))
     else:
         iters = iteritems(self.figures)
     for uid, fig in iters:
         canvas = mpl.FigureCanvasAgg(fig)
         f = BytesIO()
         canvas.print_figure(f)
         f.seek(0)
         img = base64.b64encode(f.read()).decode()
         ret += r'<img style="max-width:100%%;max-height:100%%;" ' \
                r'src="data:image/png;base64,{0}"><br>'.format(img)
     return ret
Example #13
0
    def _read_field_names(self, grid):
        if grid.filename is None: return []
        f = h5py.File(grid.filename, "r")
        try:
            group = f[grid.block_name]
        except KeyError:
            raise YTException(
                message="Grid %s is missing from data file %s." %
                (grid.block_name, grid.filename), ds=self.ds)
        fields = []
        ptypes = set()
        dtypes = set()
        # keep one field for each particle type so we can count later
        sample_pfields = {}
        for name, v in iteritems(group):
            if not hasattr(v, "shape") or v.dtype == "O":
                continue
            # mesh fields are "field <name>"
            if name.startswith("field"):
                _, fname = name.split(self._sep, 1)
                fields.append(("enzop", fname))
                dtypes.add(v.dtype)
            # particle fields are "particle <type> <name>"
            else:
                _, ftype, fname = name.split(self._sep, 2)
                fields.append((ftype, fname))
                ptypes.add(ftype)
                dtypes.add(v.dtype)
                if ftype not in sample_pfields:
                    sample_pfields[ftype] = fname
        self.sample_pfields = sample_pfields

        if len(dtypes) == 1:
            # Now, if everything we saw was the same dtype, we can go ahead and
            # set it here.  We do this because it is a HUGE savings for 32 bit
            # floats, since our numpy copying/casting is way faster than
            # h5py's, for some reason I don't understand.  This does *not* need
            # to be correct -- it will get fixed later -- it just needs to be
            # okay for now.
            self._field_dtype = list(dtypes)[0]
        f.close()
        return fields, ptypes
Example #14
0
    def _validate(self):
        r"""Validate the current state of the scene."""

        for k, source in iteritems(self.sources):
            source._validate()
        return
Example #15
0
    def save(self, name=None, suffix=None, mpl_kwargs=None):
        """saves the plot to disk.

        Parameters
        ----------
        name : string or tuple
           The base of the filename. If name is a directory or if name is not
           set, the filename of the dataset is used. For a tuple, the
           resulting path will be given by joining the elements of the
           tuple
        suffix : string
           Specify the image type by its suffix. If not specified, the output
           type will be inferred from the filename. Defaults to PNG.
        mpl_kwargs : dict
           A dict of keyword arguments to be passed to matplotlib.

        >>> slc.save(mpl_kwargs={'bbox_inches':'tight'})

        """
        names = []
        if mpl_kwargs is None: mpl_kwargs = {}
        if isinstance(name, (tuple, list)):
            name = os.path.join(*name)
        if name is None:
            name = str(self.ds)
        name = os.path.expanduser(name)
        if name[-1] == os.sep and not os.path.isdir(name):
            ensure_dir(name)
        if os.path.isdir(name) and name != str(self.ds):
            name = name + (os.sep if name[-1] != os.sep else '') + str(self.ds)
        if suffix is None:
            suffix = get_image_suffix(name)
            if suffix != '':
                for k, v in iteritems(self.plots):
                    names.append(v.save(name, mpl_kwargs))
                return names
        if hasattr(self.data_source, 'axis'):
            axis = self.ds.coordinates.axis_name.get(self.data_source.axis, '')
        else:
            axis = None
        weight = None
        type = self._plot_type
        if type in ['Projection', 'OffAxisProjection']:
            weight = self.data_source.weight_field
            if weight is not None:
                weight = weight[1].replace(' ', '_')
        if 'Cutting' in self.data_source.__class__.__name__:
            type = 'OffAxisSlice'
        for k, v in iteritems(self.plots):
            if isinstance(k, tuple):
                k = k[1]
            if axis:
                n = "%s_%s_%s_%s" % (name, type, axis, k.replace(' ', '_'))
            else:
                # for cutting planes
                n = "%s_%s_%s" % (name, type, k.replace(' ', '_'))
            if weight:
                n += "_%s" % (weight)
            if suffix != '':
                n = ".".join([n, suffix])
            names.append(v.save(n, mpl_kwargs))
        return names
    def save(self, name=None, suffix=None, mpl_kwargs=None):
        """saves the plot to disk.

        Parameters
        ----------
        name : string
           The base of the filename.  If name is a directory or if name is not
           set, the filename of the dataset is used.
        suffix : string
           Specify the image type by its suffix. If not specified, the output
           type will be inferred from the filename. Defaults to PNG.
        mpl_kwargs : dict
           A dict of keyword arguments to be passed to matplotlib.

        >>> slc.save(mpl_kwargs={'bbox_inches':'tight'})

        """
        names = []
        if mpl_kwargs is None: mpl_kwargs = {}
        if name is None:
            name = str(self.ds)
        name = os.path.expanduser(name)
        if name[-1] == os.sep and not os.path.isdir(name):
            try:
                os.mkdir(name)
            except OSError as e:
                if e.errno == errno.EEXIST:
                    pass
                else:
                    raise
        if os.path.isdir(name) and name != str(self.ds):
            name = name + (os.sep if name[-1] != os.sep else '') + str(self.ds)
        if suffix is None:
            suffix = get_image_suffix(name)
            if suffix != '':
                for k, v in iteritems(self.plots):
                    names.append(v.save(name, mpl_kwargs))
                return names
        axis = self.ds.coordinates.axis_name.get(
            self.data_source.axis, '')
        weight = None
        type = self._plot_type
        if type in ['Projection', 'OffAxisProjection']:
            weight = self.data_source.weight_field
            if weight is not None:
                weight = weight[1].replace(' ', '_')
        if 'Cutting' in self.data_source.__class__.__name__:
            type = 'OffAxisSlice'
        for k, v in iteritems(self.plots):
            if isinstance(k, tuple):
                k = k[1]
            if axis:
                n = "%s_%s_%s_%s" % (name, type, axis, k.replace(' ', '_'))
            else:
                # for cutting planes
                n = "%s_%s_%s" % (name, type, k.replace(' ', '_'))
            if weight:
                n += "_%s" % (weight)
            if suffix != '':
                n = ".".join([n,suffix])
            names.append(v.save(n, mpl_kwargs))
        return names