@st.experimental_singleton
... def foo(bar):
...   # Create and return a non-data object
...   return session
Executes foo
s1 = foo(ref1)
Does not execute foo
Returns cached item by reference, d1 == d2
s2 = foo(ref1)
Different arg, so function foo executes
s3 = foo(ref2)
```
Display progress and status
```python
with st.spinner(text='In progress'):
  time.sleep(5)
  st.success('Done')
st.progress(progress_variable_1_to_100)
st.balloons()
st.error('Error message')
st.warning('Warning message')
st.info('Info message')
st.success('Success message')
st.exception(e)
```
