Example #1
0
    def _interpret_args(args):
        interval_wrong_order = "PlotInterval %s was given before any function(s)."
        interpret_error = "Could not interpret %s as a function or interval."

        functions, intervals = [], []
        if isinstance(args[0], GeometryEntity):
            for coords in list(args[0].arbitrary_point()):
                functions.append(coords)
            intervals.append(PlotInterval.try_parse(args[0].plot_interval()))
        else:
            for a in args:
                i = PlotInterval.try_parse(a)
                if i is not None:
                    if len(functions) == 0:
                        raise ValueError(interval_wrong_order % (str(i)))
                    else:
                        intervals.append(i)
                else:
                    if is_sequence(a, include=str):
                        raise ValueError(interpret_error % (str(a)))
                    try:
                        f = sympify(a)
                        functions.append(f)
                    except:
                        raise ValueError(interpret_error % str(a))

        return functions, intervals
Example #2
0
    def _interpret_args(args):
        interval_wrong_order = "PlotInterval %s was given before any function(s)."
        interpret_error = "Could not interpret %s as a function or interval."

        functions, intervals = [], []
        if isinstance(args[0], GeometryEntity):
            for coords in list(args[0].arbitrary_point()):
                functions.append(coords)
            intervals.append(PlotInterval.try_parse(args[0].plot_interval()))
        else:
            for a in args:
                i = PlotInterval.try_parse(a)
                if i is not None:
                    if len(functions) == 0:
                        raise ValueError(interval_wrong_order % (str(i)))
                    else:
                        intervals.append(i)
                else:
                    if is_sequence(a, include=str):
                        raise ValueError(interpret_error % (str(a)))
                    try:
                        f = sympify(a)
                        functions.append(f)
                    except:
                        raise ValueError(interpret_error % str(a))

        return functions, intervals
Example #3
0
    def _init_mode(cls):
        """
        Initializes the plot mode based on
        the 'mode-specific parameters' above.
        Only intended to be called by
        PlotMode._register(). To use a mode without
        registering it, you can directly call
        ModeSubclass._init_mode().
        """
        def symbols_list(symbol_str):
            return [Symbol(s) for s in symbol_str]

        # Convert the vars strs into
        # lists of symbols.
        cls.i_vars = symbols_list(cls.i_vars)
        cls.d_vars = symbols_list(cls.d_vars)

        # Var count is used often, calculate
        # it once here
        cls.i_var_count = len(cls.i_vars)
        cls.d_var_count = len(cls.d_vars)

        if cls.i_var_count > PlotMode._i_var_max:
            raise ValueError(var_count_error(True, False))
        if cls.d_var_count > PlotMode._d_var_max:
            raise ValueError(var_count_error(False, False))

        # Try to use first alias as primary_alias
        if len(cls.aliases) > 0:
            cls.primary_alias = cls.aliases[0]
        else:
            cls.primary_alias = cls.__name__

        di = cls.intervals
        if len(di) != cls.i_var_count:
            raise ValueError("Plot mode must provide a "
                             "default interval for each i_var.")
        for i in range(cls.i_var_count):
            assert len(di[i]) == 3  # default intervals
            # must be given
            # [min,max,steps]
            #
            # (no var, but they
            # must be in the same
            # order as i_vars)

            # Initialize an incomplete interval,
            # to later be filled with a var when
            # the mode is instantiated.
            di[i] = PlotInterval(None, *di[i])

        # To prevent people from using modes
        # without these required fields set up.
        cls._was_initialized = True
Example #4
0
 def _fill_intervals(self, intervals):
     # copy default intervals
     self.intervals = [PlotInterval(i) for i in self.intervals]
     # track i_vars used so far
     v_used = []
     # fill copy of default
     # intervals with given info
     for i in range(len(intervals)):
         self.intervals[i].fill_from(intervals[i])
         if self.intervals[i].v is not None:
             v_used.append(self.intervals[i].v)
     # Find any orphan intervals and
     # assign them i_vars
     for i in range(len(self.intervals)):
         if self.intervals[i].v is None:
             u = [v for v in self.i_vars if v not in v_used]
             assert len(u) != 0
             self.intervals[i].v = u[0]
             v_used.append(u[0])
 def _fill_intervals(self, intervals):
     # copy default intervals
     self.intervals = [PlotInterval(i) for i in self.intervals]
     # track i_vars used so far
     v_used = []
     # fill copy of default
     # intervals with given info
     for i in range(len(intervals)):
         self.intervals[i].fill_from(intervals[i])
         if self.intervals[i].v is not None:
             v_used.append(self.intervals[i].v)
     # Find any orphan intervals and
     # assign them i_vars
     for i in range(len(self.intervals)):
         if self.intervals[i].v is None:
             u = [v for v in self.i_vars if v not in v_used]
             if len(u) == 0:
                 raise ValueError("length should not be equal to 0")
             self.intervals[i].v = u[0]
             v_used.append(u[0])