def __init__(self, index, ambient=[80, 80, 80], specular=[40, 40, 40], emission=[0, 0, 0], diffuse=1, transparency=0, shininess=0.2, **kwargs): self.index = index self.ambient = ambient self.specular = specular self.emission = emission self.diffuse = diffuse self.transparency = transparency self.shininess = shininess self.__index = BoundedIntText(value=index, description='index', min=0) self.__ambient = ColorPicker( value='#' + ''.join(format(v, "02x") for v in ambient), description='ambient') self.__specular = ColorPicker( value='#' + ''.join(format(v, "02x") for v in specular), description='specular') self.__emission = ColorPicker( value='#' + ''.join(format(v, "02x") for v in emission), description='emission') self.__diffuse = FloatSlider(value=diffuse, description='diffuse', min=0, max=3, continuous_update=False) self.__transparency = FloatSlider(value=transparency, description='transparency', min=0, max=1, continuous_update=False) self.__shininess = FloatSlider(value=shininess, description='shininess', min=0, max=1, continuous_update=False) self.__index.observe(self.__on_index_changed, names='value') self.__ambient.observe(self.__on_ambient_changed, names='value') self.__specular.observe(self.__on_specular_changed, names='value') self.__emission.observe(self.__on_emission_changed, names='value') self.__diffuse.observe(self.__on_diffuse_changed, names='value') self.__transparency.observe(self.__on_transparency_changed, names='value') self.__shininess.observe(self.__on_shininess_changed, names='value') kwargs['children'] = [ self.__index, self.__ambient, self.__specular, self.__emission, self.__diffuse, self.__transparency, self.__shininess ] super().__init__(**kwargs)
def init(dummy): global series series = simulate_series(simulation_data) p = interact(plot_data, rho_0=FloatSlider(min=0.01, max=0.2, step=0.01, value=0.01), f=IntSlider(0, 0, 10)) return series
def __init__(self, value, type='Float', min=1, max=10, step=1, **kwargs): self.value = float(value) description = kwargs[ 'name'] if 'no_name' in kwargs and kwargs['no_name'] else 'value' self.__slider = FloatSlider(value, min=min, max=max, step=step, description=description, continuous_update=False) # self.__min_ipt = FloatText(min, description='min') # self.__max_ipt = FloatText(max, description='max') # self.__step_ipt = BoundedFloatText(step, description='step', min=0.01, max=1, step=step) self.__slider.observe(self.__on_slider_changed, names='value') # self.__min_ipt.observe(self.__on_min_changed, names='value') # self.__max_ipt.observe(self.__on_max_changed, names='value') # self.__step_ipt.observe(self.__on_step_changed, names='value') kwargs['children'] = [ self.__slider, # self.__min_ipt, # self.__max_ipt, # self.__step_ipt ] super().__init__(**kwargs)
def __init__(self, min, max, value=0, description=""): # 0 inputs, 1 output. VectorSystem.__init__(self, 0, 1) self.slider = FloatSlider(value=value, description=description, min=min, max=max, continuous_update=True) if get_ipython() is not None: display(self.slider)
def init(dummy): global series global initialised series = simulate_series(simulation_data) if initialised == False: p = interact(plot_data, rho_0=FloatSlider(min=0.01, max=0.2, step=0.01, value=0.01), f=IntSlider(0, 0, 10)) initialised = True
def create_slider(symbol: sp.Symbol) -> "Slider": r"""Create an `int` or `float` slider, depending on Symbol assumptions. The description for the slider is rendered as LaTeX from the `~sympy.core.symbol.Symbol` name. >>> create_slider(sp.Symbol("a")) FloatSlider(value=0.0, description='\\(a\\)') >>> create_slider(sp.Symbol("n0", integer=True)) IntSlider(value=0, description='\\(n_{0}\\)') """ description = Rf"\({sp.latex(symbol)}\)" if symbol.is_integer: return IntSlider(description=description) return FloatSlider(description=description)
def interactive(): """ interactive call of `main` """ interact( main, alpha=FloatSlider(min=0.01, max=24, step=0.01, value=0.4, description='Birth Rate of Prey', style=style, layout=slider_layout), beta=FloatSlider(min=0.01, max=24, step=0.01, value=0.04, description='Death Rate of Prey', style=style, layout=slider_layout), gamma=FloatSlider(min=0.01, max=24, step=0.01, value=0.02, description='Birth Rate of Predator', style=style, layout=slider_layout), delta=FloatSlider(min=0.01, max=24, step=0.01, value=2., description='Death Rate of Predator', style=style, layout=slider_layout), y0_0=FloatSlider(min=0.01, max=200, step=0.01, value=105., description='Initial population Prey', style=style, layout=slider_layout), y0_1=FloatSlider(min=0.01, max=100, step=0.01, value=8., description='Initial population Predator', style=style, layout=slider_layout), my_range=IntRangeSlider(min=0, max=50, step=1, value=[0, 15], description='time interval', style=style, layout=slider_layout), )
def __init__(self, view_pixel_cubes=True, view_coordinates=True, fig_size=(12, 8), coordinates_history=False): self._fig_size = fig_size self._view_pixel_cubes = view_pixel_cubes self._view_coordinates = view_coordinates self._coordinates_history = coordinates_history # Fields self.fig = self.canvas = self.axes = None # Make widgets rgb_widgets = [] for text in ["Red", "Green", "Blue"]: rgb_widgets.append( FloatSlider( value=0.0, min=0, max=1.0, step=0.01, description='{}:'.format(text), disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='.2f', )) self.rgb_widgets = rgb_widgets # Make widget box self.rgb_box = VBox(rgb_widgets) # Assign pixel-viewer to sliders events for val in self.rgb_box.children: val.observe(self.show_pixel) # Get RGB-values self.rgb = [val.value for val in self.rgb_widgets] # Start when widgets are displayed self.rgb_box.on_displayed(self.show_pixel)
def init(button): global series global initialised series = simulate_series(simulation_data) if initialised == False: #p = interact(plot_data, rho_0=FloatSlider(min=0.01, max=0.2, step=0.01, value=0.01, continuous_update=False), f=IntSlider(min=0, max=10, step=1, value=0,continuous_update=False)) interact(plot_data, rho_0=FloatSlider(min=0.01, max=0.2, step=0.01, value=0.01, continuous_update=False), f=IntSlider(min=0, max=10, step=1, value=0, continuous_update=False)) button.description = 'Reset' initialised = True
def julia_plot(f=None, **kwds): r""" Plots the Julia set of a given polynomial ``f``. Users can specify whether they would like to display the Mandelbrot side by side with the Julia set with the ``mandelbrot`` argument. If ``f`` is not specified, this method defaults to `f(z) = z^2-1`. The Julia set of a polynomial ``f`` is the set of complex numbers `z` for which the function `f(z)` is bounded under iteration. The Julia set can be visualized by plotting each point in the set in the complex plane. Julia sets are examples of fractals when plotted in the complex plane. ALGORITHM: Let `R_c = \bigl(1 + \sqrt{1 + 4|c|}\bigr)/2` if the polynomial is of the form `f(z) = z^2 + c`; otherwise, let `R_c = 2`. For every `p \in \mathbb{C}`, if `|f^{k}(p)| > R_c` for some `k \geq 0`, then `f^{n}(p) \to \infty`. Let `N` be the maximum number of iterations. Compute the first `N` points on the orbit of `p` under `f`. If for any `k < N`, `|f^{k}(p)| > R_c`, we stop the iteration and assign a color to the point `p` based on how quickly `p` escaped to infinity under iteration of `f`. If `|f^{i}(p)| \leq R_c` for all `i \leq N`, we assume `p` is in the Julia set and assign the point `p` the color black. INPUT: - ``f`` -- input polynomial (optional - default: ``z^2 - 1``). - ``period`` -- list (optional - default: ``None``), returns the Julia set for a random `c` value with the given (formal) cycle structure. - ``mandelbrot`` -- boolean (optional - default: ``True``), when set to ``True``, an image of the Mandelbrot set is appended to the right of the Julia set. - ``point_color`` -- RGB color (optional - default: ``'tomato'``), color of the point `c` in the Mandelbrot set (any valid input for Color). - ``x_center`` -- double (optional - default: ``-1.0``), Real part of center point. - ``y_center`` -- double (optional - default: ``0.0``), Imaginary part of center point. - ``image_width`` -- double (optional - default: ``4.0``), width of image in the complex plane. - ``max_iteration`` -- long (optional - default: ``500``), maximum number of iterations the map `f(z)`. - ``pixel_count`` -- long (optional - default: ``500``), side length of image in number of pixels. - ``base_color`` -- hex color (optional - default: ``'steelblue'``), color used to determine the coloring of set (any valid input for Color). - ``level_sep`` -- long (optional - default: 1), number of iterations between each color level. - ``number_of_colors`` -- long (optional - default: 30), number of colors used to plot image. - ``interact`` -- boolean (optional - default: ``False``), controls whether plot will have interactive functionality. OUTPUT: 24-bit RGB image of the Julia set in the complex plane. .. TODO:: Implement the side-by-side Mandelbrot-Julia plots for general one-parameter families of polynomials. EXAMPLES: The default ``f`` is `z^2 - 1`:: sage: julia_plot() 1001x500px 24-bit RGB image To display only the Julia set, set ``mandelbrot`` to ``False``:: sage: julia_plot(mandelbrot=False) 500x500px 24-bit RGB image :: sage: R.<z> = CC[] sage: f = z^3 - z + 1 sage: julia_plot(f) 500x500px 24-bit RGB image To display an interactive plot of the Julia set in the Notebook, set ``interact`` to ``True``. (This is only implemented for polynomials of the form ``f = z^2 + c``):: sage: julia_plot(interact=True) interactive(children=(FloatSlider(value=-1.0, description=u'Real c'... :: sage: R.<z> = CC[] sage: f = z^2 + 1/2 sage: julia_plot(f,interact=True) interactive(children=(FloatSlider(value=0.5, description=u'Real c'... To return the Julia set of a random `c` value with (formal) cycle structure `(2,3)`, set ``period = [2,3]``:: sage: julia_plot(period=[2,3]) 1001x500px 24-bit RGB image To return all of the Julia sets of `c` values with (formal) cycle structure `(2,3)`:: sage: period = [2,3] # not tested ....: R.<c> = QQ[] ....: P.<x,y> = ProjectiveSpace(R,1) ....: f = DynamicalSystem([x^2+c*y^2, y^2]) ....: L = f.dynatomic_polynomial(period).subs({x:0,y:1}).roots(ring=CC) ....: c_values = [k[0] for k in L] ....: for c in c_values: ....: julia_plot(c) Polynomial maps can be defined over a polynomial ring or a fraction field, so long as ``f`` is polynomial:: sage: R.<z> = CC[] sage: f = z^2 - 1 sage: julia_plot(f) 1001x500px 24-bit RGB image :: sage: R.<z> = CC[] sage: K = R.fraction_field(); z = K.gen() sage: f = z^2-1 sage: julia_plot(f) 1001x500px 24-bit RGB image Interact functionality is not implemented if the polynomial is not of the form `f = z^2 + c`:: sage: R.<z> = CC[] sage: f = z^3 + 1 sage: julia_plot(f, interact=True) Traceback (most recent call last): ... NotImplementedError: The interactive plot is only implemented for ... """ # extract keyword arguments period = kwds.pop("period", None) mandelbrot = kwds.pop("mandelbrot", True) point_color = kwds.pop("point_color", 'tomato') x_center = kwds.pop("x_center", 0.0) y_center = kwds.pop("y_center", 0.0) image_width = kwds.pop("image_width", 4.0) max_iteration = kwds.pop("max_iteration", 500) pixel_count = kwds.pop("pixel_count", 500) base_color = kwds.pop("base_color", 'steelblue') level_sep = kwds.pop("level_sep", 1) number_of_colors = kwds.pop("number_of_colors", 30) interacts = kwds.pop("interact", False) f_is_default_after_all = None if period: # pick a random c with the specified period R = PolynomialRing(CC, 'c') c = R.gen() x, y = ProjectiveSpace(R, 1, 'x,y').gens() F = DynamicalSystem([x**2 + c * y**2, y**2]) L = F.dynatomic_polynomial(period).subs({x: 0, y: 1}).roots(ring=CC) c = L[randint(0, len(L) - 1)][0] base_color = Color(base_color) point_color = Color(point_color) EPS = 0.00001 if f is not None and period is None: # f user-specified and no period given # try to coerce f to live in a polynomial ring S = PolynomialRing(CC, names='z') z = S.gen() try: f_poly = S(f) except TypeError: R = f.parent() if not (R.is_integral_domain() and (CC.is_subring(R) or CDF.is_subring(R))): raise ValueError('Given `f` must be a complex polynomial.') else: raise NotImplementedError( 'Julia sets not implemented for rational functions.') if (f_poly - z * z) in CC: # f is specified and of the form z^2 + c. f_is_default_after_all = True c = f_poly - z * z else: # f is specified and not of the form z^2 + c if interacts: raise NotImplementedError( "The interactive plot is only implemented for " "polynomials of the form f = z^2 + c.") else: return general_julia(f_poly, x_center, y_center, image_width, max_iteration, pixel_count, level_sep, number_of_colors, base_color) # otherwise we can use fast_julia_plot for z^2 + c if f_is_default_after_all or f is None or period is not None: # specify default c = -1 value if f and period were not specified if not f_is_default_after_all and period is None: c = -1 c = CC(c) c_real = c.real() c_imag = c.imag() if interacts: # set widgets from ipywidgets.widgets import FloatSlider, IntSlider, \ ColorPicker, interact widgets = dict( c_real=FloatSlider(min=-2.0, max=2.0, step=EPS, value=c_real, description="Real c"), c_imag=FloatSlider(min=-2.0, max=2.0, step=EPS, value=c_imag, description="Imag c"), x_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=x_center, description="Real center"), y_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=y_center, description="Imag center"), image_width=FloatSlider(min=EPS, max=4.0, step=EPS, value=image_width, description="Width"), max_iteration=IntSlider(min=0, max=1000, value=max_iteration, description="Iterations"), pixel_count=IntSlider(min=10, max=1000, value=pixel_count, description="Pixels"), level_sep=IntSlider(min=1, max=20, value=level_sep, description="Color sep"), color_num=IntSlider(min=1, max=100, value=number_of_colors, description="# Colors"), base_color=ColorPicker(value=base_color.html_color(), description="Base color"), ) if mandelbrot: widgets["point_color"] = ColorPicker( value=point_color.html_color(), description="Point color") return interact(**widgets).widget(julia_helper) else: return interact(**widgets).widget(fast_julia_plot) elif mandelbrot: # non-interactive with mandelbrot return julia_helper(c_real, c_imag, x_center, y_center, image_width, max_iteration, pixel_count, level_sep, number_of_colors, base_color, point_color) else: # non-interactive without mandelbrot return fast_julia_plot(c_real, c_imag, x_center, y_center, image_width, max_iteration, pixel_count, level_sep, number_of_colors, base_color)
def init(): series = simulate_series(simulation_data) p = interact(plot_data, rho_0=FloatSlider(min=0.01, max=0.2, step=0.01, value=0.01), f=IntSlider(0, 0, 10))
slider = plt.show() interact(main, initial_salary=IntSlider(min=0, max=25000, step=500, value=15000, description='Initial Salary', style=style, layout=slider_layout), savings_ratio=FloatSlider(min=0, max=1, step=0.01, value=0.2, description='Savings Ratio', style=style, layout=slider_layout), extraordinary_expenses=FloatSlider( min=0, max=1, step=0.005, description='Extraordinary Expenses', style=style, value=0.3, layout=slider_layout), fixed_costs=IntSlider(min=1, max=1000, step=1, value=100,
x = np.arange(-3, 3, delta) y = np.ones_like(x) * y0 z = (x**2) + np.sin(y**2) ax_3d.plot(x, y, z, color='green', linestyle='--', linewidth=2) # change the viewing angle of the 3D plot ax_3d.view_init(55, 65) plt.draw() # show the plot plt.show() # try it out interact(plot_surface_problem3, x0=FloatSlider(min=-3, max=3, step=0.1, continuous_update=False), y0=FloatSlider(min=-3, max=3, step=0.1, continuous_update=False)) # ## 3.4) What is the partial derivative with respect to x? # What is the partial derivative of $f(x, y)$ with respect to $x$? # # Answer: # # $$ # \frac{\partial}{\partial x} f(x, y) = 2x # $$ # # ## 3.5) Plot the partial derivative with respect to x # Now plot the partial derivative $\partial f/\partial x$ (in 2D).
def floatslider(*args, **kwargs): s = FloatSlider(*args, readout_format='.3f', **kwargs) s.layout.width = '70%' return s
def test_continuous_update(self) -> None: slider = FloatSlider() assert slider.continuous_update is True slider.continuous_update = False assert slider.continuous_update is False
def test_value(self) -> None: slider = FloatSlider(min=5, max=7, step=0.1) assert slider.value == slider.min
def mandelbrot_plot(x_center=-1.0, y_center=0.0, image_width=4.0, max_iteration=500, pixel_count=500, base_color='steelblue', iteration_level=1, number_of_colors=30, interact=False): r""" Interactive plot of the Mandelbrot set for the map `Q_c(z) = z^2 + c`. ALGORITHM: Let each pixel in the image be a point `c \in \mathbb{C}` and define the map `Q_c(z) = z^2 + c`. If `|Q_{c}^{k}(c)| > 2` for some `k \geq 0`, it follows that `Q_{c}^{n}(c) \to \infty`. Let `N` be the maximum number of iterations. Compute the first `N` points on the orbit of `0` under `Q_c`. If for any `k < N`, `|Q_{c}^{k}(0)| > 2`, we stop the iteration and assign a color to the point `c` based on how quickly `0` escaped to infinity under iteration of `Q_c`. If `|Q_{c}^{i}(0)| \leq 2` for all `i \leq N`, we assume `c` is in the Mandelbrot set and assign the point `c` the color black. REFERENCE: [Dev2005]_ INPUT: - ``x_center`` -- double (optional - default: ``-1.0``), Real part of center point. - ``y_center`` -- double (optional - default: ``0.0``), Imaginary part of center point. - ``image_width`` -- double (optional - default: ``4.0``), width of image in the complex plane. - ``max_iteration`` -- long (optional - default: ``500``), maximum number of iterations the map ``Q_c(z)``. - ``pixel_count`` -- long (optional - default: ``500``), side length of image in number of pixels. - ``base_color`` -- RGB color (optional - default: ``'steelblue'``) color used to determine the coloring of set (any valid input for Color). - ``iteration_level`` -- long (optional - default: 1) number of iterations between each color level. - ``number_of_colors`` -- long (optional - default: 30) number of colors used to plot image. - ``interact`` -- boolean (optional - default: ``False``), controls whether plot will have interactive functionality. OUTPUT: 24-bit RGB image of the Mandelbrot set in the complex plane. EXAMPLES: :: sage: mandelbrot_plot() 500x500px 24-bit RGB image :: sage: mandelbrot_plot(pixel_count=1000) 1000x1000px 24-bit RGB image :: sage: mandelbrot_plot(x_center=-1.11, y_center=0.2283, image_width=1/128, ....: max_iteration=2000, number_of_colors=500, base_color=[40, 100, 100]) 500x500px 24-bit RGB image To display an interactive plot of the Mandelbrot set in the Jupyter Notebook, set ``interact`` to ``True``:: sage: mandelbrot_plot(interact=True) interactive(children=(FloatSlider(value=-1.0, description=u'Real center'... :: sage: mandelbrot_plot(interact=True, x_center=-0.75, y_center=0.25, ....: image_width=1/2, number_of_colors=75) interactive(children=(FloatSlider(value=-0.75, description=u'Real center'... """ base_color = Color(base_color) if interact: from ipywidgets.widgets import FloatSlider, IntSlider, ColorPicker, interact widgets = dict( x_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=x_center, description="Real center"), y_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=y_center, description="Imag center"), image_width=FloatSlider(min=EPS, max=4.0, step=EPS, value=image_width, description="Image width"), max_iteration=IntSlider(min=0, max=600, value=max_iteration, description="Iterations"), pixel_count=IntSlider(min=10, max=600, value=pixel_count, description="Pixels"), level_sep=IntSlider(min=1, max=20, value=iteration_level, description="Color sep"), color_num=IntSlider(min=1, max=100, value=number_of_colors, description="# Colors"), base_color=ColorPicker(value=base_color.html_color(), description="Base color"), ) return interact(**widgets).widget(fast_mandelbrot_plot) return fast_mandelbrot_plot(x_center, y_center, image_width, max_iteration, pixel_count, iteration_level, number_of_colors, base_color)
initialised = True ############################################################################### style = {'description_width': '30%'} nn_widget = IntSlider(min=100, max=2000, step=50, value=1000, description='network size', style=style) np_widget = FloatSlider(min=0.001, max=0.05, step=0.001, value=0.006, description='network density', style=style) D_widget = IntSlider(min=10, max=100, step=1, value=50, description='D - number of disease related genes', style=style) p_widget = FloatSlider(min=0.0, max=1.0, step=0.05, value=0.3, description='p - clustering', style=style)
value=0, continuous_update=False)) button.description = 'Reset' initialised = True ############################################################################### nn_widget = IntSlider(min=100, max=2000, step=100, value=1000, description='network size') np_widget = FloatSlider(min=0.005, max=0.05, step=0.005, value=0.005, description='network density') D_widget = IntSlider(min=10, max=100, step=1, value=50, description='D - number of disease related genes') p_widget = FloatSlider(min=0.0, max=1.0, step=0.1, value=0.5, description='p - clustering') P_widget = IntSlider(min=5,
step=0.01, value=0.01, continuous_update=False), f=IntSlider(min=0, max=10, step=1, value=0, continuous_update=False)) button_init.description = 'Reset' initialised = True ############################################################################### nn_widget = IntSlider(min=100, max=2000, step=100, value=1000) np_widget = FloatSlider(min=0.005, max=0.05, step=0.005, value=0.005) D_widget = IntSlider(min=10, max=100, step=1, value=50) p_widget = FloatSlider(min=0.0, max=1.0, step=0.1, value=0.5) P_widget = IntSlider(min=5, max=50, step=5, value=20) A_widget = FloatSlider(min=0.0, max=1.0, step=0.1, value=0.5) params = interact(set_params, nn=nn_widget, np=np_widget, D=D_widget, p=p_widget, P=P_widget, A=A_widget)
def mandelbrot_plot(f=None, **kwds): r""" Plot of the Mandelbrot set for a one parameter family of polynomial maps. The family `f_c(z)` must have parent ``R`` of the form ``R.<z,c> = CC[]``. REFERENCE: [Dev2005]_ INPUT: - ``f`` -- map (optional - default: ``z^2 + c``), polynomial family used to plot the Mandelbrot set. - ``parameter`` -- variable (optional - default: ``c``), parameter variable used to plot the Mandelbrot set. - ``x_center`` -- double (optional - default: ``-1.0``), Real part of center point. - ``y_center`` -- double (optional - default: ``0.0``), Imaginary part of center point. - ``image_width`` -- double (optional - default: ``4.0``), width of image in the complex plane. - ``max_iteration`` -- long (optional - default: ``500``), maximum number of iterations the map ``f_c(z)``. - ``pixel_count`` -- long (optional - default: ``500``), side length of image in number of pixels. - ``base_color`` -- RGB color (optional - default: ``[40, 40, 40]``) color used to determine the coloring of set. - ``level_sep`` -- long (optional - default: 1) number of iterations between each color level. - ``number_of_colors`` -- long (optional - default: 30) number of colors used to plot image. - ``interact`` -- boolean (optional - default: ``False``), controls whether plot will have interactive functionality. OUTPUT: 24-bit RGB image of the Mandelbrot set in the complex plane. EXAMPLES: :: sage: mandelbrot_plot() 500x500px 24-bit RGB image :: sage: mandelbrot_plot(pixel_count=1000) 1000x1000px 24-bit RGB image :: sage: mandelbrot_plot(x_center=-1.11, y_center=0.2283, image_width=1/128, # long time ....: max_iteration=2000, number_of_colors=500, base_color=[40, 100, 100]) 500x500px 24-bit RGB image To display an interactive plot of the Mandelbrot in the Notebook, set ``interact`` to ``True``. (This is only implemented for ``z^2 + c``):: sage: mandelbrot_plot(interact=True) interactive(children=(FloatSlider(value=0.0, description=u'Real center', max=1.0, min=-1.0, step=1e-05), FloatSlider(value=0.0, description=u'Imag center', max=1.0, min=-1.0, step=1e-05), FloatSlider(value=4.0, description=u'Width', max=4.0, min=1e-05, step=1e-05), IntSlider(value=500, description=u'Iterations', max=1000), IntSlider(value=500, description=u'Pixels', max=1000, min=10), IntSlider(value=1, description=u'Color sep', max=20, min=1), IntSlider(value=30, description=u'# Colors', min=1), ColorPicker(value='#ff6347', description=u'Base color'), Output()), _dom_classes=(u'widget-interact',)) :: sage: mandelbrot_plot(interact=True, x_center=-0.75, y_center=0.25, ....: image_width=1/2, number_of_colors=75) interactive(children=(FloatSlider(value=-0.75, description=u'Real center', max=1.0, min=-1.0, step=1e-05), FloatSlider(value=0.25, description=u'Imag center', max=1.0, min=-1.0, step=1e-05), FloatSlider(value=0.5, description=u'Width', max=4.0, min=1e-05, step=1e-05), IntSlider(value=500, description=u'Iterations', max=1000), IntSlider(value=500, description=u'Pixels', max=1000, min=10), IntSlider(value=1, description=u'Color sep', max=20, min=1), IntSlider(value=75, description=u'# Colors', min=1), ColorPicker(value='#ff6347', description=u'Base color'), Output()), _dom_classes=(u'widget-interact',)) Polynomial maps can be defined over a multivariate polynomial ring or a univariate polynomial ring tower:: sage: R.<z,c> = CC[] sage: f = z^2 + c sage: mandelbrot_plot(f) 500x500px 24-bit RGB image :: sage: B.<c> = CC[] sage: R.<z> = B[] sage: f = z^5 + c sage: mandelbrot_plot(f) 500x500px 24-bit RGB image When the polynomial is defined over a multivariate polynomial ring it is necessary to specify the parameter variable (default parameter is ``c``):: sage: R.<a,b> = CC[] sage: f = a^2 + b^3 sage: mandelbrot_plot(f, parameter=b) 500x500px 24-bit RGB image Interact functionality is not implemented for general polynomial maps:: sage: R.<z,c> = CC[] sage: f = z^3 + c sage: mandelbrot_plot(f, interact=True) Traceback (most recent call last): ... NotImplementedError: Interact only implemented for z^2 + c """ parameter = kwds.pop("parameter", None) x_center = kwds.pop("x_center", 0.0) y_center = kwds.pop("y_center", 0.0) image_width = kwds.pop("image_width", 4.0) max_iteration = kwds.pop("max_iteration", None) pixel_count = kwds.pop("pixel_count", 500) level_sep = kwds.pop("level_sep", 1) number_of_colors = kwds.pop("number_of_colors", 30) interacts = kwds.pop("interact", False) base_color = kwds.pop("base_color", Color('tomato')) # Check if user specified maximum number of iterations given_iterations = True if max_iteration is None: # Set default to 500 for z^2 + c map max_iteration = 500 given_iterations = False from ipywidgets.widgets import FloatSlider, IntSlider, ColorPicker, interact widgets = dict( x_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=x_center, description="Real center"), y_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=y_center, description="Imag center"), image_width=FloatSlider(min=EPS, max=4.0, step=EPS, value=image_width, description="Width"), max_iteration=IntSlider(min=0, max=1000, value=max_iteration, description="Iterations"), pixel_count=IntSlider(min=10, max=1000, value=pixel_count, description="Pixels"), level_sep=IntSlider(min=1, max=20, value=level_sep, description="Color sep"), color_num=IntSlider(min=1, max=100, value=number_of_colors, description="# Colors"), base_color=ColorPicker(value=Color(base_color).html_color(), description="Base color"), ) if f is None: # Quadratic map f = z^2 + c if interacts: return interact(**widgets).widget(fast_mandelbrot_plot) else: return fast_mandelbrot_plot(x_center, y_center, image_width, max_iteration, pixel_count, level_sep, number_of_colors, base_color) else: if parameter is None: c = var('c') parameter = c P = f.parent() if P.base_ring() is CC or P.base_ring() is CDF: if is_FractionField(P): raise NotImplementedError( "coefficients must be polynomials in the parameter") gen_list = list(P.gens()) parameter = gen_list.pop(gen_list.index(parameter)) variable = gen_list.pop() elif P.base_ring().base_ring() is CC or P.base_ring().base_ring( ) is CDF: if is_FractionField(P.base_ring()): raise NotImplementedError( "coefficients must be polynomials in the parameter") phi = P.flattening_morphism() f = phi(f) gen_list = list(f.parent().gens()) parameter = gen_list.pop(gen_list.index(parameter)) variable = gen_list.pop() elif P.base_ring() in FunctionFields(): raise NotImplementedError( "coefficients must be polynomials in the parameter") else: raise ValueError("base ring must be a complex field") if f == variable**2 + parameter: # Quadratic map f = z^2 + c if interacts: return interact(**widgets).widget(fast_mandelbrot_plot) else: return fast_mandelbrot_plot(x_center, y_center, image_width, max_iteration, pixel_count, level_sep, number_of_colors, base_color) else: if interacts: raise NotImplementedError( "Interact only implemented for z^2 + c") else: # Set default of max_iteration to 50 for general polynomial maps # This prevents the function from being very slow by default if not given_iterations: max_iteration = 50 # Mandelbrot of General Polynomial Map return polynomial_mandelbrot(f, parameter, x_center, y_center, \ image_width, max_iteration, pixel_count, level_sep, \ number_of_colors, base_color)
def test_step(self) -> None: slider = FloatSlider(min=5, max=7) assert slider.step == 0.1 slider.min = 6 assert slider.step == 0.1
def julia_plot(c=-1, x_center=0.0, y_center=0.0, image_width=4.0, max_iteration=500, pixel_count=500, base_color='steelblue', iteration_level=1, number_of_colors=50, point_color='yellow', interact=False, mandelbrot=True, period=None): r""" Plots the Julia set of a given complex `c` value. Users can specify whether they would like to display the Mandelbrot side by side with the Julia set. The Julia set of a given `c` value is the set of complex numbers for which the function `Q_c(z)=z^2+c` is bounded under iteration. The Julia set can be visualized by plotting each point in the set in the complex plane. Julia sets are examples of fractals when plotted in the complex plane. ALGORITHM: Define the map `Q_c(z) = z^2 + c` for some `c \in \mathbb{C}`. For every `p \in \mathbb{C}`, if `|Q_{c}^{k}(p)| > 2` for some `k \geq 0`, then `Q_{c}^{n}(p) \to \infty`. Let `N` be the maximum number of iterations. Compute the first `N` points on the orbit of `p` under `Q_c`. If for any `k < N`, `|Q_{c}^{k}(p)| > 2`, we stop the iteration and assign a color to the point `p` based on how quickly `p` escaped to infinity under iteration of `Q_c`. If `|Q_{c}^{i}(p)| \leq 2` for all `i \leq N`, we assume `p` is in the Julia set and assign the point `p` the color black. INPUT: - ``c`` -- complex (optional - default: ``-1``), complex point `c` that determines the Julia set. - ``period`` -- list (optional - default: ``None``), returns the Julia set for a random `c` value with the given (formal) cycle structure. - ``mandelbrot`` -- boolean (optional - default: ``True``), when set to ``True``, an image of the Mandelbrot set is appended to the right of the Julia set. - ``point_color`` -- RGB color (optional - default: ``'tomato'``), color of the point `c` in the Mandelbrot set (any valid input for Color). - ``x_center`` -- double (optional - default: ``-1.0``), Real part of center point. - ``y_center`` -- double (optional - default: ``0.0``), Imaginary part of center point. - ``image_width`` -- double (optional - default: ``4.0``), width of image in the complex plane. - ``max_iteration`` -- long (optional - default: ``500``), maximum number of iterations the map `Q_c(z)`. - ``pixel_count`` -- long (optional - default: ``500``), side length of image in number of pixels. - ``base_color`` -- RGB color (optional - default: ``'steelblue'``), color used to determine the coloring of set (any valid input for Color). - ``iteration_level`` -- long (optional - default: 1), number of iterations between each color level. - ``number_of_colors`` -- long (optional - default: 30), number of colors used to plot image. - ``interact`` -- boolean (optional - default: ``False``), controls whether plot will have interactive functionality. OUTPUT: 24-bit RGB image of the Julia set in the complex plane. EXAMPLES:: sage: julia_plot() 1001x500px 24-bit RGB image To display only the Julia set, set ``mandelbrot`` to ``False``:: sage: julia_plot(mandelbrot=False) 500x500px 24-bit RGB image To display an interactive plot of the Julia set in the Notebook, set ``interact`` to ``True``:: sage: julia_plot(interact=True) interactive(children=(FloatSlider(value=-1.0, description=u'Real c'... To return the Julia set of a random `c` value with (formal) cycle structure `(2,3)`, set ``period = [2,3]``:: sage: julia_plot(period=[2,3]) 1001x500px 24-bit RGB image To return all of the Julia sets of `c` values with (formal) cycle structure `(2,3)`:: sage: period = [2,3] # not tested ....: R.<c> = QQ[] ....: P.<x,y> = ProjectiveSpace(R,1) ....: f = DynamicalSystem([x^2+c*y^2, y^2]) ....: L = f.dynatomic_polynomial(period).subs({x:0,y:1}).roots(ring=CC) ....: c_values = [k[0] for k in L] ....: for c in c_values: ....: julia_plot(c) """ if period is not None: R = PolynomialRing(QQ, 'c') c = R.gen() x, y = ProjectiveSpace(R, 1, 'x,y').gens() f = DynamicalSystem([x**2 + c * y**2, y**2]) L = f.dynatomic_polynomial(period).subs({x: 0, y: 1}).roots(ring=CC) c = L[randint(0, len(L) - 1)][0] c = CC(c) c_real = c.real() c_imag = c.imag() base_color = Color(base_color) point_color = Color(point_color) if interact: from ipywidgets.widgets import FloatSlider, IntSlider, ColorPicker, interact widgets = dict( c_real=FloatSlider(min=-2.0, max=2.0, step=EPS, value=c_real, description="Real c"), c_imag=FloatSlider(min=-2.0, max=2.0, step=EPS, value=c_imag, description="Imag c"), x_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=x_center, description="Real center"), y_center=FloatSlider(min=-1.0, max=1.0, step=EPS, value=y_center, description="Imag center"), image_width=FloatSlider(min=EPS, max=4.0, step=EPS, value=image_width, description="Image width"), max_iteration=IntSlider(min=0, max=600, value=max_iteration, description="Iterations"), pixel_count=IntSlider(min=10, max=600, value=pixel_count, description="Pixels"), level_sep=IntSlider(min=1, max=20, value=iteration_level, description="Color sep"), color_num=IntSlider(min=1, max=100, value=number_of_colors, description="# Colors"), base_color=ColorPicker(value=base_color.html_color(), description="Base color"), ) if mandelbrot: widgets["point_color"] = ColorPicker( value=point_color.html_color(), description="Point color") return interact(**widgets).widget(julia_helper) else: return interact(**widgets).widget(fast_julia_plot) if mandelbrot: return julia_helper(c_real, c_imag, x_center, y_center, image_width, max_iteration, pixel_count, iteration_level, number_of_colors, base_color, point_color) else: return fast_julia_plot(c_real, c_imag, x_center, y_center, image_width, max_iteration, pixel_count, iteration_level, number_of_colors, base_color)