6
$\begingroup$

While developing a relatively complex demonstration for Manipulate I encountered the problem that my output was unintentionally self-updating in an endless loop.

After some digging I discovered the problem is probably related with the following minimal code:

date = DateObject[{2014, 12, 31, 0, 0, 0}];
Dynamic[GeoGraphics[NightHemisphere[date], GeoRange -> "World"], 
 SynchronousUpdating -> False]

Because the date is fixed I honestly cannot see any reason why this is self-updating in an infinte loop.

First question. Why this happens?

To stop this behavior we can modify the code as:

date = DateObject[{2014, 12, 31, 0, 0, 0}];
Dynamic[GeoGraphics[NightHemisphere[date], GeoRange -> "World"], 
 TrackedSymbols :> {date}, SynchronousUpdating -> False]

In the real case things are more complex because I have to explicitly list and keep updated a list of many symbols. Things are more complex also because with nested Dynamic the following code doesn't prevent the self-updating:

date = DateObject[{2014, 12, 31, 0, 0, 0}];
Dynamic[{
  date, Dynamic[
   GeoGraphics[NightHemisphere[date], GeoRange -> "World"], 
   TrackedSymbols :> Automatic, SynchronousUpdating -> False]
  }, TrackedSymbols :> {date}, SynchronousUpdating -> False]

I read many time the advanced documentation of Manipulate and Dynamic, and my understanding was the inner Dynamic should inherits TrackedSymbols from the outer Dynamic.

Second question. Is that true?

Of course this is safe:

date = DateObject[{2014, 12, 31, 0, 0, 0}];
Dynamic[{
  date, Dynamic[
   GeoGraphics[NightHemisphere[date], GeoRange -> "World"], 
   TrackedSymbols :> {date}, SynchronousUpdating -> False]
  }, TrackedSymbols :> {date}, SynchronousUpdating -> False]

but again very complex to apply in the real case when there are many symbols.

Third question. There is a simpler way to prevent this behavior?

UPDATE FROM WOLFRAM

Hello,

Thank you for your email.

I have filed a bug report for the issue of NightHemisphere triggering updates with the development team.

The issue about TrackedSymbols->Automatic is not complete clear from the documentation: if you would like to let the inner Dynamic content inherits the tracked symbols of the enclosing constructs, you can use Refresh:

For example, the following code

Dynamic[{x, Refresh[{x, y}, TrackedSymbols -> Automatic]},
TrackedSymbols -> {x}]

will only update when x is changed.

Setting the tracked symbols correctly is a little tricky -- if the issue with NightHemisphere is causing great difficulty in your code, could you please send us the notebook and maybe the developer might provide some suggestion?

I hope this helps.

Thank you very much for giving us feedback and hopefully this issue would be improved in future release.

Sincerely, Wolfram Technical Support

UPDATE : Yet Another (Supposed) Bug Of NightHemispere

GeoGraphics[{NightHemisphere@DateObject[{2015, 3, 21}]}] // InputForm

GeoGraphics[Graphics[{}]]

$\endgroup$
  • $\begingroup$ You can go with TrackedSymbols -> Full which will track only explicitly stated variables. It is not always the case, if e.g. you want to inherit only a list of symbols. I'd say your Automatic approach should work but I'm always confused by automatic options... $\endgroup$ – Kuba Apr 25 '15 at 10:37
  • $\begingroup$ @Kuba Thanks for the comment but unfortunately Full cannot works because my Dynamic content is built with some local auxiliary function which in turn call Others local auxiliary functions. To build the content these functions access control values but also computed values stored in local variables when related control changes; so even True cannot works. $\endgroup$ – unlikely Apr 25 '15 at 19:30
  • 1
    $\begingroup$ I'm surprised you didn't get a better answer from WRI. For instance, Dynamic[{date, Clock[]}, TrackedSymbols :> {date}] does not keep the clock from updating. Since a plain NightHemisphere[] is supposed to be time-dependent, something similar may be happening (but if so, you'd think WRI would know about it). Given that it causes such enormous demands on the computer, it still seems bug. $\endgroup$ – Michael E2 Jun 21 '16 at 17:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.