def force_unfill_progresses(satisfied_by_category, current_distinct_threshold, current_threshold):
    'Adjusts the fulfillment and progress of RequirementsProgress object with both distinct thresholds and thresholds\n    These requirements follow the form "X subjects/units from at least N categories"\n    satisfied_by_category: list of lists of Courses for each category\n    current_distinct_threshold: threshold object for distinct threshold\n    current_threshold: threshold object for regular threshold'
    subject_cutoff = current_threshold.cutoff_for_criterion(CRITERION_SUBJECTS)
    unit_cutoff = current_threshold.cutoff_for_criterion(CRITERION_UNITS)
    max_unit_subjects = map((lambda sat_cat: sorted(sat_cat, key=(lambda s: s.total_units))), satisfied_by_category)
    fixed_subject_progress = 0
    fixed_subject_max = current_distinct_threshold.get_actual_cutoff()
    fixed_unit_progress = 0
    fixed_unit_max = 0
    for category_subjects in max_unit_subjects:
        if (len(category_subjects) > 0):
            subject_to_count = category_subjects.pop()
            fixed_subject_progress += 1
            fixed_unit_progress += subject_to_count.total_units
            fixed_unit_max += subject_to_count.total_units
        else:
            fixed_unit_max += DEFAULT_UNIT_COUNT
    remaining_subject_progress = (subject_cutoff - fixed_subject_max)
    remaining_unit_progress = (unit_cutoff - fixed_unit_max)
    free_courses = sorted([course for category in max_unit_subjects for course in category], key=(lambda s: s.total_units), reverse=True)
    free_subject_max = (subject_cutoff - fixed_subject_max)
    free_unit_max = (unit_cutoff - fixed_unit_max)
    free_subject_progress = min(len(free_courses), free_subject_max)
    free_unit_progress = min(total_units(free_courses), free_unit_max)
    subject_progress = Progress((fixed_subject_progress + free_subject_progress), subject_cutoff)
    unit_progress = Progress((fixed_unit_progress + free_unit_progress), unit_cutoff)
    return (subject_progress, unit_progress)
Adjusts the fulfillment and progress of RequirementsProgress object with both distinct thresholds and thresholds
These requirements follow the form "X subjects/units from at least N categories"
satisfied_by_category: list of lists of Courses for each category
current_distinct_threshold: threshold object for distinct threshold
current_threshold: threshold object for regular threshold
def force_unfill_progresses(satisfied_by_category, current_distinct_threshold, current_threshold):
    'Adjusts the fulfillment and progress of RequirementsProgress object with both distinct thresholds and thresholds\n    These requirements follow the form "X subjects/units from at least N categories"\n    satisfied_by_category: list of lists of Courses for each category\n    current_distinct_threshold: threshold object for distinct threshold\n    current_threshold: threshold object for regular threshold'
    subject_cutoff = current_threshold.cutoff_for_criterion(CRITERION_SUBJECTS)
    unit_cutoff = current_threshold.cutoff_for_criterion(CRITERION_UNITS)
    max_unit_subjects = map((lambda sat_cat: sorted(sat_cat, key=(lambda s: s.total_units))), satisfied_by_category)
    fixed_subject_progress = 0
    fixed_subject_max = current_distinct_threshold.get_actual_cutoff()
    fixed_unit_progress = 0
    fixed_unit_max = 0
    for category_subjects in max_unit_subjects:
        if (len(category_subjects) > 0):
            subject_to_count = category_subjects.pop()
            fixed_subject_progress += 1
            fixed_unit_progress += subject_to_count.total_units
            fixed_unit_max += subject_to_count.total_units
        else:
            fixed_unit_max += DEFAULT_UNIT_COUNT
    remaining_subject_progress = (subject_cutoff - fixed_subject_max)
    remaining_unit_progress = (unit_cutoff - fixed_unit_max)
    free_courses = sorted([course for category in max_unit_subjects for course in category], key=(lambda s: s.total_units), reverse=True)
    free_subject_max = (subject_cutoff - fixed_subject_max)
    free_unit_max = (unit_cutoff - fixed_unit_max)
    free_subject_progress = min(len(free_courses), free_subject_max)
    free_unit_progress = min(total_units(free_courses), free_unit_max)
    subject_progress = Progress((fixed_subject_progress + free_subject_progress), subject_cutoff)
    unit_progress = Progress((fixed_unit_progress + free_unit_progress), unit_cutoff)
    return (subject_progress, unit_progress)