<html><body>
<p>4 new commits in yt:</p>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/bfd78c5096f3/">https://bitbucket.org/yt_analysis/yt/commits/bfd78c5096f3/</a> Changeset:   bfd78c5096f3 Branch:      yt User:        atmyers Date:        2016-05-07 00:05:14+00:00 Summary:     Enforce periodicity in annotate_particles. Affected #:  1 file</p>
<p>diff -r 80ec1ac414a7652791eed06469dc4104ff0c556b -r bfd78c5096f34f6a0804a8f282051819a45d1256 yt/visualization/plot_modifications.py --- a/yt/visualization/plot_modifications.py +++ b/yt/visualization/plot_modifications.py @@ -1519,21 +1519,61 @@</p>
<pre>field_x = "particle_position_%s" % axis_names[xax]
field_y = "particle_position_%s" % axis_names[yax]
pt = self.ptype</pre>
<ul><li><p>gg = ( ( reg[pt, field_x] >= x0 ) & ( reg[pt, field_x] <= x1 )</p></li>
<li><p>&   ( reg[pt, field_y] >= y0 ) & ( reg[pt, field_y] <= y1 ) )</p></li></ul>
<p>+        self.periodic_x = plot.data.ds.periodicity[xax] +        self.periodic_y = plot.data.ds.periodicity[yax] +        self.LE = plot.data.ds.domain_left_edge[xax], \ +                  plot.data.ds.domain_left_edge[yax] +        self.RE = plot.data.ds.domain_right_edge[xax], \ +                  plot.data.ds.domain_right_edge[yax] +        period_x = plot.data.ds.domain_width[xax] +        period_y = plot.data.ds.domain_width[yax] +        particle_x, particle_y = self._enforce_periodic(reg[pt, field_x], +                                                        reg[pt, field_y], +                                                        x0, x1, period_x, +                                                        y0, y1, period_y) +        gg = ( ( particle_x >= x0 ) & ( particle_x <= x1 ) +           &   ( particle_y >= y0 ) & ( particle_y <= y1 ) )</p>
<pre>         if self.minimum_mass is not None:
gg &= (reg[pt, "particle_mass"] >= self.minimum_mass)
if gg.sum() == 0: return
         plot._axes.hold(True)
         px, py = self.convert_to_plot(plot,</pre>
<ul><li><p>[np.array(reg[pt, field_x][gg][::self.stride]),</p></li>
<li><p>np.array(reg[pt, field_y][gg][::self.stride])])</p></li></ul>
<p>+                    [np.array(particle_x[gg][::self.stride]), +                     np.array(particle_y[gg][::self.stride])])</p>
<pre>        plot._axes.scatter(px, py, edgecolors='None', marker=self.marker,
                           s=self.p_size, c=self.color,alpha=self.alpha)
        plot._axes.set_xlim(xx0,xx1)
        plot._axes.set_ylim(yy0,yy1)
        plot._axes.hold(False)
</pre>
<p>+    def _enforce_periodic(self, +                          particle_x, +                          particle_y, +                          x0, x1, period_x, +                          y0, y1, period_y): +        #  duplicate particles if periodic in that direction AND if the plot +        #  extends outside the domain boundaries. +        if self.periodic_x and x0 > self.LE[0]: +            particle_x = YTArray(np.hstack((particle_x, particle_x + period_x)), +                            input_units = period_x.units) +            particle_y = YTArray(np.hstack((particle_y, particle_y)), +                            input_units = period_y.units) +        if self.periodic_x and x1 < self.RE[0]: +            particle_x = YTArray(np.hstack((particle_x, particle_x – period_x)), +                                 input_units = period_x.units) +            particle_y = YTArray(np.hstack((particle_y, particle_y)), +                            input_units = period_y.units) +        if self.periodic_y and y0 > self.LE[1]: +            particle_y = YTArray(np.hstack((particle_y, particle_y + period_y)), +                                 input_units = period_y.units) +            particle_x = YTArray(np.hstack((particle_x, particle_x)), +                            input_units = period_x.units) +        if self.periodic_y and y1 < self.RE[1]: +            particle_y = YTArray(np.hstack((particle_y, particle_y – period_y)), +                                 input_units = period_y.units) +            particle_x = YTArray(np.hstack((particle_x, particle_x)), +                            input_units = period_x.units) +        return particle_x, particle_y</p>
<pre>def _get_region(self, xlim, ylim, axis, data):
    LE, RE = [None]*3, [None]*3</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/63606380105d/">https://bitbucket.org/yt_analysis/yt/commits/63606380105d/</a> Changeset:   63606380105d Branch:      yt User:        atmyers Date:        2016-05-07 16:14:27+00:00 Summary:     merging with tip Affected #:  1 file</p>
<p>diff -r bfd78c5096f34f6a0804a8f282051819a45d1256 -r 63606380105d838f50574da3ab7df029efdc31f6 yt/units/yt_array.py --- a/yt/units/yt_array.py +++ b/yt/units/yt_array.py @@ -1438,7 +1438,7 @@</p>
<pre>This is a wrapper around np.hstack that preserves units.
"""</pre>
<ul><li><p>v = np.vstack(arrs)</p></li></ul>
<p>+    v = np.hstack(arrs)</p>
<pre>    v = validate_numpy_wrapper_units(v, arrs)
    return v
</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/931c01b73a09/">https://bitbucket.org/yt_analysis/yt/commits/931c01b73a09/</a> Changeset:   931c01b73a09 Branch:      yt User:        atmyers Date:        2016-05-07 16:19:27+00:00 Summary:     use the uhstack function instead of handling units manually. Affected #:  1 file</p>
<p>diff -r 63606380105d838f50574da3ab7df029efdc31f6 -r 931c01b73a099784df44deabad700036a74d1e1b yt/visualization/plot_modifications.py --- a/yt/visualization/plot_modifications.py +++ b/yt/visualization/plot_modifications.py @@ -27,7 +27,7 @@</p>
<pre>from yt.funcs import \
    mylog, iterable
from yt.extern.six import add_metaclass</pre>
<p>-from yt.units.yt_array import YTQuantity, YTArray +from yt.units.yt_array import YTQuantity, YTArray, uhstack</p>
<pre>from yt.visualization.image_writer import apply_colormap
from yt.utilities.lib.geometry_utils import triangle_plane_intersect
from yt.utilities.lib.pixelization_routines import \</pre>
<p>@@ -1554,25 +1554,17 @@</p>
<pre>#  duplicate particles if periodic in that direction AND if the plot
#  extends outside the domain boundaries.
if self.periodic_x and x0 > self.LE[0]:</pre>
<ul><li><p>particle_x = YTArray(np.hstack((particle_x, particle_x + period_x)),</p></li>
<li><p>input_units = period_x.units)</p></li>
<li><p>particle_y = YTArray(np.hstack((particle_y, particle_y)),</p></li>
<li><p>input_units = period_y.units)</p></li></ul>
<p>+            particle_x = uhstack((particle_x, particle_x + period_x)) +            particle_y = uhstack((particle_y, particle_y))</p>
<pre>if self.periodic_x and x1 < self.RE[0]:</pre>
<ul><li><p>particle_x = YTArray(np.hstack((particle_x, particle_x – period_x)),</p></li>
<li><p>input_units = period_x.units)</p></li>
<li><p>particle_y = YTArray(np.hstack((particle_y, particle_y)),</p></li>
<li><p>input_units = period_y.units)</p></li></ul>
<p>+            particle_x = uhstack((particle_x, particle_x – period_x)) +            particle_y = uhstack((particle_y, particle_y))</p>
<pre>if self.periodic_y and y0 > self.LE[1]:</pre>
<ul><li><p>particle_y = YTArray(np.hstack((particle_y, particle_y + period_y)),</p></li>
<li><p>input_units = period_y.units)</p></li>
<li><p>particle_x = YTArray(np.hstack((particle_x, particle_x)),</p></li>
<li><p>input_units = period_x.units)</p></li></ul>
<p>+            particle_y = uhstack((particle_y, particle_y + period_y)) +            particle_x = uhstack((particle_x, particle_x))</p>
<pre>if self.periodic_y and y1 < self.RE[1]:</pre>
<ul><li><p>particle_y = YTArray(np.hstack((particle_y, particle_y – period_y)),</p></li>
<li><p>input_units = period_y.units)</p></li>
<li><p>particle_x = YTArray(np.hstack((particle_x, particle_x)),</p></li>
<li><p>input_units = period_x.units)</p></li></ul>
<p>+            particle_y = uhstack((particle_y, particle_y – period_y)) +            particle_x = uhstack((particle_x, particle_x))</p>
<pre>        return particle_x, particle_y

    def _get_region(self, xlim, ylim, axis, data):</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/8b661ffb2b26/">https://bitbucket.org/yt_analysis/yt/commits/8b661ffb2b26/</a> Changeset:   8b661ffb2b26 Branch:      yt User:        chummels Date:        2016-05-11 18:27:03+00:00 Summary:     Merged in atmyers/yt (pull request #2161)</p>
<p>[BUGFIX] Enforce periodicity in annotate_particles. Closes Issue #543. Affected #:  1 file</p>
<p>diff -r db993aae188791672893608249078d43a42b50cb -r 8b661ffb2b26c38a26c90e1c2854b9cb32bb9a34 yt/visualization/plot_modifications.py --- a/yt/visualization/plot_modifications.py +++ b/yt/visualization/plot_modifications.py @@ -27,7 +27,7 @@</p>
<pre>from yt.funcs import \
    mylog, iterable
from yt.extern.six import add_metaclass</pre>
<p>-from yt.units.yt_array import YTQuantity, YTArray +from yt.units.yt_array import YTQuantity, YTArray, uhstack</p>
<pre>from yt.visualization.image_writer import apply_colormap
from yt.utilities.lib.geometry_utils import triangle_plane_intersect
from yt.utilities.lib.pixelization_routines import \</pre>
<p>@@ -1519,21 +1519,53 @@</p>
<pre>field_x = "particle_position_%s" % axis_names[xax]
field_y = "particle_position_%s" % axis_names[yax]
pt = self.ptype</pre>
<ul><li><p>gg = ( ( reg[pt, field_x] >= x0 ) & ( reg[pt, field_x] <= x1 )</p></li>
<li><p>&   ( reg[pt, field_y] >= y0 ) & ( reg[pt, field_y] <= y1 ) )</p></li></ul>
<p>+        self.periodic_x = plot.data.ds.periodicity[xax] +        self.periodic_y = plot.data.ds.periodicity[yax] +        self.LE = plot.data.ds.domain_left_edge[xax], \ +                  plot.data.ds.domain_left_edge[yax] +        self.RE = plot.data.ds.domain_right_edge[xax], \ +                  plot.data.ds.domain_right_edge[yax] +        period_x = plot.data.ds.domain_width[xax] +        period_y = plot.data.ds.domain_width[yax] +        particle_x, particle_y = self._enforce_periodic(reg[pt, field_x], +                                                        reg[pt, field_y], +                                                        x0, x1, period_x, +                                                        y0, y1, period_y) +        gg = ( ( particle_x >= x0 ) & ( particle_x <= x1 ) +           &   ( particle_y >= y0 ) & ( particle_y <= y1 ) )</p>
<pre>         if self.minimum_mass is not None:
gg &= (reg[pt, "particle_mass"] >= self.minimum_mass)
if gg.sum() == 0: return
         plot._axes.hold(True)
         px, py = self.convert_to_plot(plot,</pre>
<ul><li><p>[np.array(reg[pt, field_x][gg][::self.stride]),</p></li>
<li><p>np.array(reg[pt, field_y][gg][::self.stride])])</p></li></ul>
<p>+                    [np.array(particle_x[gg][::self.stride]), +                     np.array(particle_y[gg][::self.stride])])</p>
<pre>        plot._axes.scatter(px, py, edgecolors='None', marker=self.marker,
                           s=self.p_size, c=self.color,alpha=self.alpha)
        plot._axes.set_xlim(xx0,xx1)
        plot._axes.set_ylim(yy0,yy1)
        plot._axes.hold(False)
</pre>
<p>+    def _enforce_periodic(self, +                          particle_x, +                          particle_y, +                          x0, x1, period_x, +                          y0, y1, period_y): +        #  duplicate particles if periodic in that direction AND if the plot +        #  extends outside the domain boundaries. +        if self.periodic_x and x0 > self.LE[0]: +            particle_x = uhstack((particle_x, particle_x + period_x)) +            particle_y = uhstack((particle_y, particle_y)) +        if self.periodic_x and x1 < self.RE[0]: +            particle_x = uhstack((particle_x, particle_x – period_x)) +            particle_y = uhstack((particle_y, particle_y)) +        if self.periodic_y and y0 > self.LE[1]: +            particle_y = uhstack((particle_y, particle_y + period_y)) +            particle_x = uhstack((particle_x, particle_x)) +        if self.periodic_y and y1 < self.RE[1]: +            particle_y = uhstack((particle_y, particle_y – period_y)) +            particle_x = uhstack((particle_x, particle_x)) +        return particle_x, particle_y</p>
<pre>def _get_region(self, xlim, ylim, axis, data):
    LE, RE = [None]*3, [None]*3</pre>
<p>Repository URL: <a href="https://bitbucket.org/yt_analysis/yt/">https://bitbucket.org/yt_analysis/yt/</a></p>
<p>—</p>
<p>This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email.</p>

<img src="http://link.bitbucket.org/wf/open?upn=ll4ctv0L-2ByeRZFC1LslHcg6aJmnQ70VruLbmeLQr27DWkdSuSJw6ivvd2xHjJRIBPIWV-2BIruEAtqBvqN71FwqY5PsHs7mIUc1VkKYP-2BaLhG54ejz4P-2FczIA-2FrW79Tq5eqTEF64XpYvAVq8cqECC7oXX6WwH6CTn9xy-2Bk5G9sSbqhn7yFEd7CKUuuDZGd3BopKjIIvdZHlGaW4JXdbHoi2FD1lQYZLM-2BuGhVXHd8h2X8-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;"/>
</body></html>