Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Display progress information during the evaluation of an expression
ResourceFunction["MonitorEvaluate"][expr] displays progress information during the evaluation of expr. | |
ResourceFunction["MonitorEvaluate"][expr, params] displays progress according to the specification in params. |

| "Text" | main progress text |
| "Progress" | current progress value between 0 and 1 |
| "Detail" | secondary progress text |
| "ByteCountCurrent" | current processed data |
| "ByteCountTotal" | total data to process |
| "ElapsedTime" | time since the beginning of the evaluation |
| "ItemAction" | action performed on the items |
| "ItemCurrent" | amount of processed items |
| "ItemName" | name of the processed items |
| "ItemTotal" | number of items to process |
| "Percentage" | progress percentage |
| "RemainingTime" | time to the end of the evaluation |
| Left|Center|Right | display only the RHS with the specified alignment |
| "Progress" | display a center aligned progress bar |
| "Container" | None | variable that will contain the progress info |
| Deinitialization | None | expression to evaluate after expr |
| "Delay" | 2 | minimal number of seconds after which the indicator is printed |
| Initialization | None | expression to evaluate before expr |
| "OuterUpdateInterval" | Automatic | refresh rate of the indicator panel |
| "StopButton" | None | function triggered by a stop button |
| "TimeEstimate" | Indeterminate | initial time estimate |
| "Title" | Automatic | title used in the table |
| UpdateInterval | 0.4 | refresh rate of the indicator values |
Display a generic progress panel:
| In[1]:= |
Display a more detailed progress information:
| In[2]:= |
Display a custom information grid:
| In[3]:= | ![]() |

Display the default panel:
| In[4]:= |
Display custom text:
| In[5]:= |
Display detail information:
| In[6]:= | ![]() |

Display a progress bar:
| In[7]:= | ![]() |

Display elapsed time:
| In[8]:= |

Display remaining time:
| In[9]:= |

Automatically estimate the remaining time using progress information:
| In[10]:= |

| In[11]:= |

Display progress percentage:
| In[12]:= |
Display byte count information:
| In[13]:= |
Display processed and total size:
| In[14]:= | ![]() |
Display processed items:
| In[15]:= |
Specify the total amount of items:
| In[16]:= |
Specify the item name:
| In[17]:= |
Specify the action performed on the items:
| In[18]:= |
Typeset the progress panel as a grid:
| In[19]:= | ![]() |

Mark some keys as optional:
| In[20]:= | ![]() |

By default, the progress panel is printed in a temporary cell:
| In[21]:= |
Specify a "container" variable that will be assigned the panel:
| In[22]:= |
| Out[23]= |
| In[24]:= |
| In[25]:= |
Use integers or string to specify a container that will be automatically created and cleaned up:
| In[26]:= | ![]() |
Mix different containers:
| In[27]:= | ![]() |
By default, the progress panel appears after two seconds:
| In[28]:= |
Have it appearing immediately:
| In[29]:= |
Updating the interpretation of some keys require a redraw of the whole panel:
| In[30]:= | ![]() |
Specify how often the redraw check should be performed:
| In[31]:= | ![]() |
Define a behaviour for when the computation is stopped:
| In[32]:= | ![]() |
Define a stop behaviour using the grid layout:
| In[33]:= | ![]() |

The remaining time can be automatically estimated using a progress key:
| In[34]:= |

| In[35]:= |

If progress information cannot be obtained at runtime, some values can be driven by an initial estimate:
| In[36]:= | ![]() |

The default update interval is picked automatically:
| In[37]:= |
Manually specify an interval:
| In[38]:= |
Build a monitored version of Map:
| In[39]:= | ![]() |
| In[40]:= |
| In[41]:= |
| Out[41]= | ![]() |
Use a different level spec:
| In[42]:= |
| Out[42]= | ![]() |
Create a monitored version of NDSolveValue that can return a partial solution:
| In[43]:= | ![]() |
| Out[43]= | ![]() |
Create a monitored version of NDSolveValue that show the current MemoryInUse[].
Write a function to plot the memory:
| In[44]:= | ![]() |
During the computation, update the progress at each step but save the memory at a lower interval:
| In[45]:= | ![]() |

Make the memory plot optional and use a Dynamic wrapper to force it to update only each 3 seconds:
| In[46]:= | ![]() |

MonitorEvaluate respects the $ProgressReporting setting:
| In[47]:= | ![]() |
| In[48]:= | ![]() |
MonitorEvaluate works similarly to Monitor:
| In[49]:= |
| Out[49]= |
| In[50]:= | ![]() |
| Out[50]= |
Variables are not automatically scoped:
| In[51]:= |
| Out[41]= |
Use delayed assignments or scoping to avoid collisions:
| In[52]:= |
| Out[52]= |
| In[53]:= | ![]() |
| Out[53]= |
This work is licensed under a Creative Commons Attribution 4.0 International License