Manipulating Collections of Segment Objects¶
Collections of Segment
objects are held in Segments
objects. Segments
objects have a variety of capabilities
that allow an analyst to access, filter, and represent Segment
objects in different ways.
Iteration¶
Segments
iteration can be done as follows:
segments # A Segments object
for segment in segments:
print(segment)
The above code will print each Segment
object in the Segments
object.
Access and Modification through Subscripts¶
Individual Segment
objects can be accessed using subscripts. These subscripts can either be a numerical index indicating
the location of the Segment
object in an underlying list or the segment name of a Segment
object.
segments # A Segments object
segment0 = segments[0] # Accessing the first Segment object via numeric index
segment1 = segments["1"] # Accessing the Segment object whose segment name is "1"
Subscripts can also be used to change an underlying Segment
object at the indicated index or with the indicated name.
However, when assigning a Segment
object through the segment name, the segment name of the new Segment
must match the indexed segment name indicated.
List Comprehensions¶
Segments
objects can be used when performing list comprehensions.
segments # A Segments object
segment_names = [segment.segment_name for segment in segments] # Returns a list of segment names
The list comprehension example above can be used to get a list of all of the segment names that exist in the Segments
object.
Filtering¶
The Segments
object is particularly useful when attempting to curate a collection of Segment
objects. The
Segments
class currently contains three functions that filter the underlying list of Segment
objects: get_num_logs
,
get_segments_before
, and get_segments_of_type
.
Filtering by Number of Logs¶
The get_num_logs
function returns a new Segments
object that only contains the Segment
objects that have at
least the number of logs specified. An example is shown below:
Input:
print("Original Segments Object:")
print(segments)
segments = segments.get_num_logs(5)
print("\nFiltered Segments Object:")
print(segments)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
Filtered Segments Object:
Segments: [
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
The above code removes Segment
objects “0” and “1” since they contain less than 5 logs.
Filtering by Time¶
The get_segments_before
and get_segments_after
functions return a new Segments
object that contains all the
Segment
objects that either have end times before the user given time or start times after the user given time. An
example usage of each of these functions is shown below:
Input:
print("Original Segments Object:")
print(segments)
segments_before = segments.get_segments_before(4)
segments_after = segments.get_segments_after(3)
print("\nFiltered Segments Object (Before):")
print(segments_before)
print("\nFiltered Segments Object (After):")
print(segments_after)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
Filtered Segments Object (Before):
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
]
Filtered Segments Object (After):
Segments: [
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
The above output shows that the get_segments_before
function filtered out any Segment
that had an end time
after or including 4 and that the get_segments_after
function filtered out any Segment
with a start time less than
or equal to 3.
Filtering by Segment Type¶
The get_segments_of_type
function filters out Segment
objects that do not have the indicated type of segment creation
method. An example usage of this function is shown below:
Input:
print("Original Segments Object:")
print(segments)
segments = segments.get_segments_of_type(distill.Segment_Type.FIXED_TIME)
print("\nFiltered Segments Object:")
print(segments)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
Filtered Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
]
The example above shows how this function can be used to create a Segments
object that only contains Segment
objects
that were created through the fixed time generation function.
Appending and Deleting Segment
Objects¶
Segment
objects can be appended or deleted from Segments
objects using three functions: append
,
append_segments
, and delete
.
Appending Segment
Objects¶
Appending Segment
objects can be done through the append
function. This function takes a Segment
object as
a parameter and appends it to the calling Segments
object. An example usage of this function is shown below:
Input:
print("Original Segments Object:")
print(segments)
print("\nSegment object to add:")
print(segment)
segments.append(segment)
print("\nModified Segments Object:")
print(segments)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
]
Segment object to add:
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Modified Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
]
The above example shows how a Segment
object can be appended to a Segments
object. Note that this function modifies
the underlying Segments
object rather than returning a new Segments
object.
Appending Segments
Objects¶
The append_segments
function appends an entire Segments
object to the calling Segments
object. This results
in an updated Segments
object that contains all of the Segment
objects that were in the two Segments
objects.
An example usage of this function is shown below:
Input:
print("Original Segments Object:")
print(segments1)
print("\nSegments object to append:")
print(segments2)
segments1.append_segments(segments2)
print("\nModified Segments Object:")
print(segments1)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
]
Segments object to append:
Segments: [
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
]
Modified Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
]
The above code appends the Segment
objects within segments2 to the segments1 object.
Deleting Segment
Objects¶
The delete
function takes in a segment name and removes the Segment
object with that name from the calling Segments
object.
Below is an example usage of this function:
Input:
print("Original Segments Object:")
print(segments)
segments.delete("0")
print("\nModified Segments Object:")
print(segments)
Console Output:
Original Segments Object:
Segments: [
Segment: segment_name=0, start=1, end=2, num_logs=3, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
Modified Segments Object:
Segments: [
Segment: segment_name=1, start=2, end=3, num_logs=0, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.CREATE
Segment: segment_name=2, start=3, end=4, num_logs=9, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.FIXED_TIME
Segment: segment_name=3, start=4, end=5, num_logs=7, generate_field_name=None, generate_matched_values=None, segment_type=Segment_Type.DEADSPACE
]
The above code removes the Segment
object from the calling Segments
object that is denoted by the segment name “0”.
Representation of Segment
Objects with Different Data Structures¶
An additional feature of the Segments
object is the ability to return different data structures that represent the
Segment
objects within the Segments
object. Currently there are two different data structure representations that
can be returned by the Segments
object: a list of Segment
objects and a dictionary of segment names to Segment
objects. Below are examples of each function.
Segment
List¶
The get_segment_list
function returns a list of Segment
objects within the calling Segments
object.
Example:
segments # A Segments object
segments_list = segments.get_segment_list() # A list of the Segment objects within segments
Segment
Dictionary¶
The get_segment_name_dict
function returns a dictionary whose keys are the segment names of the Segment
objects
which refer to the Segment
objects themselves.
Example:
segments # A Segments object
segments_dict = segments.get_segment_name_dict() # A dictionary of the Segment objects within segments