def create_segment()

in distill/segmentation/segment.py [0:0]


def create_segment(target_dict, segment_names, start_end_vals):
    """
    Creates a dictionary of Segment objects representing the metadata
    associated with each defined segment.

    :param target_dict: A dictionary of User Ale logs assumed to be ordered by clientTime (Date/Time Objects or integers)
    :param segment_names: A list of segment_names ordered in the same way as the start_end_vals
    :param start_end_vals: A list of tuples (i.e [(start_time, end_time)], where start_time and end_time are Date/Time Objects or integers

    :return: A Segments object containing newly created Segment objects.
    """

    segments = []
    for i in range(len(segment_names)):
        num_logs = 0
        segment_name = segment_names[i]
        start_time = start_end_vals[i][0]
        end_time = start_end_vals[i][1]
        uids = []
        for uid in target_dict:
            log = target_dict[uid]
            if (isinstance(log['clientTime'], int) and isinstance(start_time, int) and isinstance(end_time, int)) or (isinstance(log['clientTime'], datetime.datetime) and isinstance(start_time, datetime.datetime) and isinstance(end_time, datetime.datetime)):
                if log['clientTime'] >= start_time and log['clientTime'] <= end_time:
                    # Perform data collection on log
                    num_logs += 1
                    uids.append(uid)
            else:
                raise TypeError("clientTime and start/end times must be represented as the same type and must either be a datetime object or integer.")
        segment = Segment(segment_name, start_end_vals[i], num_logs, uids)
        segment.segment_type = Segment_Type.CREATE
        segment.generate_field_name = None
        segment.generate_matched_values = None
        segments.append(segment)
    return Segments(segments)