Spaces:
Runtime error
Runtime error
# Copyright 2018-2022 Streamlit Inc. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
import streamlit as st | |
import inspect | |
import textwrap | |
import numpy as np | |
from typing import Any | |
from streamlit.hello.utils import show_code | |
def animation_demo(): | |
# Interactive Streamlit elements, like these sliders, return their value. | |
# This gives you an extremely simple interaction model. | |
iterations = st.sidebar.slider("Level of detail", 2, 20, 10, 1) | |
separation = st.sidebar.slider("Separation", 0.7, 2.0, 0.7885) | |
# Non-interactive elements return a placeholder to their location | |
# in the app. Here we're storing progress_bar to update it later. | |
progress_bar = st.sidebar.progress(0) | |
# These two elements will be filled in later, so we create a placeholder | |
# for them using st.empty() | |
frame_text = st.sidebar.empty() | |
image = st.empty() | |
m, n, s = 960, 640, 400 | |
x = np.linspace(-m / s, m / s, num=m).reshape((1, m)) | |
y = np.linspace(-n / s, n / s, num=n).reshape((n, 1)) | |
for frame_num, a in enumerate(np.linspace(0.0, 4 * np.pi, 100)): | |
# Here were setting value for these two elements. | |
progress_bar.progress(frame_num) | |
frame_text.text("Frame %i/100" % (frame_num + 1)) | |
# Performing some fractal wizardry. | |
c = separation * np.exp(1j * a) | |
Z = np.tile(x, (n, 1)) + 1j * np.tile(y, (1, m)) | |
C = np.full((n, m), c) | |
M: Any = np.full((n, m), True, dtype=bool) | |
N = np.zeros((n, m)) | |
for i in range(iterations): | |
Z[M] = Z[M] * Z[M] + C[M] | |
M[np.abs(Z) > 2] = False | |
N[M] = i | |
# Update the image placeholder by calling the image() function on it. | |
image.image(1.0 - (N / N.max()), use_column_width=True) | |
# We clear elements by calling empty on them. | |
progress_bar.empty() | |
frame_text.empty() | |
# Streamlit widgets automatically run the script from top to bottom. Since | |
# this button is not connected to any other logic, it just causes a plain | |
# rerun. | |
st.button("Re-run") | |
st.set_page_config(page_title="Animation Demo", page_icon="๐น") | |
st.markdown("# Animation Demo") | |
st.sidebar.header("Animation Demo") | |
st.write( | |
"""This app shows how you can use Streamlit to build cool animations. | |
It displays an animated fractal based on the the Julia Set. Use the slider | |
to tune different parameters.""" | |
) | |
animation_demo() | |
show_code(animation_demo) | |