def __init__(self, distribution_beginning, distribution_ending, bins=50, relation_formula=None): if not isinstance(distribution_beginning, rv_frozen): raise TypeError("'distribution_beginning' should be a scipy frozen distribution") if not isinstance(distribution_ending, rv_frozen): raise TypeError("'distribution_ending' should be a scipy frozen distribution") self._distribution_beginning = distribution_beginning self._distribution_ending = distribution_ending a, beginning = calculate_bounds_of_probability_distribution(distribution_beginning) ending, b = calculate_bounds_of_probability_distribution(distribution_ending) self._beginning = UnixTime(beginning) self._ending = UnixTime(ending) self.membership_function = MembershipFunction(self) bins_beginning = bins / 2 bins_ending = bins - bins_beginning self.interval_beginning = TimeInterval(a, beginning, bins_beginning) self.interval_ending = TimeInterval(ending, b, bins_ending) list.__init__(self, self.interval_beginning + self.interval_ending) TimeInterval.__init__(self, a, b, bins) if relation_formula is None: relation_formula = RelationFormulaGeometricMean() elif not isinstance(relation_formula, BaseRelationFormula): raise TypeError("'relation_formula' should be of type 'BaseRelationFormula'") relation_formula.bounds[distribution_beginning] = self.a, self.beginning relation_formula.bounds[distribution_ending] = self.ending, self.b self._formula_creator = FormulaCreator(relation_formula)
from spatiotemporal.temporal_events.trapezium import TemporalEventTrapezium from spatiotemporal.temporal_events.relation_formulas import FormulaCreator from spatiotemporal.temporal_events.composition.non_linear_least_squares import DecompositionFitter import matplotlib.pyplot as plt all_relations = "pmoFDseSdfOMP" a = TemporalEventTrapezium(1, 12, 4, 8) b = TemporalEventTrapezium(9, 17, 13, 15) # compute relations between events temporal_relations = a * b print("Relations: {0}".format(temporal_relations.to_list())) # print degree for every relation for relation in all_relations: print(relation, temporal_relations[relation]) # plot events a.plot(show_distributions=True).ylim(ymin=-0.1, ymax=1.1) b.plot(show_distributions=True).figure() plt.show() # from the 13 relations, learns parameters for all combinations of the # before, same, and after relationships between the beginning and # ending distributions of the two intervals formula = FormulaCreator(DecompositionFitter(temporal_relations)) # from these relationships, computes the 13 relations again relations_estimate = formula.calculate_relations() print("Estimated relations: {0}".format(relations_estimate.to_list()))