Skip to content
Snippets Groups Projects
examples_signal.py 47.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        assert sig.violates_bounds() == False  # because it is not fixed
    
        assert sig.is_nnr() == False  # because it is not fixed
    
        assert sig.are_bounds_nnr() == True  # because it is within the range [0,1]
    
        sig.set_signal(samples=[random.randint(0, 1) for _ in range(number_intervals)])
    
        assert sig.is_signal_binary_only(integrality_tolerance=0.0) == True
    
        assert sig.is_signal_integer_only(integrality_tolerance=0.0) == True
    
        # **************************************************************************
    
        # trigger errors
    
        # by specifying an integrality tolerance greater than or equal to 0.5
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.is_signal_binary_only(integrality_tolerance=0.5)
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by specifying an integrality tolerance greater than or equal to 0.5
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.is_signal_integer_only(integrality_tolerance=0.5)
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by specifying an integrality tolerance as a tuple
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.is_signal_binary_only(integrality_tolerance=(0.5,))
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by specifying an integrality tolerance as a tuple
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.is_signal_integer_only(integrality_tolerance=(0.5,))
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by specifying the number of samples as a float
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.BinarySignal(number_samples=float(number_intervals))
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
    
    # ******************************************************************************
    # ******************************************************************************
    
    
    def example_nnr_signals():
        # number of time intervals
    
        number_intervals = 3
    
        # **************************************************************************
    
        # error-free examples
    
        # create an NNR signal
    
        sig = signal.NonNegativeRealSignal(number_intervals)
    
        assert sig.is_signal_fixed() == False
    
        assert sig.is_signal_bounded() == True  # it has lower bounds by default
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        assert sig.is_nnr() == False  # because it is not fixed
    
        assert sig.are_bounds_nnr() == True  # default case
    
        # create a create an NNR signal with more specific lower bounds
    
        sig = signal.NonNegativeRealSignal(
            number_intervals, lower_bounds=[1 for i in range(number_intervals)]
        )
    
        assert sig.is_signal_fixed() == False
    
        assert sig.is_signal_bounded() == True
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        assert sig.is_nnr() == False  # because it is not fixed
    
        assert sig.are_bounds_nnr() == True
    
        # create a create an NNR signal with more specific upper bounds
    
        sig = signal.NonNegativeRealSignal(
            number_intervals, upper_bounds=[1 for i in range(number_intervals)]
        )
    
        assert sig.is_signal_fixed() == False
    
        assert sig.is_signal_bounded() == True
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        assert sig.is_nnr() == False  # because it is not fixed
    
        assert sig.are_bounds_nnr() == True
    
        # create a fixed NNR signal
    
        sig = signal.FixedNonNegativeRealSignal(
            samples=[random.random() for i in range(number_intervals)]
        )
    
        assert sig.is_signal_fixed() == True
    
        assert sig.is_signal_bounded() == True
    
        assert sig.violates_bounds() == False  # no, since samples are within [0,1]
    
        assert sig.is_nnr() == True  # yes, same as above
    
        assert sig.are_bounds_nnr() == True  # yes, same as above
    
        # create a fixed NNR signal with binary numbers
    
        sig = signal.FixedNonNegativeRealSignal(
            samples=[random.randint(0, 1) for i in range(number_intervals)]
        )
    
        assert sig.is_signal_fixed() == True
    
        assert sig.is_signal_bounded() == True
    
        assert sig.violates_bounds() == False  # no, since samples are within [0,1]
    
        assert sig.is_nnr() == True  # yes, same as above
    
        assert sig.are_bounds_nnr() == True  # yes, same as above
    
        assert sig.is_signal_integer_only() == True
    
        # **************************************************************************
    
        # trigger errors
    
        # by providing a float as the number of intervals
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.NonNegativeRealSignal(number_samples=float(number_intervals))
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing negative lower bounds
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.NonNegativeRealSignal(
                number_samples=number_intervals,
                lower_bounds=[-1 for i in range(number_intervals)],
            )
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing samples that are not nnr
    
        samples = [random.random() for i in range(number_intervals)]
    
        samples[-1] = -1
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.FixedNonNegativeRealSignal(samples=samples)
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing samples as tuples
    
        samples = (random.random() for i in range(number_intervals))
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.FixedNonNegativeRealSignal(samples=samples)
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
    
    # ******************************************************************************
    # ******************************************************************************
    
    
    def example_set_signal():
        # number of time intervals
    
        number_intervals = 3
    
        # **************************************************************************
    
        # error-free examples
    
        # create a free signal and set it afterwards
    
        sig = signal.FreeUnboundedSignal(number_samples=number_intervals)
    
        samples = [random.random() for i in range(number_intervals)]
    
        assert sig.is_signal_fixed() == False
    
        sig.set_signal(samples)
    
        assert sig.is_signal_fixed() == True
    
        # create a fixed signal and set it to something else afterwards
    
        sig = signal.FixedSignal(
            samples=[0.5 for i in range(number_intervals)],
            lower_bounds=[0 for i in range(number_intervals)],
            upper_bounds=[1 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == True
    
        assert sig.violates_bounds() == False
    
        new_samples = [2 for i in range(number_intervals)]
    
        sig.set_signal(new_samples)
    
        assert sig.is_signal_fixed() == True
    
        assert sig.violates_bounds() == True
    
        # **************************************************************************
    
        # trigger errors
    
        # by providing an integer instead of a list
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.set_signal(samples=3)
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing an incorrectly sized list
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig.set_signal(samples=[2 for i in range(number_intervals + 1)])
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # **************************************************************************
    
    
    # ******************************************************************************
    # ******************************************************************************
    
    
    def example_bounded_signals():
        # number of time intervals
    
        number_intervals = 3
    
        # **************************************************************************
    
        # error-free examples
    
        # create an upper bounded signal via the main class
    
        sig = signal.Signal(
            number_samples=number_intervals,
            samples=None,
            lower_bounds=None,
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it does
    
        assert sig.has_upper_bounds() == True  # because it does
    
        assert sig.has_lower_bounds() == False  # because it does not
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        # create a lower bounded signal via the main class
    
        sig = signal.Signal(
            number_samples=number_intervals,
            samples=None,
            lower_bounds=[10 for i in range(number_intervals)],
            upper_bounds=None,
        )
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it is
    
        assert sig.has_upper_bounds() == False  # because it does not
    
        assert sig.has_lower_bounds() == True  # because it does
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        # create a signal with upper and lower bounds via the main class
    
        sig = signal.Signal(
            number_samples=number_intervals,
            samples=None,
            lower_bounds=[3 for i in range(number_intervals)],
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it is
    
        assert sig.has_upper_bounds() == True  # because it does
    
        assert sig.has_lower_bounds() == True  # because it does
    
        assert sig.violates_bounds() == False  # because it is not fixed
    
        # create a fixed signal whose upper bounds are violated every time
    
        sig = signal.FixedSignal(
            samples=[11 for i in range(number_intervals)],
            lower_bounds=[4 for i in range(number_intervals)],
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == True  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it is
    
        assert sig.violates_bounds() == True  # because 11 > 4
    
        # create a fixed signal whose lower bounds are violated every time
    
        sig = signal.FixedSignal(
            samples=[3 for i in range(number_intervals)],
            lower_bounds=[4 for i in range(number_intervals)],
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == True  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it does
    
        assert sig.violates_bounds() == True  # because 3 < 4
    
        # create a fixed signal whose upper bounds are violated only once
    
        samples = [5 for i in range(number_intervals)]
    
        samples[-1] = 11
    
        sig = signal.FixedSignal(
            samples=samples,
            lower_bounds=[4 for i in range(number_intervals)],
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == True  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it is
    
        assert sig.violates_bounds() == True  # because 11 > 4
    
        # create a fixed signal whose lower bounds are violated only once
    
        samples = [5 for i in range(number_intervals)]
    
        samples[-1] = 3
    
        sig = signal.FixedSignal(
            samples=samples,
            lower_bounds=[4 for i in range(number_intervals)],
            upper_bounds=[10 for i in range(number_intervals)],
        )
    
        assert sig.is_signal_fixed() == True  # because it has no samples
    
        assert sig.is_signal_bounded() == True  # because it does
    
        assert sig.violates_bounds() == True  # because 3 < 4
    
        # **************************************************************************
    
        # trigger errors
    
        # by providing upper bounds with an inconsistent number of samples
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=None,
                upper_bounds=[10 for i in range(number_intervals - 1)],  # one too few
            )
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing lower bounds with an inconsistent number of samples
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=[3 for i in range(number_intervals + 1)],  # one extra
                upper_bounds=None,
            )
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing upper bounds not as a list but as a numeric type
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=[3 for i in range(number_intervals)],  # one extra
                upper_bounds=6,
            )
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing lower bounds not as a list but as a numeric type
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=2,
                upper_bounds=[5 for i in range(number_intervals)],
            )
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing upper bounds lower than the lower bounds
    
        lower_bounds = [5 for i in range(number_intervals)]
    
        upper_bounds = [7 for i in range(number_intervals)]
    
        upper_bounds[-1] = 3
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=lower_bounds,
                upper_bounds=upper_bounds,
            )
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing lower bounds higher than the uppper bounds
    
        lower_bounds = [5 for i in range(number_intervals)]
    
        upper_bounds = [7 for i in range(number_intervals)]
    
        lower_bounds[-1] = 9
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=number_intervals,
                samples=None,
                lower_bounds=lower_bounds,
                upper_bounds=upper_bounds,
            )
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
    
    # ******************************************************************************
    # ******************************************************************************
    
    
    def example_free_signals():
        # number of time intervals
    
        number_intervals = 3
    
        # **************************************************************************
    
        # error-free examples
    
        # create a free signal without bounds via the main class
    
        sig = signal.Signal(
            number_samples=number_intervals,
            samples=None,
            lower_bounds=None,
            upper_bounds=None,
        )
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == False  # because it has none
    
        assert sig.violates_bounds() == False  # because it has none
    
        # create a free signal via a specific class
    
        sig = signal.FreeSignal(number_samples=number_intervals)
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == False  # because it has none
    
        assert sig.violates_bounds() == False  # because it has none
    
        # create a free signal without bounds via a specific class
    
        sig = signal.FreeUnboundedSignal(number_samples=number_intervals)
    
        assert sig.is_signal_fixed() == False  # because it has no samples
    
        assert sig.is_signal_bounded() == False  # because it has none
    
        assert sig.violates_bounds() == False  # because it has none
    
        # **************************************************************************
    
        # trigger errors
    
        # by providing a float as the number of intervals
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=float(number_intervals),
                samples=None,
                lower_bounds=None,
                upper_bounds=None,
            )
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
    
    # ******************************************************************************
    # ******************************************************************************
    
    
    def example_fixed_signals():
        # number of time intervals
    
        number_intervals = 3
    
        # **************************************************************************
    
        # error-free examples
    
        # create a fixed input made up of reals
    
        sig = signal.FixedSignal(samples=[random.random() for k in range(number_intervals)])
    
        assert sig.is_signal_fixed() == True  # because it is predetermined
    
        assert sig.is_signal_bounded() == False  # because it has none
    
        assert sig.violates_bounds() == False  # because it has none
    
        # create a fixed signal using the main class
    
        sig = signal.Signal(
            number_samples=number_intervals,
            samples=[random.random() for k in range(number_intervals)],
            lower_bounds=None,
            upper_bounds=None,
        )
    
        assert sig.is_signal_fixed() == True  # because it is predetermined
    
        assert sig.is_signal_bounded() == False  # because it has none
    
        assert sig.violates_bounds() == False  # because it has none
    
        # **************************************************************************
    
        # trigger errors
    
        # by providing a None when creating a FixedSignal
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.FixedSignal(samples=None)
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing an empty list
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.FixedSignal(samples=[])
        except ValueError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
        # by providing the number of samples as a float
    
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
        try:
            sig = signal.Signal(
                number_samples=float(number_intervals),
                samples=[random.random() for k in range(number_intervals)],
                lower_bounds=None,
                upper_bounds=None,
            )
        except TypeError:
    
    Pedro L. Magalhães's avatar
    Pedro L. Magalhães committed
    
    
    # ******************************************************************************
    # ******************************************************************************