Code Duplication    Length = 15-16 lines in 2 locations

pyActLearn/graphs/event_analysis.py 2 locations

@@ 279-294 (lines=16) @@
276
        if cur_truth != prev_truth:
277
            truth_time = time_list[i]
278
            # Check the start boundary
279
            if truth[i] == prediction[i]:
280
                # If current prediction is correct, then it can only be overfill of current truth label.
281
                j = i - 1
282
                while j >= 0 and prediction_scoring[j] == 'O':
283
                    j -= 1
284
                # If there is no overfill for cur_truth, and the current truth and prediction are the same,
285
                # then there is no start_boundary mismatch.
286
                start_mismatch[cur_truth].append((time_list[j + 1] - truth_time).total_seconds())
287
            else:
288
                # If current prediction is incorrect, then it can only be underfill of current truth label at start
289
                # boundary.
290
                j = i
291
                while j < truth.shape[0] and truth_scoring[j] == 'U':
292
                    j += 1
293
                if j != i and j < truth.shape[0]:
294
                    start_mismatch[cur_truth].append((time_list[j-1] - truth_time).total_seconds())
295
            # Check the stop boundary
296
            if i > 0:
297
                if prediction[i-1] == truth[i-1]:
@@ 296-310 (lines=15) @@
293
                if j != i and j < truth.shape[0]:
294
                    start_mismatch[cur_truth].append((time_list[j-1] - truth_time).total_seconds())
295
            # Check the stop boundary
296
            if i > 0:
297
                if prediction[i-1] == truth[i-1]:
298
                    # Previous prediction is correct, then it can only be overfill of previous truth.
299
                    # If there is no overfill, the stop boundary is accurate
300
                    j = i
301
                    while prediction_scoring[j] == 'o':
302
                        j += 1
303
                    stop_mismatch[prev_truth].append((time_list[j-1] - truth_time).total_seconds())
304
                else:
305
                    # Check Underfill for prev_truth (at the stop boundary)
306
                    j = i - 1
307
                    while j >= 0 and truth_scoring[j] == 'u':
308
                        j -= 1
309
                    if j != i - 1:
310
                        stop_mismatch[prev_truth].append((time_list[j + 1] - truth_time).total_seconds())
311
            if prev_truth != -1:
312
                if len(stop_mismatch[prev_truth]) > 0 and abs(stop_mismatch[prev_truth][-1]) > 1800:
313
                    logger.warning('Stop mismatch is over half an hour: %s at %d (%s) - %f' %