<commit_before>
enum Velocity: Equatable {
    case Default
    case PPP
    case PP
    case P
    case MP
    case MF
    case F
    case FF
    case FFF
    case Number(Int)

    var numerical: Int {
        switch self {
        case Default:       return 72
        case PPP:           return 16
        case PP:            return 32
        case P:             return 48
        case MP:            return 64
        case MF:            return 80
        case F:             return 96
        case FF:            return 112
        case FFF:           return 127
        case let Number(v): return v
        }
    }
}

func ==(lhs: Velocity, rhs: Velocity) -> Bool {
    switch (lhs, rhs) {
    case (.Default, .Default):           return true
    case (.PPP,     .PPP):               return true
    case (.PP,      .PP):                return true
    case (.P,       .P):                 return true
    case (.MP,      .MP):                return true
    case (.MF,      .MF):                return true
    case (.F,       .F):                 return true
    case (.FF,      .FF):                return true
    case (.FFF,     .FFF):               return true
    case let (.Number (l), .Number (r)): return l == r
    default:                             return false
    }
}<commit_msg>Add velocities from drum hits<commit_after>
enum Velocity: Equatable {
    case Default
    case PPP
    case PP
    case P
    case MP
    case MF
    case F
    case FF
    case FFF
    case Soft
    case Hard
    case Number(Int)

    var numerical: Int {
        switch self {
        case Default:       return 72
        case PPP:           return 16
        case PP:            return 32
        case P:             return 48
        case MP:            return 64
        case MF:            return 80
        case F:             return 96
        case FF:            return 112
        case FFF:           return 127
        case Soft:          return 64
        case Hard:          return 127
        case let Number(v): return v
        }
    }
}

func ==(lhs: Velocity, rhs: Velocity) -> Bool {
    switch (lhs, rhs) {
    case (.Default, .Default):           return true
    case (.PPP,     .PPP):               return true
    case (.PP,      .PP):                return true
    case (.P,       .P):                 return true
    case (.MP,      .MP):                return true
    case (.MF,      .MF):                return true
    case (.F,       .F):                 return true
    case (.FF,      .FF):                return true
    case (.FFF,     .FFF):               return true
    case (.Soft,    .Soft):              return true
    case (.Hard,    .Hard):              return true
    case let (.Number (l), .Number (r)): return l == r
    default:                             return false
    }
}
{'fraction_non_alphanumeric': 0.08124337689862239, 'fraction_numerical': 0.015895443306252206, 'mean_word_length': 0.9818054583624912, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2106049', 'n_tokens_mistral': 833, 'n_tokens_neox': 739, 'n_words': 298}