Coverage for rulekit/events.py: 100%
27 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-07 11:26 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-07 11:26 +0000
1"""Module containing classes for tracking progress of rule induction.
2"""
3from typing import Any
5from jpype import JImplements
6from jpype import JInt
7from jpype import JObject
8from jpype import JOverride
10from rulekit.rules import _rule_factory
11from rulekit.rules import BaseRule
14class RuleInductionProgressListener:
15 """Base class for rule induction progress listeners. To use it, subclass it
16 and implement some of the its methods. Then instantiate it and pass it to
17 `add_event_listener` method of the operator.
18 """
20 def on_new_rule(self, rule: BaseRule):
21 """Called when new rule is induced
23 Args:
24 rule (BaseRule): Newly induced rule
25 """
27 def on_progress(
28 self,
29 total_examples_count: int,
30 uncovered_examples_count: int
31 ):
32 """Called each time a ruleset coverage changed.
34 This method is best suited to monitor progress of rule induction.
36 Args:
37 total_examples_count (int): Total number of examples in
38 training dataset
40 uncovered_examples_count (int): Number of examples that
41 are not covered by any rule
42 """
44 def should_stop(self) -> bool:
45 """Method which allows to stop rule induction process at given
46 moment. This method is called each time a ruleset coverage changed.
47 If it returns `True`, rule induction process will be stopped if it
48 return `False` it will continue.
50 Returns:
51 bool: whether to stop rule induction or not
52 """
53 return False
56def _command_listener_factory(listener: RuleInductionProgressListener) -> Any:
57 from adaa.analytics.rules.logic.rulegenerator import \
58 ICommandListener # pylint: disable=import-outside-toplevel,import-error,line-too-long
60 @JImplements(ICommandListener)
61 class _CommandListener: # pylint: disable=invalid-name,missing-function-docstring,line-too-long
63 @JOverride
64 def onNewRule(self, rule: JObject):
65 rule: BaseRule = _rule_factory(rule)
66 return listener.on_new_rule(rule)
68 @JOverride
69 def onProgress(self, totalRules: JInt, uncoveredRules: JInt):
70 return listener.on_progress(int(totalRules), int(uncoveredRules))
72 @JOverride
73 def isRequestStop(self) -> bool:
74 return listener.should_stop()
75 # return False
77 return _CommandListener()