Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_metrics():
""" Test StatsManager metric registration/setting/getting with a set of pre-defined
key-value pairs (metric_dict).
"""
metric_dict = {'some_metric': 1.2345, 'another_metric': 6.7890}
metric_keys = list(metric_dict.keys())
stats = StatsManager()
frame_key = 100
assert not stats.is_save_required()
stats.register_metrics(metric_keys)
assert not stats.is_save_required()
with pytest.raises(FrameMetricRegistered):
stats.register_metrics(metric_keys)
assert not stats.metrics_exist(frame_key, metric_keys)
assert stats.get_metrics(frame_key, metric_keys) == [None] * len(metric_keys)
stats.set_metrics(frame_key, metric_dict)
assert stats.is_save_required()
assert stats.metrics_exist(frame_key, metric_keys)
assert stats.metrics_exist(frame_key, metric_keys[1:])
assert stats.get_metrics(frame_key, metric_keys) == [
metric_dict[metric_key] for metric_key in metric_keys]
def add_detector(self, detector):
""" Add Detector: Adds a detection algorithm to the CliContext's SceneManager. """
self.check_input_open()
options_processed_orig = self.options_processed
self.options_processed = False
try:
self.scene_manager.add_detector(detector)
except scenedetect.stats_manager.FrameMetricRegistered:
raise click.BadParameter(message='Cannot specify detection algorithm twice.',
param_hint=detector.cli_name)
self.options_processed = options_processed_orig
""" Register Metrics
Register a list of metric keys that will be used by the detector.
Used to ensure that multiple detector keys don't overlap.
Raises:
FrameMetricRegistered: A particular metric_key has already been registered/added
to the StatsManager. Only if the StatsManager is being used for read-only
access (i.e. all frames in the video have already been processed for the given
metric_key in the exception) is this behavior desirable.
"""
for metric_key in metric_keys:
if metric_key not in self._registered_metrics:
self._registered_metrics.add(metric_key)
else:
raise FrameMetricRegistered(metric_key)
def add_detector(self, detector):
""" Add Detector: Adds a detection algorithm to the CliContext's SceneManager. """
self.check_input_open()
options_processed_orig = self.options_processed
self.options_processed = False
try:
self.scene_manager.add_detector(detector)
except scenedetect.stats_manager.FrameMetricRegistered:
raise click.BadParameter(message='Cannot specify detection algorithm twice.',
param_hint=detector.cli_name)
self.options_processed = options_processed_orig
# type: (SceneDetector) -> None
""" Adds/registers a SceneDetector (e.g. ContentDetector, ThresholdDetector) to
run when detect_scenes is called. The SceneManager owns the detector object,
so a temporary may be passed.
Arguments:
detector (SceneDetector): Scene detector to add to the SceneManager.
"""
detector.stats_manager = self._stats_manager
if self._stats_manager is not None:
# Allow multiple detection algorithms of the same type to be added
# by suppressing any FrameMetricRegistered exceptions due to attempts
# to re-register the same frame metric keys.
try:
self._stats_manager.register_metrics(detector.get_metrics())
except FrameMetricRegistered:
pass
if not issubclass(type(detector), SparseSceneDetector):
self._detector_list.append(detector)
else:
self._sparse_detector_list.append(detector)
def __init__(self, metric_key, message="Attempted to re-register frame metric key."):
# type: (str, str)
# Pass message string to base Exception class.
super(FrameMetricRegistered, self).__init__(message)
self.metric_key = metric_key