<html><head><meta http-equiv="content-type" content="text/html; charset=us-ascii"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><br><div><br><blockquote type="cite"><div>On Feb 1, 2023, at 9:17 PM, Matthew Knepley <knepley@gmail.com> wrote:</div><br class="Apple-interchange-newline"><div><div dir="ltr"><div dir="ltr">On Wed, Feb 1, 2023 at 9:06 PM Barry Smith <<a href="mailto:bsmith@petsc.dev">bsmith@petsc.dev</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><br></div>  Hmm,  When I do<div><br></div><div>   def somePythonfunction():</div><div>   ...</div><div>   x = da.createLocalVec()</div><div>   ....</div><div>   return </div><div><br></div><div>  The x seems to be properly "garbage collected" at some point; I was guessing it was at the return or some time later than the return, but it did not wait until PetscFinalize().</div><div><br></div><div>  So does the x above HAVE to exist until PetscFinalize()? If not then somehow Python realizes x is no longer referenced and VecDestroy() is called on it when some garbage collection takes place. I would like the same thing happen with the x = da.getLocalVec() but calling x.da.restoreLocalVec() instead of x.destroy().  Note specifically parallelism doesn't play a role here because x is local.</div></div></blockquote><div><br></div><div>It can happen at a random time, so it is unsafe to structure without a "with" since it could hold the local vector maybe after the user tries to destroy the DA.</div></div></div></div></blockquote><div><br></div><div>  Thanks. I am assuming you are talking about the getLocalVec() case. So it appears I need to dynamically attach an  __exit__() method to the Vec in da.getLocalVec() so that restoreLocalVec() gets called <a href="https://www.geeksforgeeks.org/with-statement-in-python/">https://www.geeksforgeeks.org/with-statement-in-python/</a> when the local vector goes out of scope of the with. </div><div><br></div><div>   I assume I can have multiple independent objects created with a with or I guess I could nest them when needed for local representations of u and du for TS.IFunction.</div><div><br></div><div>   I'll try tomorrow.</div><div><br></div><div>  Thanks again for pointing to the with construct.</div><div><br></div><div>  Barry</div><div><br></div><div><br></div></div><div><br><blockquote type="cite"><div><div dir="ltr"><div class="gmail_quote"><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div>  Barry</div><div><br><div><div><br><blockquote type="cite"><div>On Feb 1, 2023, at 8:07 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:</div><br><div><div dir="ltr"><div dir="ltr">On Wed, Feb 1, 2023 at 6:33 PM Barry Smith <<a href="mailto:bsmith@petsc.dev" target="_blank">bsmith@petsc.dev</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
  Would it be possible to rig the xlocal obtained from self.da.getLocalVec()  to automatically trigger the da.restoreLocalVec() when the xlocal goes out of scope so that the user does not need to explicitly make the call. If so, how should I go about implementing it?<br></blockquote><div><br></div><div>This would work in C++ where the object has a defined lifetime, but Python is garbage collected. The way it does this</div><div>pattern is using the "with" statement.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  Barry<br></blockquote></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</div></blockquote></div><br></div></div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</div></blockquote></div><br></body></html>