Skip to content

Commit

Permalink
Replace random module with secrets module
Browse files Browse the repository at this point in the history
  • Loading branch information
DanielZhangDP committed Nov 4, 2024
1 parent 9b6a7f3 commit e4d768c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
7 changes: 4 additions & 3 deletions cfmtoolbox/plugins/one_wise_sampling.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import json
import random
import secrets
from collections import defaultdict
from dataclasses import asdict
from typing import NamedTuple
Expand Down Expand Up @@ -41,6 +41,7 @@ def __init__(self, model: CFM):
# The chosen assignment is the assignment that is currently being used to generate a sample
self.chosen_assignment: tuple[str, int]
self.model = model
self.random_generator = secrets.SystemRandom()

def one_wise_sampling(self) -> list[ConfigurationNode]:
self.calculate_border_assignments(self.model.root)
Expand Down Expand Up @@ -122,9 +123,9 @@ def generate_random_feature_node_with_assignment(
return feature_node

def get_random_cardinality(self, cardinality_list: Cardinality):
random_interval = random.choice(cardinality_list.intervals)
random_interval = self.random_generator.choice(cardinality_list.intervals)
assert random_interval.upper is not None
random_cardinality = random.randint(
random_cardinality = self.random_generator.randint(
random_interval.lower, random_interval.upper
)
return random_cardinality
Expand Down
17 changes: 11 additions & 6 deletions cfmtoolbox/plugins/random_sampling.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import json
import random
import secrets
from collections import defaultdict
from dataclasses import asdict
from typing import NamedTuple
Expand Down Expand Up @@ -33,6 +33,7 @@ class RandomSampler:
def __init__(self, model: CFM):
self.global_feature_count: defaultdict[str, int] = defaultdict(int)
self.model = model
self.random_generator = secrets.SystemRandom()

def random_sampling(self) -> ConfigurationNode:
while True:
Expand All @@ -44,9 +45,9 @@ def random_sampling(self) -> ConfigurationNode:
return random_feature_node

def get_random_cardinality(self, cardinality_list: Cardinality):
random_interval = random.choice(cardinality_list.intervals)
random_interval = self.random_generator.choice(cardinality_list.intervals)
assert random_interval.upper is not None
random_cardinality = random.randint(
random_cardinality = self.random_generator.randint(
random_interval.lower, random_interval.upper
)
return random_cardinality
Expand All @@ -57,9 +58,11 @@ def get_random_cardinality_without_zero(self, cardinality_list: Cardinality):
if first_interval.lower == 0 and first_interval.upper == 0:
modified_cardinality_list_intervals = cardinality_list.intervals[1:]

random_interval = random.choice(modified_cardinality_list_intervals)
random_interval = self.random_generator.choice(
modified_cardinality_list_intervals
)
assert random_interval.upper is not None
random_cardinality = random.randint(
random_cardinality = self.random_generator.randint(
random_interval.lower if random_interval.lower != 0 else 1,
random_interval.upper,
)
Expand Down Expand Up @@ -131,7 +134,9 @@ def generate_random_children_with_random_cardinality(self, feature: Feature):
def get_sorted_sample(self, features: list[Feature], sample_size: int):
return [
features[i]
for i in sorted(random.sample(range(len(features)), sample_size))
for i in sorted(
self.random_generator.sample(range(len(features)), sample_size)
)
]

def get_required_children(self, feature: Feature):
Expand Down

0 comments on commit e4d768c

Please sign in to comment.