Skip to content

Commit

Permalink
Merge pull request #177 from whylabs/sourcery/WHY-2415_regression_metics
Browse files Browse the repository at this point in the history
regression metrics (Sourcery refactored)
  • Loading branch information
lalmei committed Mar 25, 2021
2 parents b5d9fa1 + a584b24 commit 5247dd4
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 28 deletions.
32 changes: 14 additions & 18 deletions src/whylogs/app/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,8 @@ def segmented_profiles(self, ) -> Dict[str, DatasetProfile]:

def get_segment(self, segment: Segment) -> Optional[DatasetProfile]:
hashed_seg = hash_segment(segment)
segment_profile = self._profiles[-1]["segmented_profiles"].get(
return self._profiles[-1]["segmented_profiles"].get(
hashed_seg, None)
return segment_profile

def set_segments(self, segments: Union[List[Segment], List[str]]) -> None:
if segments:
Expand Down Expand Up @@ -184,18 +183,15 @@ def _set_rotation(self, with_rotation_time: str = None):
self.rotate_at = self.rotate_when(current_time)

def rotate_when(self, time):
result = time + self.interval
return result
return time + self.interval

def should_rotate(self, ):

if self.with_rotation_time is None:
return False

current_time = int(datetime.datetime.utcnow().timestamp())
if current_time >= self.rotate_at:
return True
return False
return current_time >= self.rotate_at

def _rotate_time(self):
"""
Expand All @@ -210,7 +206,7 @@ def _rotate_time(self):
time_tuple.strftime(self.suffix), self.suffix)

# modify the segment datetime stamps
if (self.segments is None) or ((self.segments is not None) and self.profile_full_dataset):
if self.segments is None or self.profile_full_dataset:
self._profiles[-1]["full_profile"].dataset_timestamp = log_datetime
if self.segments is not None:
for _, each_prof in self._profiles[-1]["segmented_profiles"].items():
Expand Down Expand Up @@ -253,11 +249,10 @@ def flush(self, rotation_suffix: str = None):
for hashseg, each_seg_prof in self._profiles[-1]["segmented_profiles"].items():
seg_suffix = hashseg
full_suffix = "_" + seg_suffix
if rotation_suffix is None:
writer.write(each_seg_prof, full_suffix)
else:
if rotation_suffix is not None:
full_suffix += rotation_suffix
writer.write(each_seg_prof, full_suffix)

writer.write(each_seg_prof, full_suffix)

def full_profile_check(self, ) -> bool:
"""
Expand Down Expand Up @@ -417,7 +412,7 @@ def log_local_dataset(self, root_dir, folder_feature_name="folder_feature", imag
if isinstance(data, pd.DataFrame):
self.log_dataframe(data)

elif isinstance(data, Dict) or isinstance(data, list):
elif isinstance(data, (Dict, list)):
self.log_annotation(annotation_data=data)
elif isinstance(data, ImageType):
if image_feature_transforms:
Expand Down Expand Up @@ -512,10 +507,11 @@ def log_segments_keys(self, data):
for each_segment in segments:
try:
segment_df = grouped_data.get_group(each_segment)
segment_tags = []
for i in range(len(self.segments)):
segment_tags.append(
{"key": self.segments[i], "value": each_segment[i]})
segment_tags = [
{"key": self.segments[i], "value": each_segment[i]}
for i in range(len(self.segments))
]

self.log_df_segment(segment_df, segment_tags)
except KeyError:
continue
Expand All @@ -526,7 +522,7 @@ def log_fixed_segments(self, data):
for segment_tag in self.segments:
# create keys
segment_keys = [feature["key"] for feature in segment_tag]
seg = tuple([feature["value"] for feature in segment_tag])
seg = tuple(feature["value"] for feature in segment_tag)

grouped_data = data.groupby(segment_keys)

Expand Down
10 changes: 4 additions & 6 deletions src/whylogs/core/datasetprofile.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,9 @@ def __init__(
if columns is None:
columns = {}
if tags is None:
tags = dict()
tags = {}
if metadata is None:
metadata = dict()
metadata = {}
if session_id is None:
session_id = uuid4().hex

Expand Down Expand Up @@ -841,10 +841,8 @@ def flatten_dataset_frequent_strings(dataset_summary: DatasetSummary):
try:
item_summary = getter(
getter(col, "string_summary"), "frequent").items
items = {}
for item in item_summary:
items[item.value] = int(item.estimate)
if len(items) > 0:
items = {item.value: int(item.estimate) for item in item_summary}
if items:
frequent_strings[col_name] = items
except KeyError:
continue
Expand Down
5 changes: 1 addition & 4 deletions src/whylogs/core/model_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,7 @@ def to_protobuf(self):
@classmethod
def from_protobuf(cls, message: ModelProfileMessage):
# convert google.protobuf.pyext._message.RepeatedScalarContainer to a list
output_fields = []
for f in message.output_fields:
output_fields.append(f)

output_fields = [f for f in message.output_fields]
return ModelProfile(output_fields=output_fields,
metrics=ModelMetrics.from_protobuf(message.metrics))

Expand Down

0 comments on commit 5247dd4

Please sign in to comment.