counters#

Счётчики элементов расписания.

Проедостовляют вспомогательные функции для подсчёта количества элементов в расписании. Эти статистические функции могут использоваться для последующего анализа расписания. Все функции используют намерения, для уточнения результатов подсчёта элементов.

Обрабите внимение, что счётчики возвращают «сырой» результат. Который вы можеет в последствии самостоятельно обработать в необходимый вам формат.

Совет

Если вашей целью является использовать текстовый результат работы счётчиков, то обратите внимание на класс sp.text_counter.TextCounter.

Содержит:

  • Перечисление подгрупп счётчика.

  • Вспомогательные функции для результатов счётчиков.

  • Счётчики:
    • классы.

    • Дни.

    • Индексы (уроки/кабинеты).

class sp.counters.CounterTarget(value)#

Описывает все доступные подгруппы счётчиков.

Пример использования с TextCounter:

# coutnter - экземпляр TextCounter с переданным Schedule
message = counter.cl(
    sc.construct_intent()
    target=CounterTarget.CL
)
  • NONE: То же самое что и None, без цели отображения.

  • CL: По классам в расписании.

  • DAYS: По дням недели.

  • LESSONS: По урокам (l_index).

  • CABINETS: По кабинетам (c_index).

  • MAIN: Противоположный выбранному счётчику индекса.

    Если это счётчик уроков - то по кабинетам. И напротив, если это счётчик кабентов, то по урокам.

Вспомогательные функции#

Используеются для поддержания работы основных функций счётчиков.

sp.counters.group_counter_res(counter_res: dict[str, dict[str, int | Counter]]) dict[int, dict[str, dict]]#

Группирует результат работы счётчиков по total ключу.

Формат вывода:

{
    2: { # Общее количество ("total" счётчика)
        "8в" { # Некоторые счётчики, не обязательно класс.
            # ...
        },
        "...", {
            # ...
        }
    }
}
Параметры:

counter_res (dict[str, dict[str, Union[int, Counter]]]) – Результаты работы счётчика расписания.

Результат:

Сгруппированные результаты работы счётчика.

Тип результата:

dict[int, dict[str, dict]]

sp.counters.reverse_counter(cnt: Counter) dict[int, list[str]]#

Меняет ключ и занчение collections.Counter местами.

Перевоварачивает счётчик из name:count -> count:[name, name, name]. Используется в групперовке результатов работы счётчиков по количеству. Также он будет пропускать пустые значения при подсчёте.

Параметры:

cnt (Сounter) – Счётчик элементов расписаия.

Результат:

Перевёрнутый счётчик расписнаия.

Тип результата:

dict[int, list[str]]

Функции счётчиков#

Это базовые счётчики, которые используются для подсчёта количества элементов в расписании. Возможно после будет переписан как отдельный класс.

Используйте базовые счётчики, если планируете самостоятельно обрабатывать результат подсчётов.

sp.counters.cl_counter(sc: Schedule, intent: Intent) dict[str, dict[str, int | Counter]]#

Счётчик по классам с использованием sp.lessons.

Считает элементы расписнаия, пробегаясь по sp.lessons. Использует намерения для уточнения результатов поиска.

Пример результатов работы счетчика:

{
    "7а": { # Классы
        "total": 12, # Общее количество элементов.
        "days": Counter(), # Количество элементов по дням.
        "lessons": Counter(), # Количесво элементов по урокам.
        "cabinets": Counter(), # Элементы по кабинетам.
    }
}
Параметры:
  • sc (Schedule) – Экземпляр расписания для которого производится подсчёт.

  • intent (Intent) – Намерения для уточнения результатов подсчёта.

Результат:

Подсчитанные элементы расписания по классам.

Тип результата:

dict[str, dict[str, Union[int, Counter]]]

sp.counters.days_counter(sc: Schedule, intent: Intent) dict[str, dict[str, int | Counter]]#

Счётчик по дням с использованием sc.lessons.

Производит подсчёт элементов относительно дней недели в расписании. Использует намерения для уточнения результатов работы счётчиков.

Пример результатов работы счётчика:

{
    "1": { # День недели (0 - понедельник, 5 - суббота).
        "total": 12 # Общее количесво элементов расписания.
        "cl": Counter() # Количество элементов по классам.
        "lessons": Counter() # Количесвто элементов по урокам.
        "cabinets": Counter() # Количесво элементов по кабнетам.
    }
}
Параметры:
  • sc (Schedule) – Экземпляр расписания уроков для которого происход счёт.

  • intent (Intent) – Намерения для уточнения результатов подсчёта.

Результат:

Подсчитанные элементы расписнаия по дням.

Тип результата:

dict[str, dict[str, Union[int, Counter]]]

sp.counters.index_counter(sc: Schedule, intent: Intent, cabinets_mode: bool | None = False) dict[str, dict[str, int | Counter]]#

Счётчик уроков/кабинетов с использованием индексов.

Производит подсчёт элементов расписания в счётиках. В зависимости от режима считает уроки или кабинеты. Использует намерения, для уточнения результатов счётчика.

Осторожно

Этот счётик сильно отличается

Обратите внимаение, что поскольку этот счётчик использует в подсчёте индексы, то и шаблон результатов работы этого счётчика отличается.

cabinets

obj

another

false

lesson

cabinet

true

cabinet

lesson

Пример результатов работы счётчика:

{
    "obj": { # урок или кабинет в зависимости от режима.
        "total": 12 # Общее количесво элементов расписания.
        "cl": Counter() # Количество элементов по классам.
        "days": Counter() # Количесвто элементов по дням.
        "main": Counter() # Количесво элементов по `another`.
    }
}
Параметры:
  • sc (Schedule) – Экземпляр расписания уроков для которого происходи счёт.

  • intent (Intent) – Намерения для уточнения результатов подсчёта.

  • cabinets_mode (Optional[bool]) – Делать ли подсчёты по кабинетам (c_index).

Результат:

Подсчитанные элементы расписнаия по урокам/кабинетам.

Тип результата:

dict[str, dict[str, Union[int, Counter]]]