<div dir="ltr">I agree with Matt, <div><br></div><div>I think #4 is the cleanest.</div><div><br></div><div>Be Well</div><div>Anthony</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 23, 2013 at 11:36 AM, Matthew Turk <span dir="ltr"><<a href="mailto:matthewturk@gmail.com" target="_blank">matthewturk@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Hi Doug,</p>
<p dir="ltr">My vote is for number four.</p>
<p dir="ltr">Matt</p><div class="HOEnZb"><div class="h5">
<div class="gmail_quote">On Jul 23, 2013 9:17 AM, "Douglas Harvey Rudd" <<a href="mailto:drudd@uchicago.edu" target="_blank">drudd@uchicago.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Hi all,<br>
<br>
In writing test cases for the slice selector I discovered that the reslice function of YTSliceBase appears to be broken due to caching at several levels.<br>
<br>
1) the selector object stores the slice coordinate and was never updated<br>
2) the grid selection is cached<br>
3) the cell mask (created by fill_mask) is only updated when the selector id changes<br>
<br>
I fixed 1) and 2) by overloading the clear_data function in YTSelectionDataContainer:<br>
<br>
    def clear_data(self):<br>
        """<br>
        Clears out all data from the YTSelectionDataContainer instance, freeing memory.<br>
        """<br>
        self._selector = None<br>
        self._current_chunk = None<br>
        self.field_data.clear()<br>
<br>
and replaced the call to self.field_data.clear() in YTSliceBase.reslice with self.clear_data()<br>
<br>
This forces the selector to be recreated when it is next requested.  Unfortunately the problem persisted, inconsistently, and I tracked it down to 3).  The id of the newly created selector was sometimes identical to the one prior to the reslice command.  In the grid_patch hierarchy, the cell mask is only recreated if the id of the selector object has changed, and so in this case an old mask persisted.<br>



<br>
I see several options for solving the problem:<br>
<br>
1) replace using the python id function with a random identifier or hash of the actual selector data, to ensure it detects when the parameters have changed<br>
2) reach into the hierarchy from the clear_data function and erase the cached cell mask<br>
3) add a check in the hierarchy to detect if the chunking has changed along with the selector (not sure how this could be done, but probably a good idea anyway, for consistency)<br>
4) remove the reslice function and prevent selection data containers from changing after creation<br>
<br>
<br>
Thoughts?<br>
<br>
<br>
Douglas Rudd<br>
Scientific Computing Consultant<br>
Research Computing Center<br>
<a href="mailto:drudd@uchicago.edu" target="_blank">drudd@uchicago.edu</a><br>
<br>
<br>
<br>
_______________________________________________<br>
yt-dev mailing list<br>
<a href="mailto:yt-dev@lists.spacepope.org" target="_blank">yt-dev@lists.spacepope.org</a><br>
<a href="http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org" target="_blank">http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org</a><br>
</blockquote></div>
</div></div><br>_______________________________________________<br>
yt-dev mailing list<br>
<a href="mailto:yt-dev@lists.spacepope.org">yt-dev@lists.spacepope.org</a><br>
<a href="http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org" target="_blank">http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org</a><br>
<br></blockquote></div><br></div>