def from_protobuf(message: NumbersMessage): """ Load from a protobuf message Returns ------- number_tracker : NumberTracker """ theta = None if message.compact_theta is not None and len( message.compact_theta) > 0: theta = ThetaSketch.deserialize(message.compact_theta) elif message.theta is not None and len(message.theta) > 0: logger.warning( "Possible missing data. Non-compact theta sketches are no longer supported" ) opts = dict( theta_sketch=theta, variance=VarianceTracker.from_protobuf(message.variance), histogram=dsketch.deserialize_kll_floats_sketch(message.histogram), ) if message.HasField("doubles"): opts["floats"] = FloatTracker.from_protobuf(message.doubles) if message.HasField("longs"): opts["ints"] = IntTracker.from_protobuf(message.longs) return NumberTracker(**opts)
def from_protobuf(message: NumbersMessage): """ Load from a protobuf message Returns ------- number_tracker : NumberTracker """ theta = None if message.theta is not None and len(message.theta) > 0: theta = ThetaSketch.deserialize(message.theta) elif message.compact_theta is not None and len(message.compact_theta) > 0: theta = ThetaSketch.deserialize(message.compact_theta) opts = dict( theta_sketch=theta, variance=VarianceTracker.from_protobuf(message.variance), histogram=dsketch.deserialize_kll_floats_sketch(message.histogram), frequent_numbers=dsketch.FrequentNumbersSketch.from_protobuf( message.frequent_numbers ), ) if message.HasField("doubles"): opts["floats"] = FloatTracker.from_protobuf(message.doubles) if message.HasField("longs"): opts["ints"] = IntTracker.from_protobuf(message.longs) return NumberTracker(**opts)
def to_protobuf(self): """ Return the object serialized as a protobuf message """ opts = dict( variance=self.variance.to_protobuf(), compact_theta=self.theta_sketch.serialize(), histogram=self.histogram.serialize(), ) if self.floats.count > 0: opts["doubles"] = self.floats.to_protobuf() elif self.ints.count > 0: opts["longs"] = self.ints.to_protobuf() msg = NumbersMessage(**opts) return msg