def get_parametric_curve(self, function: Callable[[float], np.ndarray], **kwargs) -> ParametricCurve: dim = self.dimension graph = ParametricCurve( lambda t: self.coords_to_point(*function(t)[:dim]), **kwargs) graph.underlying_function = function return graph
def get_graph(self, function, x_range=None, **kwargs): t_range = np.array(self.x_range, dtype=float) if x_range is not None: t_range[:len(x_range)] = x_range # For axes, the third coordinate of x_range indicates # tick frequency. But for functions, it indicates a # sample frequency if x_range is None or len(x_range) < 3: t_range[2] /= self.num_sampled_graph_points_per_tick t_range[0] = kwargs.pop("x_min", t_range[0]) t_range[1] = kwargs.pop("x_max", t_range[1]) ''' x_min = kwargs.pop("x_min", self.x_min) x_max = kwargs.pop("x_max", self.x_max) ''' graph = ParametricCurve(lambda t: self.c2p(t, function(t)), t_range=t_range, **kwargs) ''' graph = ParametricFunction( lambda t: self.coords_to_point(t, function(t)), t_min=x_min, t_max=x_max, **kwargs ) ''' graph.underlying_function = function return graph
def get_parametric_curve(self, function, **kwargs): dim = self.dimension graph = ParametricCurve( lambda t: self.coords_to_point(*function(t)[:dim]), **kwargs ) graph.underlying_function = function return graph
def get_graph(self, function, x_range=None, **kwargs): if x_range is None: x_range = self.x_range graph = ParametricCurve(lambda t: self.coords_to_point(t, function(t)), t_range=x_range, **kwargs) graph.underlying_function = function return graph
def get_graph(self, function, x_range=None, **kwargs): t_range = np.array(self.x_range, dtype=float) if x_range is not None: t_range[:len(x_range)] = x_range # For axes, the third coordinate of x_range indicates # tick frequency. But for functions, it indicates a # sample frequency if x_range is None or len(x_range) < 3: t_range[2] /= self.num_sampled_graph_points_per_tick graph = ParametricCurve(lambda t: self.c2p(t, function(t)), t_range=t_range, **kwargs) graph.underlying_function = function return graph
def input_to_graph_point(self, x: float, graph: ParametricCurve) -> np.ndarray | None: if hasattr(graph, "underlying_function"): return self.coords_to_point(x, graph.underlying_function(x)) else: alpha = binary_search( function=lambda a: self.point_to_coords( graph.quick_point_from_proportion(a))[0], target=x, lower_bound=self.x_range[0], upper_bound=self.x_range[1], ) if alpha is not None: return graph.quick_point_from_proportion(alpha) else: return None
def get_graph(self, func, color=None, x_min=None, x_max=None, **kwargs): if color is None: color = next(self.default_graph_colors_cycle) if x_min is None: x_min = self.x_min if x_max is None: x_max = self.x_max def parameterized_function(alpha): x = interpolate(x_min, x_max, alpha) y = func(x) if not np.isfinite(y): y = self.y_max return self.coords_to_point(x, y) graph = ParametricCurve(parameterized_function, color=color, **kwargs) graph.underlying_function = func return graph