From 8faf0dc2331a4cf4eabdc9662e22408d4ce8c14a Mon Sep 17 00:00:00 2001 From: t0xa Date: Sun, 31 Aug 2025 14:43:31 +0300 Subject: [PATCH] Project little revamp --- api/proto/README.md | 5 - api/proto/__init__.py | 0 api/proto/routes.proto | 14 - api/proto/routes_pb2.py | 40 - api/proto/routes_pb2.pyi | 19 - api/proto/routes_pb2_grpc.py | 97 --- apple/notes_parser.py | 30 +- data/test.py | 1414 ++++++++++++++++++++++++++++++++++ main.py | 20 +- main_backup.py | 26 +- obsidian/notes_parser.py | 32 +- {api => parsers}/__init__.py | 0 parsers/text_data_parser.py | 15 + playground/contexts.py | 2 +- pyproject.toml | 7 + uv.lock | 78 +- 16 files changed, 1566 insertions(+), 233 deletions(-) delete mode 100644 api/proto/README.md delete mode 100644 api/proto/__init__.py delete mode 100644 api/proto/routes.proto delete mode 100644 api/proto/routes_pb2.py delete mode 100644 api/proto/routes_pb2.pyi delete mode 100644 api/proto/routes_pb2_grpc.py create mode 100644 data/test.py rename {api => parsers}/__init__.py (100%) create mode 100644 parsers/text_data_parser.py diff --git a/api/proto/README.md b/api/proto/README.md deleted file mode 100644 index 31eeb7a..0000000 --- a/api/proto/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Команда для генерации файлов -*Запускать надо из корня приложения* -``` -python3 -m grpc_tools.protoc -Iapi/proto=api/proto --python_out=. --pyi_out=. --grpc_python_out=. api/proto/routes.proto -``` diff --git a/api/proto/__init__.py b/api/proto/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/api/proto/routes.proto b/api/proto/routes.proto deleted file mode 100644 index d3c24e0..0000000 --- a/api/proto/routes.proto +++ /dev/null @@ -1,14 +0,0 @@ -syntax = "proto3"; - -service RouteApproaches { - rpc GetApproach(ApproachID) returns (Approach) {} -} - -message ApproachID { - int32 approachID = 1; -} - -message Approach { - int32 reps = 1; - double weight = 2; -} diff --git a/api/proto/routes_pb2.py b/api/proto/routes_pb2.py deleted file mode 100644 index 70d254d..0000000 --- a/api/proto/routes_pb2.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: api/proto/routes.proto -# Protobuf Python Version: 5.29.0 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 0, - '', - 'api/proto/routes.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x61pi/proto/routes.proto\" \n\nApproachID\x12\x12\n\napproachID\x18\x01 \x01(\x05\"(\n\x08\x41pproach\x12\x0c\n\x04reps\x18\x01 \x01(\x05\x12\x0e\n\x06weight\x18\x02 \x01(\x01\x32:\n\x0fRouteApproaches\x12\'\n\x0bGetApproach\x12\x0b.ApproachID\x1a\t.Approach\"\x00\x62\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api.proto.routes_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - DESCRIPTOR._loaded_options = None - _globals['_APPROACHID']._serialized_start=26 - _globals['_APPROACHID']._serialized_end=58 - _globals['_APPROACH']._serialized_start=60 - _globals['_APPROACH']._serialized_end=100 - _globals['_ROUTEAPPROACHES']._serialized_start=102 - _globals['_ROUTEAPPROACHES']._serialized_end=160 -# @@protoc_insertion_point(module_scope) diff --git a/api/proto/routes_pb2.pyi b/api/proto/routes_pb2.pyi deleted file mode 100644 index b9bf3c7..0000000 --- a/api/proto/routes_pb2.pyi +++ /dev/null @@ -1,19 +0,0 @@ -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Optional as _Optional - -DESCRIPTOR: _descriptor.FileDescriptor - -class ApproachID(_message.Message): - __slots__ = ("approachID",) - APPROACHID_FIELD_NUMBER: _ClassVar[int] - approachID: int - def __init__(self, approachID: _Optional[int] = ...) -> None: ... - -class Approach(_message.Message): - __slots__ = ("reps", "weight") - REPS_FIELD_NUMBER: _ClassVar[int] - WEIGHT_FIELD_NUMBER: _ClassVar[int] - reps: int - weight: float - def __init__(self, reps: _Optional[int] = ..., weight: _Optional[float] = ...) -> None: ... diff --git a/api/proto/routes_pb2_grpc.py b/api/proto/routes_pb2_grpc.py deleted file mode 100644 index 77aa122..0000000 --- a/api/proto/routes_pb2_grpc.py +++ /dev/null @@ -1,97 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from api.proto import routes_pb2 as api_dot_proto_dot_routes__pb2 - -GRPC_GENERATED_VERSION = '1.70.0' -GRPC_VERSION = grpc.__version__ -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - raise RuntimeError( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in api/proto/routes_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - ) - - -class RouteApproachesStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetApproach = channel.unary_unary( - '/RouteApproaches/GetApproach', - request_serializer=api_dot_proto_dot_routes__pb2.ApproachID.SerializeToString, - response_deserializer=api_dot_proto_dot_routes__pb2.Approach.FromString, - _registered_method=True) - - -class RouteApproachesServicer(object): - """Missing associated documentation comment in .proto file.""" - - def GetApproach(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_RouteApproachesServicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetApproach': grpc.unary_unary_rpc_method_handler( - servicer.GetApproach, - request_deserializer=api_dot_proto_dot_routes__pb2.ApproachID.FromString, - response_serializer=api_dot_proto_dot_routes__pb2.Approach.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'RouteApproaches', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('RouteApproaches', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class RouteApproaches(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def GetApproach(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/RouteApproaches/GetApproach', - api_dot_proto_dot_routes__pb2.ApproachID.SerializeToString, - api_dot_proto_dot_routes__pb2.Approach.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/apple/notes_parser.py b/apple/notes_parser.py index b2e2ba2..c2bf190 100644 --- a/apple/notes_parser.py +++ b/apple/notes_parser.py @@ -63,25 +63,28 @@ def parse_training_header( def serialize_exercise(reps: str, weight: str, name: str) -> Exercise: # Split reps into array of int's - reps: List[int] = [int(rep) for rep in reps.split("-")] + reps_list: List[int] = [int(rep) for rep in reps.split("-")] weight_splitted: bool = False + weight_list: List[float] = [] if weight: - weight: List[str] = [weight for weight in weight.split("-")] + weight_str_list: List[str] = [weight for weight in weight.split("-")] # Check if weight is splitted - if any(split_anchor in weight[0] for split_anchor in ["x", "х"]): + if any(split_anchor in weight_str_list[0] for split_anchor in ["x", "х"]): weight_splitted = True - splitter = "x" if "x" in weight[0] else "х" - weight: List[float] = [xweight.split(splitter)[0] for xweight in weight] + splitter = "x" if "x" in weight_str_list[0] else "х" + weight_list = [float(xweight.split(splitter)[0]) for xweight in weight_str_list] + else: + weight_list = [float(w) for w in weight_str_list] approaches = [] if not weight: - for rep_index in range(0, len(reps)): - approach = Approach(weight=0, reps=reps[rep_index]) + for rep_index in range(0, len(reps_list)): + approach = Approach(weight=0.0, reps=reps_list[rep_index]) approaches.append(approach) else: weight_pointer = 0 - for rep_index in range(0, len(reps)): - approach = Approach(weight=weight[weight_pointer], reps=reps[rep_index]) - if rep_index < len(weight) - 1: + for rep_index in range(0, len(reps_list)): + approach = Approach(weight=weight_list[weight_pointer], reps=reps_list[rep_index]) + if rep_index < len(weight_list) - 1: weight_pointer += 1 approaches.append(approach) exercise = Exercise( @@ -103,6 +106,7 @@ def parse_training_exercises(exercise_line: str) -> Exercise: return serialize_exercise( name=stripped[0], weight=stripped[1], reps=stripped[2] ) + raise ValueError("No valid exercise data found") def parse_training_data(): @@ -135,11 +139,13 @@ def parse_training_data(): def remap_unique_exercises(apple_trainings: List[Training]) -> List[Training]: for apple_training in apple_trainings: - if not apple_training: + if not apple_training or not apple_training.exercises: continue for apple_exercise in apple_training.exercises: if not apple_exercise: continue print(f"{apple_training.date} : {apple_exercise}") - apple_exercise.name = unique_apple_exercises_mapper.get(apple_exercise.name) + mapped_name = unique_apple_exercises_mapper.get(apple_exercise.name) + if mapped_name is not None: + apple_exercise.name = mapped_name return apple_trainings diff --git a/data/test.py b/data/test.py new file mode 100644 index 0000000..6591cbb --- /dev/null +++ b/data/test.py @@ -0,0 +1,1414 @@ +import re + +def parse_workout(workout_str): + # Используем регулярное выражение для поиска упражнений в строке + pattern = r'^(.*?)\n|^\|(.*?)\|(.*?)\|(.*?)$' + lines = workout_str.strip().split('\n') + exercises = [] + + for line in lines: + match = re.match(pattern, line) + if match and 'Упражнение' not in line: # Берем только упражнения + exercise_name = clean(match.group(2)) + weight = clean_weight(match.group(3)) if match.group(3) else None + sets_reps = parse_sets_reps(clean(match.group(4))) + + exercises.append({ + 'exercise': exercise_name, + 'weight': weight, + 'sets_reps': sets_reps + }) + return exercises + +def clean(text): + # Удаляем лишние пробелки и символы из строки + return text.strip().replace('\u2060', '').replace('—', '-').strip() + +def parse_sets_reps(reps_str): + # Разбираем строку подходов (например, "12-10-9-8") + parts = reps_str.split('-') + if not parts: + return None + return [int(p) for p in parts] + +def clean_weight(weight_str): + # Очищаем и преобразуем вес в нужный формат (например, "30" или "20х2") + weight_str = weight_str.replace('х', 'x').replace(',', '.') + if not weight_str: + return None + return float(re.sub(r'[^0-9.]+', '', weight_str)) + +# Пример использования для конкретного тренировочного дня solo-61 (2025-03-15) +workout_text = """ +# 2025-08-16 (solo-85) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ---- | ----------- | +| Подтягивания | | 10-7-6-5 | +| Гребная тяга с упором в грудь | 85 | 12-11-11-12 | +| Жим гантелей лёжа | 25х2 | 10-10-8-10 | +| Сведение рук пек-дек | 65 | 10-9-8-8 | +| Пресс на скамье | | 12-12-10-10 | + +# 2025-08-13 (solo-84) + +| Упражнение | Вес | Подходы | +| --------------------------------------------- | ----------- | ----------- | +| Подъем штанги стоя | 30 | 12-12-12-12 | +| Подьем гантелей стоя | 15х2 | 10-10-10-10 | +| Молоты лежа | 15х2-12.5х2 | 10-12-12-12 | +| Отжимания на трицепс в кроссовере | 60 | 10-10-10 | +| Жим от плеч вверх сидя в тренажёре (блинчики) | 17.5х2 | 10-10-10-10 | + +# 2025-08-11 (solo-83) + +| Упражнение | Вес | Подходы | +| ------------------------------------------------ | --------- | ----------- | +| Подтягивания | | 10-7-7-5 | +| Pull down в тренажёре (кирпичи) | 80 | 12-12-12-12 | +| Разведение рук пек-дек | 30 | 12-12-12-12 | +| Жим от груди сидя в тренажёре (рычаги, блинчики) | 20х2-25х2 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 10-12-12-10 | + +# 2025-08-09 (solo-82) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | ----------- | ----------- | +| Подтягивания обратным хватом | | 11--11-7 | +| Подъем гантелей стоя | 17.5х2-15х2 | 7-10-10-10 | +| Молоты лежа | 12.5х2 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 55-55-50 | 12-12-11-12 | +| Жим от плеч вверх сидя с гантелями | 20х2 | 11-11-11-7 | + +# 2025-08-07 (solo-81) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ----------- | ----------- | +| Подтягивания | | 10-8-7-6 | +| Pull down (блины на рычагах) | 10x2-20x2 | 15-12-12-12 | +| Жим гантелей лежа | 25х2 | 10-10-10-8 | +| Жим от груди сидя в тренажёре (кирпичики) | 50-60-65-70 | 12-12-12-12 | +| Пресс на скамейке | | 12 | + +# 2025-08-05 (solo-80) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ------ | ----------- | +| Подъем штанги стоя | 30 | 12-12-12-12 | +| Бицепс в тренажёре | 20 | 10-10-10-10 | +| Молоты лежа | 12.5х2 | 12-12-12-12 | +| Разведение рук в стороны стоя с гантелями | 12.5х2 | 12-12-12-12 | +| Жим от плеч вверх с гантелями | 20х2 | 12-12-10 | + +# 2025-08-02 (solo-79) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ----- | ----------- | +| Подтягивания | | 9-6-6-6 | +| Pull down | 85 | 12-12-12-12 | +| Гребная тяга с упором в грудь | 85-80 | 10-12-12-12 | +| Жим гантелей лёжа | 25х2 | 12-10-10-8 | +| Сведение рук пек-дек | 60 | 9-12-12 | + +# 2025-07-31 (solo-78) + +| Упражнение | Вес | Подходы | +| ---------------------------------------- | ----------- | ----------- | +| Бицепс в тренажёре | 25 | 10-9-8-8 | +| Тяга вертикального блока обратным хватом | 65 | 10-10-10-10 | +| Отжимания на трицепс в кроссовере | 55 | 12-12-10-9 | +| Брусья | | 8-8-10-8 | +| Жим от плеч вверх сидя с гантелями | 22.5х2-20х2 | 8-12-12-12 | + +# 2025-07-28 (solo-77) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ------ | ----------- | +| Подтягивания | | 7-7-6-6 | +| Pull down | 80 | 12-12-12-12 | +| Гребная тяга с упором в грудь | 80 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 12-12-12-12 | +| Сведение рук пек-дек | 60 | 12-11-10 | + +# 2025-07-25 (solo-76) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 10-8-7-7 | +| Бицепс в тренажёре | 20 | 12-10-10-10 | +| Отжимания на трицепс в кроссовере | 50 | 12-12-12-12 | +| Молоты лежа | 12.5х2 | 10-10-10-10 | +| Жим от плеч вверх сидя с гантелями | 20х2 | 12-12-12-11 | + +# 2025-07-23 (solo-75) + +| Упражнение | Вес | Подходы | +| ------------------------------------------------ | ------ | ----------- | +| Подтягивания | | 10-7-6-5 | +| Вертикальная тяга - рычаги с блинами (pull down) | 20x2 | 12-12-10-12 | +| Тяга Т-грифа | 35 | 11-11-10-12 | +| Жим гантелей лёжа | 22.5х2 | 12-12-12-12 | +| Сведение рук пек-дек | 60 | 11-12-11 | + +# 2025-07-21 (solo-74) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ---- | ----------- | +| Подтягивания обратным хватом | | 10-9-6-6 | +| Подъем штанги стоя | 30 | 11-11-11-11 | +| Отличается на трицепс в кроссовере | 50 | 10-10-11-12 | +| Жим от плеч сидя в тренажёре (блинчики) | 15х2 | 12-12-10-10 | +| Пресс на скамье | | 12-12-12-12 | + +# 2025-07-17 (solo-73) + +| Упражнение | Вес | Подходы | +| ------------------------------------------------ | --------- | ----------- | +| Подтягивания | | 10-7-6-5 | +| Вертикальная тяга - рычаги с блинами (pull down) | 15x2-20x2 | 12-10-12-12 | +| Разведение рук пек-дек | 30-35 | 12-12-10-11 | +| Сведение рук пек дек | 60 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 10-12-12 | + +# 2025-07-14 (solo-72) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 11-7-7-7 | +| Бицепс в тренажёре | 20 | 12-10-9-10 | +| Молоты лежа | 12.5x2 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-12-12 | +| Жим от плеч сидя с гантелями | 20х2 | 12-12-11 | + +# 2025-07-12 (solo-71) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ------ | ----------- | +| Подтягивания | | 10-9-7-6 | +| Pull down | 80 | 12-12-12-12 | +| Гребная тяга с упором в грудь | 80-75 | 10-12-12-12 | +| Сведение рук пек дек | 60 | 12-12-10-12 | +| Жим гантелей лежа | 22.5х2 | 10-10-8 | + +# 2025-07-10 (solo-70) + +| Упражнение | Вес | Подходы | +| --------------------------------- | --- | ----------- | +| Подтягивания обратным хватом | | 12-10-7-7 | +| Подъем штанги стоя | 30 | 12-10-10-10 | +| Трицепс в кроссовере | 30 | 12-12-10-10 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-12-12 | +| Жим от плеч вверх в тренажёре | 40 | 11-10-10-10 | + +# 2025-07-07 (solo-69) + +| Упражнение | Вес | Подходы | +| -------------------------- | ------ | ----------- | +| Подтягивания | | 10-7-7-5 | +| Тяга горизонтального блока | 60 | 12-12-12-12 | +| Тяга Т-грифа | 35 | 11-12-12-11 | +| Сведение рук пёк дек | 60 | 12-12-12-10 | +| Жим гантелей лежа | 22.5х2 | 10-10-10-10 | + +# 2025-07-05 (solo-68) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ----- | ----------- | +| Подтягивания обратным хватом | | 10-8-7-6 | +| Бицепс в тренажёре | 20 | 10-10-10-10 | +| Подъем штанги стоя | 30-25 | 10-12-12-12 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-12-12 | +| Жим от плеч сидя с гантелями | 20х2 | 12-10-10-10 | + +# 2025-07-03 (solo-67) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ---- | ----------- | +| Подтягивания | | 10-8-6-6 | +| Вертикальная тяга - рычаги (pull down) | 80 | 12-12-12-12 | +| Гребная тяга с упором в грудь | 80 | 12-12-12-12 | +| Сведение рук пек дек | 60 | 12-12-12-12 | +| Жим гантелей лежа | 25х2 | 7-10-8 | + +# 2025-06-30 (solo-66) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 12-8-8-7 | +| Подъем гантелей стоя | 15х2 | 11-11-11-11 | +| Молоты лежа | 12.5х2 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-12-12 | +| Жим от плеч сидя с гантелями | 20х2 | 11-10-10-8 | + +# 2025-06-28 (solo-65) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ---------------- | ----------- | +| Подтягивания | | 9-8-6-5 | +| Вертикальная тяга - рычаги (pull down) | 80 | 12-12-11-10 | +| Гребная тяга с упором в грудь | 80 | 12-12-12-12 | +| Сведение рук пек дек | 60 | 12-12-10-10 | +| Жим от груди сидя (рычаги) | 20х2-22.5х2-25х2 | 12-12-11-12 | + + +# 2025-06-23 (solo-64) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ------ | ----------- | +| Подъем штанги стоя | 30 | 12-12-12-12 | +| Бицепс в тренажёре | 20 | 10-10-10-9 | +| Молоты лежа | 12.5х2 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-12-11 | +| Жим от плеч вверх в тренажёре | 40 | 12-12-12 | + +# 2025-06-23 (solo-63) + +| Упражнение | Вес | Подходы | +| -------------------------- | ------ | ----------- | +| Подтягивания | | 10-7-5-5 | +| Тяга Т-грифа | 40 | 10-10-10 | +| Тяга горизонтального блока | 65 | 12-12-12-11 | +| Жим гантелей лежа | 27.5х2 | 10-10-7-8 | +| Сведение рук пек-дек | 60 | 12-11-10-9 | + +# 2025-06-21 (solo-62) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 9-9-6-5 | +| Подъем штанги стоя | 30 | 12-10-12-10 | +| Молоты лежа | 12.5х2 | 12-10-10-10 | +| Жим от плеч сидя с гантелями | 20х2 | 12-10-9-8 | +| Пресс на скамейке | | 15-15-12-12 | + +# 2025-06-19 (solo-61) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ------ | ----------- | +| Подтягивания | | 10-6-6-4 | +| Вертикальная тяга - рычаги (pull down) | 75 | 12-12-12-12 | +| Гребная тяга с упором в грудь | 80 | 11-12-12-12 | +| Жим гантелей лежа | 27.5х2 | 10-9-8-7 | +| Сведение рук пек-дек | 60 | 10-10-10-9 | + +# 2025-06-16 (solo-60) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ---- | ----------- | +| Подтягивания обратным хватом | | 10-9-7-5 | +| Подъем гантелей стоя | 15х2 | 11-11-11-11 | +| Бицепс в тренажёре | 20 | 9-10-8-7 | +| Отжимания на трицепс в кроссовере | 45 | 12-12-11-12 | +| Жим от плеч сидя с гантелями | 20х2 | 12-11-9-9 | + +# 2025-06-14 (solo-59) + +| Упражнение | Вес | Подходы | +| ------------------------------------- | ------------------ | ----------- | +| Подтягивания | | 9-8-6-6 | +| Тяга горизонтального блока | 65 | 12-12-12-8 | +| Вертикальная тяга - рычги (pull down) | 70-75 | 12-12-12-12 | +| Жим гантелей лёжа | 27.5х2-27.5х2-25х2 | 10-8-9-8 | +| Сведение рук пек-дек | 60 | 9-8-8-8 | + +# 2025-06-12 (solo-58) + +| Упражнение | Вес | Подходы | +| ------------------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 10-7-6-6 | +| Подъем штанги стоя | 30 | 12-10-10-10 | +| Молоты лежа | 12.5х2 | 10-10-10-8 | +| Отжимания на трицепс в кроссовере | 45 | 10-10-10-10 | +| Жим от плеч вверх в тренажёре (блины) | 15х2 | 12-9-10 | + +# 2025-06-09 (solo-57) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ----- | ----------- | +| Подтягивания | | 9-7-6-5 | +| Гребная тяга с упором в грудь | 80 | 12-12-12-12 | +| Тяга Т-грифа | 35-40 | 12-12-10-12 | +| Жим гантелей лежа | 25х2 | 10-10-10-10 | +| Сведение рук пек-дек | 60 | 10-10-9-9 | + +# 2025-06-07 (solo-56) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ---- | ----------- | +| Подтягивания | | 8-8-7 | +| Подъем гантелей стоя | 15х2 | 10-10-10-10 | +| Бицепс в тренажёре | 20 | 9-8-7-8 | +| Отжимания на трицепс в кроссовере | 45 | 12-11-9-10 | +| Жим от плеч сидя с гантелями | 20х2 | 12-12-11-10 | + +# 2025-05-31 (solo-55) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 10-8-7 | +| Подъем штанги стоя | 30 | 10-10-10-10 | +| Молоты лежа | 12.5х2 | 10-10-10-10 | +| Жим от плеч сидя с гантелями | 20х2 | 12-10-10-9 | +| Пресс в тренажёре | 45-50 | 12-12-10-10 | + +# 2025-05-29 (solo-54) + +| Упражнение | Вес | Подходы | +| ----------------------------------- | ---------- | ------------------- | +| Подтягивания | | 9-7-6-5 | +| Тяга горизонтального блока | 60 | 12-12-12-12 | +| Тяга гантелей в наклоне одной рукой | 22.5x2-25x2-30x2 | 12-12-10-10 | +| Жим от груди сидя (рычаги) | 20х2 | 10-12-12 | +| Жим гантелей лежа | 22.5х2 | 12-12-12-12 | + +# 2025-05-26 (solo-53) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ------ | ----------- | +| Подтягивания обратным хватом | | 8-9-6-5 | +| Подъем штанги стоя | 30 | 10-10-8-10 | +| Отжимания на трицепс в кроссовере | 45 | 12-9-9-9 | +| Жим от плеч сидя с гантелями | 20х2 | 10-10-8-8 | +| Разведение рук в стороны стоя с гантелями | 12.5х2 | 12-10-10-10 | + +# 2025-05-24 (solo-52) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ----------- | ----------- | +| Подтягивания | 0-0-0-30 | 10-7-5-7 | +| Гребная тяга с упором в грудь | 75 | 12-12-12-12 | +| Вертикальная тяга - рычаги (pull down) | 65 | 12-12-12-12 | +| Сведение рук пек-дек | 60 | 12-12-10-8 | +| Жим гантелей лежа | 25х2-22.5х2 | 8-10-10-10 | + +# 2025-05-21 (solo-51) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ----------- | -------------- | +| Бицепс в тренажёре | 20 | 12-11-9-9 | +| Подъём гантелей стоя | 15х2 | 10-10-10-10 | +| Молоты лёжа | 12.5х2 | 11-10-12-10 | +| Жим от плеч сидя с гантелями | 17.5х2-20х2 | 12-12-10-9 | +| Отведение руки из-за спины в кроссовере | 15x2-12x2 | 10-12-12 | + +# 2025-05-19 (solo-50) + +| Упражнение | Вес | Подходы | +| -------------------------- | ------ | ----------- | +| Подтягивания | | 8-7-6-6 | +| Тяга горизонтального блока | 60 | 12-12-12-12 | +| Тяга Т-грифа | 35 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 12-12-12-10 | +| Подъём ног в висе | | 10-10-8-7 | + +# 2025-05-17 (solo-49) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ----- | ----------- | +| Подтягивания обратным хватом | | 9-8-6-6 | +| Сгибание рук на бицепс в кроссовере | 30-35 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 40-45 | 12-10-9-9 | +| Брусья | 30 | 10-10-9-7 | +| Жим от плеч вверх в тренажёре (рычаги) | 40 | 12-12-9-10 | + +# 2025-05-14 (solo-48) + +| Упражнение | Вес | Подходы | +| ----------------------------- | --------- | ----------- | +| Подтягивания | 0-0-30-30 | 9-7-9-7 | +| Гребная тяга с упором в грудь | 70-75 | 12-12-12-12 | +| Тяга штанги к поясу в наклоне | 40-50 | 12-12-12 | +| Жим гантелей лёжа | 22.5х2 | 12-12-12-10 | +| Сведение рук пёк дек | 55 | 10-10-12-10 | + +# 2025-05-12 (solo-47) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ------------------------- | ----------- | +| Тяга вертикалього блока обратным хватом | 45-50-55-50 | 12-12-8-12 | +| Подъём штанги стоя | 30 | 10-9-9-9 | +| Молоты лежа | 12.5х2-12.5х2-12.5х2-10х2 | 10-10-10-12 | +| Отжимания на трицепс в кроссовере | 40 | 10-10-11-10 | +| Жим от плеч сидя с гантелями | 15х2-17.5х2 | 12-12-12-12 | + +# 2025-05-08 (solo-46) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ----------- | ----------- | +| Подтягивания | | 8-7-6-6 | +| Тяга горизонтального блока | 60 | 12-12-12-9 | +| Тяга Т-грифа | 35 | 12-12-9-12 | +| Разведение рук в стороны с гантелями стоя | 12.5х2-10х2 | 10-12-12-12 | +| Жим гантелей сидя | 15х2-17.5х2 | 12-12-11-12 | + +# 2025-05-05 (solo-45) + +| Упражнение | Вес | Подходы | +| --------------------------------- | --- | ----------- | +| Подьем штанги стоя | 30 | 10-10-10-10 | +| Бицепс в тренажёре | 20 | 10-9-9-8 | +| Брусья | 30 | 12-12-10-10 | +| Отжимания на трицепс в кроссовере | 40 | 10-10-9-9 | +| Подьем ног в висе | | 10-10-10 | + +# 2025-05-03 (solo-44) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | -------- | ----------- | +| Подтягивания | | 10-8-5-5 | +| Гребная тяга с упором в грудь | 75 | 12-12-12-12 | +| Тяга вертикалього блока | 55-55-50 | 10-8-12-10 | +| Жим гантелей лежа | 22.5х2 | 12-12-8 | +| Жим штанги лёжа | 50 | 12 | +| Жим от груди сидя в тренажёре (рычаги) | 50 | 12-10-10 | + +# 2025-04-30 (solo-43) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ----------- | ----------- | +| Подъём штанги стоя | 30 | 12-12-11-10 | +| Молоты лежа | 12.5х2 | 12-10-10-10 | +| Разведение рук в стороны стоя с гантелями | 10х2-12.5х2 | 12-12-10-11 | +| Бицепс в тренажёре (arm curl) | 20 | 10-10-8-8 | +| Жим от плеч вверх (рычаги) | 45 | 12-12-8-8 | + +# 2025-04-28 (solo-42) + +| Упражнение | Вес | Подходы | +| -------------------------------------------- | ------- | --------------- | +| Подтягивания | | 11-8-7-6 | +| Гребная тяга с упором в грудь | 75 | 12-12-12-12 | +| Тяга Т-грифа | 32.5-35 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 12-12-12-10 | +| Разведение руки в кроссовере (горизонтально) | 10x2 | 12-12-12-12 | + +# 2025-04-26 (solo-41) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ---- | ---------- | +| Подтягивания обратным хватом | | 10-8-7-6 | +| Подъём штанги стоя | 30 | 11-11-10-8 | +| Отжимания на трицепс в кроссовере | 40 | 10-10-10-9 | +| Жим от плеч вверх (рычаги) | 15х2 | 12-10-10-8 | +| Подъём ног в висе | | 12-10-8-10 | + +# 2025-04-24 (solo-40) + +| Упражнение | Вес | Подходы | +| --------------------------------------------- | ------ | ----------- | +| Подтягивания | | 10-7-6-6 | +| Тяга горизонтального блока | 55-60 | 12-12-12-12 | +| Тяга вертикального блока в тренажёре (рычаги) | 50-60 | 12-12-12-12 | +| Жим гантелей лежа | 22.5х2 | 12-12-12-10 | +| Жим от груди сидя в тренажёре (рычаги) | 60 | 7-10-9-8 | + +# 2025-04-21 (solo-39) + +| Упражнение | Вес | Подходы | +| --------------------------------- | ----------- | ----------- | +| Подтягивания обратным хватом | | 10-8-7-6 | +| Подъём гантелей на бицепс | 12.5х2-15х2 | 12-10-10-10 | +| Молоты лежа | 12.5х2 | 12-10-10-10 | +| Отжимания на трицепс в кроссовере | 40 | 12-12-12-10 | +| Жим от плеч вверх (рычаги) | 45-45-40 | 12-9-11-9 | + +# 2025-04-19 (solo-38) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ---------- | ----------- | +| Подтягивания | | 10-7-5-6 | +| Тяга к поясу с упором на грудь (рычаг) | 20-22.5-25 | 12-12-12-12 | +| Тяга Т-грифа | 30-32.5 | 12-12-12-12 | +| Жим гантелей лёжа | 22х5 | 12-12-10-10 | +| Сведение рук пек дек | 55-50 | 10-12-12-12 | + +# 2025-04-17 (solo-37) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ---------------- | ------------------- | +| Подтягивания обратным хватом | | 10-8-7-6 | +| Подъём штанги стоя | 30-25 | 11-12-12-12 | +| Молоты лёжа | 12.5х2-12х5-10х2 | 12-10-12-10 | +| Отведение руки в кроссовере | 15x2 | 12-12-12-12 | +| Жим от плеч вверх (рычаги) | 45-40 | 10-12-10-9 | + +# 2025-04-14 (solo-36) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------- | ----------- | +| Подтягивания | | 10-7-6-5 | +| Разведение рук назад пек дек | 35-40-35 | 12-10-11-12 | +| Гребная тяга с упором в грудь | 70 | 12-12-12-12 | +| Жим гантелей лежа на скамье | 22.5х2 | 11-10-9-9 | +| Жим от груди сидя в тренажёре | 50-55-60 | 12-12-12-12 | + +# 2025-04-12 (solo-35) + +| Упражнение | Вес | Подходы | +| ------------------------------------ | ---------------- | ----------- | +| Подтягивания обратным хватом | | 10-7-7-5 | +| Подъем гантелей на бицепс | 12.5х2 | 12-12-12-12 | +| Отжимания на трицепс в кроссовере | 35-40 | 12-11-10-12 | +| Разведение рук в стороны с гантелями | 10х2-12.5х2-10х2 | 12-10-12-12 | +| Жим от плеч вверх (рычаги) | 45-40 | 9-10-11-7 | + +# 2025-04-09 (solo-34) + +| Упражнение | Вес | Подходы | +| ----------------------------- | --------- | ----------- | +| Подтягивания | | 10-7-6 | +| Тяга вертикального блока | 45-50 | 12-10-10-12 | +| Тяга горизонтального блока | 60 | 12-12-10-12 | +| Жим от груди сидя в тренажёре | 30х2-25х2 | 6-12-12- | +| Сведение рук в пек дек | 55 | 12-12-10-10 | + +# 2025-04-07 (solo-33) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ----------- | ------------------- | +| Подтягивания обратным хватом | | 10-8-7 | +| Подьем штанги стоя | 25 | 12-12-12-12 | +| Молоты лежа | 12.5х2-10х2 | 10-12-12-12 | +| Жим гантелей сидя на скамье | 20х2 | 10-9 | +| Отведение руки в кроссовере | 15x2 | 10-12-10-10 | + +# 2025-04-05 (solo-32) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------- | ----------- | +| Подтягивания | | 9-7-6-5 | +| Тяга вертикального блока | 45-50 | 12-10-9-9 | +| Гребная тяга с упором в грудь | 65-65-70 | 12-12-12-12 | +| Жим гантелей лежа | 20х2 | 12-12-12-9 | +| Сведение рук пек дек | 55-50 | 9-12-12-12 | + +# 2025-04-03 (solo-31) + +| Упражнение | Вес | Подходы | +| ----------------------------- | ---- | ----------- | +| Подтягивания обратным хватом | | 10-8-7-6 | +| Подьем штанги стоя | 25 | 12-12-12-12 | +| Отжимания на трицепс | 40 | 12-12-12-12 | +| Разведение рук в стороны стоя | 10х2 | 12-12-12-12 | +| Жим от плеч вверх (рычаги) | 40 | 12-11-9-9 | + +# 2025-03-31 (solo-30) + +| Упражнение | Вес | Подходы | +| -------------------------- | ---------- | ----------- | +| Подтягивания | | 9-7-6 | +| Тяга т-грифа | 25-30-32.5 | 12-12-12-12 | +| Тяга горизонтального блока | 55-60 | 12-12-9-12 | +| Сведение рук пек дек | 50-55 | 12-12-12-9 | +| Жим гантелей лёжа | 20х2 | 10-12-12 | + +# 2025-03-29 (solo-29) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ---- | ----------- | +| Гиперэкстензия | 10 | 12-12-12-12 | +| Икроножные стоя | 25х2 | 12-12-12 | +| Подъем штанги стоя | 25 | 12-12-12-12 | +| Трицепс лежа на скамье | 10х2 | 12-12-10-8 | +| Подтягивание обратным хватом | | 7-6-5-6 | + +# 2025-03-27 (solo-28) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------- | ----------- | +| Подтягивания | | 10-7-6-5 | +| Гребная тяга с упором в грудь | 55-65-70 | 12-12-12-12 | +| Тяга штанги в наклоне | 15х2 | 12-12-12-12 | +| Разведение рук стоя | 10х2 | 12-12-12-12 | +| Жим гантелей сидя | 20х2 | 10-10-8-8 | + +# 2025-03-24 (solo-27) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | --------- | ----------- | +| Подтягивания обратным хватом | | 10-8-8-6 | +| Подъём штанги стоя | 25 | 12-12-9-12 | +| Отжимания на трицепс в кроссовере | 35 | 12-12-12-11 | +| Жим от груди сидя в тренажёре (рычаги) | 25х2-30х2 | 12-9-8-8 | +| Сведение рук пек дек | 45-50 | 12-12-12-12 | + +# 2025-03-22 (solo-26) + +| Упражнение | Вес | Подходы | +| ------------------------------- | ---- | ----------- | +| Подтягивания | | 10-7-6 | +| Тяга горизонтального блока | 60 | 12-12-10-10 | +| Разведение рук пек дек | 30 | 12-12-10-10 | +| Разведение рук с гантелями стоя | 10х2 | 12-12-10-12 | +| Жим от плеч вверх (рычаги) | 35 | 12-12-10-10 | + +# 2025-03-20 (solo-25) + +| Упражнение | Вес | Подходы | +| ---------------------------- | ---- | -------------- | +| Подтягивания обратным хватом | | 10-7-6 | +| Подъём штанги стоя | 25 | 12-12-12-12 | +| Молоты лежа | 10х2 | 12-12-10-9 | +| Жим гантелей лежа | 20х2 | 12-12-11-9 | +| Сведение рук пек дек | 45 | 12-12-12-12-12 | + +# 2025-03-18 (solo-24) + +| Упражнение | Вес | Подходы | +| ----------------------------- | --------- | ----------- | +| Подтягивания | | 10-7-6 | +| Тяга штанги в наклоне | 10х2-15х2 | 12-12-12-12 | +| Тяга гантели в наклоне | 25х2 | 12-12-12-12 | +| Разведение рук пек дек | 30 | 12-12-10-8 | +| Жим от плеч вверх в тренажёре | 35 | 12-12-11-9 | + +# 2025-03-15 (solo-23) + +| Упражнение | Вес | Подходы | +| ----------------------- | ----------- | ---------- | +| Подтягивания | | 8-7-6 | +| Жим гантелей сидя | 17.5х2-20х2 | 12-10-9-7 | +| Подъем штанги стоя | 25 | 12-12-12-9 | +| Молоты с гантелями лежа | 10х2 | 12-10-9-10 | +| Бицепс-машина | 20-20-15 | 10-7-11-10 | + +# 2025-03-12 (solo-23) + +| Упражнение | Вес | Подходы | +| -------------------------- | -------- | ----------- | +| Подтягивания | | 11-8-6-6 | +| Тяга горизонтального блока | 55 | 12-12-12-12 | +| Тяга вертикального блока | 45-45-40 | 10-8-10-10 | +| Жим гантелей лежа | 20х2 | 12-12-11-10 | +| Разведение рук пек дек | 30 | 12-12-10-9 | + +# 2025-03-10 (solo-22) + +| Упражнение | Вес | Подходы | +| --------------------------------- | -------- | -------------- | +| Подтягивания | | 9-7-6 | +| Разгибание ног сидя | 75-90 | 12-12-12-12 | +| Икроножные сидя | 20-30-40 | 12-15-12-12-12 | +| Подъем штанги стоя | 25 | 12-12-10-12 | +| Отжимания на трицепс в кроссовере | 30-35 | 12-12-11-10 | +| Пресс в тренажёре | 40-45 | 12-12-12-8 | + +# 07.03.2025 (solo-21) + +| Упражнение | Вес | Подходы | +| -------------------------- | --------- | -------- | +| Подтягивания | | 10-7-6 | +| Тяга гантели в наклоне | 25х2 | 12-12-12 | +| Жим гантелей лежа | 20х2-22.5 | 12-10-9 | +| Тяга горизонтального блока | 55 | 12-12-12 | +| Тяга вертикального блока | 45 | 12-10-10 | +| Жим от плеч вверх рычаги | 35 | 12-10 | + +# 05.03.2025 (solo-20) + +| Упражнение | Вес | Подходы | +| ------------------- | -------- | -------------- | +| Разгибание ног сидя | 70-90-95 | 12-12-12-12-12 | +| Сгибание ног лежа | 45-50 | 12-12-12-12 | +| Икроножные стоя | 25х2 | 12-12-12-12 | +| Подъем штанги стоя | 20-25 | 12-12-12-10 | +| Жим гантелей сидя | 17.5х2 | 12-11-10-9 | + +# 03.03.2025 (solo-19) + +| Упражнение | Вес | Подходы | +| ------------------------------------------ | -------- | ----------- | +| Подтягивания | | 9-5-5 | +| Тяга гантели к поясу в наклоне одной рукой | 25 | 12-12-12-10 | +| Тяга горизонтального блока | 60 | 10-10-10-10 | +| Жим от плеч сидя | 30 | 12-12-10 | +| Сведение рук пек дек | 40-45-50 | 12-12-12-12 | + +# 17.02.2025 (solo-18) + +| Упражнение | Вес | Подходы | +| ----------------- | ---------------- | ----------- | +| Подтягивания | | 9-7-6-5 | +| Сгибание ног лежа | 50 | 12-12-12-12 | +| Икроножные стоя | 25х2-25х2-27.5х2 | 12-12-12-10 | +| Жим гантелей лежа | 25х2 | 12-9-9-7 | +| Бицепс машина | 25-20 | 6-10-10-8 | + + +# 15.02.2025 (solo-17) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | -------- | ----------- | +| Подтягивания | | 10-7-6-5 | +| Тяга Т грифа | 25-30 | 12-12-12 | +| Тяга вертикального блока | 55-55-50 | 12-9-12-11 | +| Тяга горизонтального блока | 55-60 | 12-12-12-10 | +| Отведение руки в кроссовере из за спины | 10-12-10 | 12-10-12 | + +# 13.02.2025 (solo-16) + +| Упражнение | Вес | Подходы | +| ------------------------------- | -------- | ----------- | +| Разгибание ног сидя | 85-90-95 | 12-12-12-12 | +| Сгибание ног лежа | 40-45-50 | 12-12-12-12 | +| Икроножные стоя | 22.5х2 | 12-12-12-12 | +| Подьем штанги стоя | 20-25 | 12-12-12-12 | +| Кроссовер: отжимание на трицепс | 35 | 12-12-12-12 | + +# 2025-02-10 (solo-15) + +| Упражнение | Вес | Подходы | +| -------------------------- | -------- | ----------- | +| Подтягивания | | 6-9-6-5 | +| Тяга горизонтального блока | 55-60 | 12-12-12-12 | +| Тяга вертикального блока | 50 | 12-11-10-10 | +| Жим от груди рычаги | 40-60 | 12-11-8-9 | +| Сведение пек дек | 45-45-50 | 12-15-12-12 | + +# 2025.02.08 (solo-14) + +| Упражнение | Вес | Подходы | +| ---------------------- | ----------- | ----------- | +| Разгибание ног сидя | 75-75-90 | 12-16-12-12 | +| Жим ногами | 100-120-140 | 12-12-12-12 | +| Икроножные стоя | 25-40-45 | 12-12-12-12 | +| Жим гантелей сидя | 20х2 | 9-12-10-8 | +| Разведение рук пек дек | 35 | 12-12-12 | + +# 2025.02.06 (solo-13) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | --------- | ----------- | +| Подтягивания | | 8-7-5-6 | +| Тяга гантели в наклоне одной рукой | 27.5 | 12-12-12-12 | +| Тяга горизонтального блока | 55 | 12-12-12-12 | +| Жим от груди в тренажёре сидя (рычаги) | 15х2-30х2 | 12-11-9-6 | +| Сведение рук в пёк дек | 45 | 12-12-12-12 | + +# 03.02.2025 (solo-12) + +| Упражнение | Вес | Подходы | +| ------------------------------- | ----------- | ----------- | +| Подтягивания обратным хватом | | 10-7-6-5 | +| Кроссовер: отжимания на трицепс | 35 | 12-12-10-10 | +| Подьем гантелей на бицепс стоя | 10х2-12.5х2 | 12-11-9-10 | +| Жим от плеч вверх (рычаги) | 35 | 12-9 | +| Брусья | 30 | 12-10-8-8 | + +# 01.02.2025 (solo-11) + +| Упражнение | Вес | Подходы | +| -------------------------- | ------------- | ----------- | +| Подтягивания | 0-0-40 | 9-5-10-7 | +| Тяга Т-грифа | 15-20-25 | 12-12-12-12 | +| Тяга горизонтального блока | 50-55 | 12-12-12-12 | +| Жим гантелей лежа | 17.5х2-22.5х2 | 12-12-9-8 | +| Пресс в тренажёре | 20-35-40 | 12-12-12 | + +# 30.01.2025 (solo-10) + +| Упражнение | Вес | Подходы | +| -------------------------- | ----------- | ----------- | +| Жим ногами | 100-140 | 12-12-12-12 | +| Сгибание ног лежа | 45-45-50 | 12-12-12-12 | +| Подьем на носки стоя | 20х2-22.5х2 | 12-12-12 | +| Сведение рук пек дек | 40-50-55 | 12-12-12-12 | +| Жим от плеч вверх (рычаги) | 30-35 | 12-10-9-9 | + +# 28.01.2025 (solo-9) + +| Упражнение | Вес | Подходы | +| ------------------------------- | ---------------- | ----------- | +| Подтягивания обратным хватом | | 10-8-6 | +| Жим гантелей сидя | 15х2-17.5х2 | 12-10-9-8 | +| Подъём гантелей на бицепс | 10х2-12.5х2-10х2 | 12-10-12-12 | +| Кроссовер: отжимание на трицепс | 35 | 12-12-11-10 | +| Брусья | 35 | 12-11-8 | + +# 24.01.2025 (c170-8) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | ----- | ----------- | +| Подтягивания | | 10-8-6 | +| Тяга гантели в наклоне одной рукой | 22-28 | 12-12-12-12 | +| Отжимания | 10 | 12-12-12 | +| Отжимания на брусьях | 0 | 5-7-5 | +| Сведение рук пек дек | 47 | 12-10-8 | + +# 22.01.2025 (solo-7) + +| Упражнение | Вес | Подходы | +| ---------------------------------------------- | -------------- | ----------- | +| Подтягивания | | 9-7-6 | +| Тяга гантели в наклоне одной рукой | 25-27.5 | 12-12-12 | +| Тяга горизонтального блока | 55-60-55 | 12-10-12-10 | +| Жим от груди в тренажёре сидя (рычаги) | 15х2-20х2-22.5 | 12-12-12 | +| Отведение руки в сторону (дефоли) в кроссовере | 10-11-10 | 12-10-12 | + +# 20.01.2025 (c169-6) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | --------- | -------- | +| Выпады вперед с гантелями на одну ногу | 12х2-20х2 | 8-6-6 | +| Сгибание ног сидя | 77-86 | 12-12-12 | +| Икроножные стоя | 34 | 11-10-12 | +| Жим от плеч вверх (рычаги) | 27-37 | 12-12-12 | +| Разведение рук в стороны (дельт-машина) | 47 | 12-12-12 | +| Разведение рук пек дек | 37 | 12-9 | + +# 17.01.2025 (с168-5) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | --------------- | ----------- | +| Жим от плеч сидя (рычаги) | 5х2-15х2-17.5x2 | 12-12-12-10 | +| Разведение рук пек дек | 27-37 | 12-12-10-9 | +| Разведение рук а стороны (Дельт машина) | 47 | 12-12-12-10 | +| Сгибание на бицепс с гантелями | 10х2-12х2 | 12-10-10 | +| Трицепс машина | 77-87 | 12-12-12 | + +# 16.01.2025 (solo-4) + +| Упражнение | Вес | Подходы | +| ----------------------- | ----------- | ----------- | +| Разгибание ног сидя | 75-85-90-95 | 12-12-12-12 | +| Гиперэкстензия | 10-15 | 12-12-12-12 | +| Сгибание ног лежа | 40 | 12-12-12 | +| Жим ногами | 100-120-140 | 12-12-10-10 | +| Подьем штанги на бицепс | 20 | 12-12-12 | + +# 15.01.2025 (c167-3) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | --------- | -------- | +| Подтягивания | 12-10-7 | 9-6-6 | +| Тяга гантелей к поясу лежа на скамье | 24х2-26х2 | 12-12-12 | +| Тяга горизонтального блока | 63.4-68 | 12-7-10 | +| Жим от груди в тренажёре сидя (рычаги) | 15х2-35х2 | 12-9-8-7 | + +# 07.01.2025 (solo-2) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | --------------------- | ----------- | +| Разгибание ног сидя | 77-86-91-86 | 12-12-12-12 | +| Сгибание ног лежа | 47 | 12-12-11-10 | +| Жим от груди (рычаги) | 15х2-25х2-27.5х2-30х2 | 12-12-12-8 | +| Отведение руки в кроссовере из за спины | 9-11-12 | 12-12-12 | +| Кроссовер - отжимание на трицепс | 33 | 12-12-12-12 | + +# 04.01.2025 (solo-1) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | --------- | -------------- | +| Подтягивания | | 9-7-5 | +| Тяга горизонтального блока | 55-59 | 12-12-12-10 | +| Тяга гантели в наклоне одной рукой | 30x2 | 10-10-10 | +| Жим гантелей лежа | 18х2-20х2 | 12-12-11 | +| Разведение рук в стороны (дельт машина) | 47 | 12-12-12 | +| Трицепс машина | 77 | 12-12-12 | + + +# 30.12.2024 (c166-115) + +| Упражнение | Вес | Подходы | +| ------------------------ | ------------- | ----------- | +| Подтягивания | | 11-8-6 | +| Тяга гантелей на скамье | 22х2-28х2 | 12-10-10-10 | +| Жим гантелей лежа | 16х2-28х2 | 12-10-6-7 | +| Сведение рук пек дек | 47 | 12-12-12 | +| Брусья | 37 | 11-10-10-10 | + +# 27.12.2024 (c165-114) + +| Упражнение | Вес | Подходы | +| ------------------------ | --------- | ----------- | +| Разгибание ног сидя | 65-82-91 | 12-12-12 | +| Жим ногами | 100-150 | 12-10-10-10 | +| Гиперэкстензия | 15 | 12-12-12 | +| Жим гантелей сидя | 12х2-20х2 | 12-10-10-10 | +| Разведение рук в стороны | 47 | 11-11-12 | + +# 25.12.2024 (c164-113) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | --------- | ----------- | +| Тяга вертикального блока | 45-54-59 | 12-12-10-10 | +| Тяга гантели в наклоне одной рукой | 30-32 | 10-10-10 | +| Тяга горизонтального блока | 50 | 12-12-12 | +| Жим гантелей лежа | 16х2-24х2 | 12-10-10-10 | +| Сведение рук пек дек | 47 | 12-12-12 | + +# 20.12.2024 (с163-112) + +| Упражнение | Вес | Подходы | +| ---------------------------------------------- | ----------- | -------- | +| Тяга вертикального блока | 41-59 | 12-12-12 | +| Тяга гантели в наклоне одной рукой | 28-32 | 12-8-8 | +| Жим гантелей лёжа | 14x14-26x26 | 12-8-8-8 | +| Баттерфляй | 57 | 12-12-12 | +| Сгибание рук с гантелями стоя (супинирование?) | 10х2 | 12-12-12 | +| Трицепс машина | 67 | 12-12-12 | + +# 18.12.2024 (c162-111) + +| Упражнение | Вес | Подходы | +| -------------------------------------------------------------- | --------- | ----------- | +| Разгибание ног сидя | 77-91 | 12-12-12-11 | +| Сгибание ног лежа | 47 | 12-12-10 | +| Жим гантелей сидя | 12х2-20х2 | 12-12-11-11 | +| Отведение руки в сторону (дефоли) в кроссовере | 13.5 | 12-12-12 | +| Отведение руки назад в кроссовере (аналог пек дек одной рукой) | 9 | 12-12-12 | + +# 16.12.2024 (c161-110) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ------- | ----------- | +| Подтягивания | | 10-7-6 | +| Тяга горизонтального блока | 59 | 12-12-12 | +| Гребная тяга с упором в грудь (одна рука) | 20-22.5 | 12-11-12 | +| Жим от груди сидя (рычаги) | 30-60 | 12-10-11-10 | +| Трицепс машина | 77 | 12-12 | + +# 13.12.2024 (c160-109) + +| Упражнение | Вес | Подходы | +| ---------------------- | ---------- | -------- | +| Разгибание ног сидя | 49-81-90 | 12-12-12 | +| Жим ногами | 75-125-150 | 12-12-10 | +| Гиперэкстензия | 10-15 | 12-12-12 | +| Мах руки в кроссовере | 13.9 | 12-12-12 | +| Дельт машина | 47 | 12-11-12 | +| Разведение рук пек дек | 37 | 9-9-8 | + +# 11.12.2024 (c159-108) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ------- | -------- | +| Подтягивания | | 10-7-6 | +| Тяга горизонтального блока | 49-58 | 10-12-12 | +| Тяга горизонтального блока одной рукой | 31.8-36 | 12-10-10 | +| Жим от груди сидя в тренажёре (рычаги) | 50-60 | 12-10-8 | +| Сведение рук пёк дек | 47 | 10-9-10 | +| Брусья | 37 | 10-10-10 | + +# 09.12.2024 (c158-107) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ----------- | ----------- | +| Сгибание ног сидя | 54-77-91-86 | 12-12-11-12 | +| Жим ногамиш | 50-125-140 | 12-12-12-12 | +| Сгибание ног лежа | 47 | 12-12-12 | +| Разведение рук в стороны (дельт-машина) | 37-47 | 12-12-12-12 | +| Жим гантелей сидя | 18х2 | 12-11-10 | + +# 06.12.2024 (c157-106) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | -------- | -------- | +| Тяга вертикального блока | 40-54 | 12-12-12 | +| Тяга гантели в наклоне одной рукой | 26-28 | 10-10-10 | +| Тяга горизонтального блока | 59 | 12-12-12 | +| Жим от груди сидя рычаги | 30-70-60 | 12-6-7-7 | +| Баттерфляй | 57 | 12-12-8 | +| Трицепс машина | 77 | 12-12-11 | + +# 04.12.2024 (c156-105) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | -------------- | ----------- | +| Жим ногами | 50-100-125-150 | 12-12-12-12 | +| Разгибание ног сидя | 77-87 | 12-12-12 | +| Сгибание ног сидя | 81 | 12-12-12 | +| Разведение рук в стороны (дельт-машина) | 37-47 | 12-12-12-12 | +| Жим от плеч вверх (тренажёр, рычаги) | 37 | 12-11-10 | + +# 02.12.2024 (c155-104) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | --------- | --------- | +| Подтягивания | | 10-7-6 | +| Тяга горизонтального блока | 59 | 12-12-12 | +| Тяга гантели в наклоне одной рукой | 26 | 10-10-10 | +| Жим гантелей лёжа | 16х2-24х2 | 12-10-8-5 | +| Баттерфляй | 57 | 12-12-12 | + +# 27.11.2024 (c154-103) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | -------- | ---------- | +| Разгибание ног сидя | 72-77-81 | 12-12-12 | +| Сгибание ног лежа | 37-47 | 12-12-10 | +| Икроножные сидя | 34 | 12-12-12 | +| Разведение рук в строоны (дельт-машина) | 37-47 | 12-12-12-9 | +| Жим гантелей сидя 85⁰ | 18х2 | 10-8-7 | +| Разведение рук назад пёк дек | 27-37 | 12-8 | + +# 22.11.2024 (c153-102) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | -------------------- | -------- | +| Подтягивания | 0-0-20 | 9-7-7 | +| Тяга горизонтально блока одной рукой | 32 | 12-12-12 | +| Тяга вертикального блока прямым хватом | 47-57 | 12-9-9 | +| Жим от плеч сидя (рычаги наверху) | 77-87-77 | 12-10-11 | +| Баттерфляй | 57 | 12-12-12 | +| Трицепс машина | 77 | 12-12 | + +# 22.11.2024 (c153-102) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | -------------------- | ------------ | +| Подтягивания | 0-0-20 | 9-7-7 | +| Тяга горизонтально блока одной рукой | 32 | 12-12-12 | +| Тяга вертикального блока прямым хватом | 47-57 | 12-9-9 | +| Жим от плеч сидя (рычаги наверху) | 77-87-77 | 12-10-11 | +| Баттерфляй | 57 | 12-12-12 | +| Трицепс машина | 77 | 12-12-12 | + +# 20.11.2024 (c152-101) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | -------------- | ----------- | +| Разгибание ног сидя | 58-72-81 | 12-12-10-10 | +| Сгибание ног сидя | 72-81 | 12-12-12 | +| Отведение плеча в сторону в кроссовере | 21-23 | 12-12-12 | +| Жим гантелей сидя | 18х2-18х2-16х2 | 9-10-12 | +| Разведение рук назад в пек дек | 37 | 9-8-9 | + +# 18.11.2024 (c151-100) + +| Упражнение | Вес | Подходы | +| --------------------------------- | --------- | --------- | +| Подтягивания | | 10 | +| Подтягивания обратным хватом | | 7-6 | +| Вертикальная тяга одной рукой 45⁰ | 31-41 | 12-12-12 | +| Тяга горизонтального блока | 63-58-54 | 7-9-12 | +| Жим гантелей лёжа на скамейке 45⁰ | 16х2-22х2 | 12-10-8-8 | +| Баттерфляй | 47 | 12-12-12 | +| Брусья | 37-0-37 | 10-5-8 | + +# 15.11.2024 (c150-99) + +| Упражнение | Вес | Подходы | +| ---------------------------------------- | ----------- | --------------- | +| Выпады вперед на одну ногу | 0-12х2-16х2 | 8-8-7-7 | +| Сгибание ног сидя | 77-81 | 12-12-12 | +| Разведение рук в стророны (дельт-машина) | 37-47 | 12-12-12-9 | +| Жим гантелей сидя 80⁰ | 18х2 | 10-9-8 | +| Разведение рук пек дек | 37-27 | 9-12-12 | +| Подъём ног в висе | | 10-10-8 | + +# 13.11.2024 (c149-98) + +| Упражнение | Вес | Подходы | +| -------------------------- | --------- | -------- | +| Гравитрон (медленно вниз) | 47-37 | 12-9-7 | +| Тяга горизонтального блока | 58 | 12-12-12 | +| Тяга гантели в наклоне | 26х2-28х2 | 12-10-10 | +| Жим гантелей на скамье 65⁰ | 14х2-22х2 | 12-9-8-8 | +| Баттерфляй | 47 | 12-12-12 | + +# 11.11.2024 (c148-97) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ---------- | ----------- | +| Разгибание ног сидя | 49-72.5-82 | 12-12-12-12 | +| Румынская тяга | 22х2 | 12-12-12 | +| Икроножные сидя за | 34 | 12-12-12 | +| Дельт машина (разведение рук в стороны) | 47 | 12-12-12 | +| Жим гантелей сидя 80⁰ | 20х2-18х2 | 7-9-10 | + +# 08.11.2024 (solo-96) + +| Упражнение | Вес | Подходы | +| -------------------------- | --------- | -------- | +| Подтягивания | | 10-7-5 | +| Тяга гантели в наклоне | 24-26 | 12-12-12 | +| Жим гантелей лежа | 20х2-22х2 | 12-12-9 | +| Тяга горизонтального блока | 47-47-57 | 12-12-12 | +| Тяга вертикального блока | 47 | 12-12-12 | +| Жим от плеч вверх рычаги | 37 | 12-11-8 | + +# 06.11.2024 (c147-95) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------------- | ----------- | +| Жим ногами | 50-100-100-125 | 12-12-12-12 | +| Сгибание ног лёжа | 47 | 12-12-10 | +| Жим гантелей сидя на скамье | 12х2-20х2 | 12-9-9-8 | +| Разведение рук в стороны сидя | 37 | 12-12-12 | +| Разведение рук пек дек | 37-27 | 8-15-12 | + +# 04.11.2024 (c146-94) + +| Упражнение | Вес | Подходы | +| -------------------------- | -------- | ----------- | +| Подтягивания | | 9-7-6 | +| Тяга горизонтального блока | 45-54 | 12-12-12 | +| Тяга вертикального блока | 49 | 12-12-12 | +| Жим от груди рычаги | 57-77-87 | 12-12-12-12 | +| Сведение пек дек | 47 | 10-8-8 | +| Брусья | 47 | 12-12-12 | + +# 01.11.2024 (c145-93) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ----------- | --------- | +| Выпады с гантелями на одну ногу вперед | 12х12-16х16 | 8-8-8 | +| Гиперэкстензия | 10 | 12-12-12 | +| Жим гантелей сидя | 12х2-20х2 | 12-11-9-8 | +| Разведение рук в стороны (дельт-машина) | 37-47-37 | 12-8-12 | +| Разведение рук пек дек | 27 | 12-12-12 | + +# 30.10.2024 (c144-92) + +| Упражнение | Вес | Подходы | +| -------------------------------------- | ----- | -------- | +| Гравитрон | 47-37 | 12-11-9 | +| Гребная тяга с упором в грудь | 47 | 12-12-12 | +| Тяга горизонтального блока одной рукой | 27 | 12-12-12 | +| Отжимания | 15 | 9-7-7 | +| Баттерфляй | 57-47 | 10-12-12 | +| Брусья | 37 | 12-11 | + +# 28.10.2024 (c143-91) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | ---------- | ----------- | +| Разгибание ног сидя | 49-77-90.5 | 12-12-10-10 | +| Сгибание ног сидя | 58-72-77 | 12-12-12-12 | +| Икроножные сидя | 27-34 | 12-12-12-12 | +| Разведение рук пек дек | 27 | 12-12-12 | +| Разведение рук в стороны (дельт-машина) | 27 | 12-12-12 | + +# 26.10.2024 (solo-90) + +| Упражнение | Вес | Подходы | +| ----------------------------------------- | ----------- | ---------- | +| Подтягивания | | 9-7-6 | +| Тяга горизонтального блока | 57 | 12-12-12 | +| Тяга гантели в наклоне | 26 | 12-12-12 | +| Жим от груди сидя в тренажёре (рычаги) | 40-60-60-40 | 12-11-9-10 | +| Разведение рук в стороны с гантелями стоя | 9х2 | 12-12-12 | +| Трицепс машина | 77-87 | 12-12-9 | + +# 23.10.2024 (solo-89) + +| Упражнение | Вес | Подходы | +| ------------------------------ | -------- | ----------- | +| Разгибание ног сидя | 72-78-81 | 12-12-12-12 | +| Икроножные сидя | 27-34 | 12-12-12-12 | +| Сгибание штанги стоя на бицепс | 20 | 12-12-12-12 | +| Сгибание ног лёжа | 37 | 12-12-11-10 | +| Гиперэкстензия | 10 | 12-12-12-12 | + +# 21.10.2024 (c142-88) + +| Упражнение | Вес | Подходы | +| ---------------------------------------- | ----- | -------- | +| Подтягивания | | 10-6-6 | +| Тяга гантели лежа в наклоне на скамье | 22х2 | 12-12-12 | +| Тяга вертикального блока обратным хватом | 54.4 | 12-12-12 | +| Жим от груди сидя (рычаги) | 67-87 | 12-12-12 | +| Баттерфляй | 57 | 12-12-12 | +| Трицепс машина | 77 | 12-12-12 | + +# 18.10.2024 (c141-87) + +| Упражнение | Вес | Подходы | +| ------------------------------------- | --------- | ----------- | +| Выпады вперед по очереди каждой ногой | 0-20 | 12-16-16-16 | +| Гиперэкстензия | 10 | 12-12-12 | +| Жим гантелей сидя 90⁰ | 12х2-18х2 | 12-12-12-10 | +| Разведение рук в стороны в тренажаре | 37 | 12-12-12 | +| Разведение рук пёк дек | 27 | 12-12-12 | + +# 16.10.2024 (c140-86) + +| Упражнение | Вес | Подходы | +| ------------------------------------ | ---------------- | ----------- | +| Подтягивания обратным хватом | | 11-8-6 | +| Тяга горизонтального блока | 57 | 12-11-12 | +| Тяга вертикального блока | 54-59-54 | 12-8-12 | +| Жим от груди рычаги | 15х2-25х2-27.5х2 | 12-12-12-11 | +| Сведение рук пек дек | 37 | 12-12-12 | +| Разгибание рук сидя (трицепс машина) | 77-87 | 12-10-9 | + +# 14.10.2024 (c139-85) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------------- | ----------- | +| Жим ногами | 75-150 | 12-12-12-12 | +| Сгибание ног лежа | 47-47-37 | 12-10-12 | +| Икроножные сидя | 34 | 12-12-12 | +| Разведение рук в стороны | 37 | 12-12-12 | +| Жим гантелей сидя | 18х2-18х2-16х2 | 12-10-10 | +| Разведение рук в наклоне сидя | 6х2 | 12-12-12-12 | + +# 11.10.2024 (c138-84) + +| Упражнение | Вес | Подходы | +| ---------------------------- | -------------- | --------- | +| Подтягивания | | 10-6-6 | +| Гребная тяга с упорм в грудь | 47-51 | 12-12-12 | +| Тяга гантели в наклоне | 26-28 | 12-12-12 | +| Жим гантелей лёжа | 18х2-24х2-22х2 | 12-10-7-8 | +| Сведение рук в пек дек | 37 | 12-12-12 | +| Брусья узким хватом | 37 | 12-9-9 | + +# 09.10.2024 (c137-83) + +| Упражнение | Вес | Подходы | +| ----------------------------- | -------- | ----------- | +| Разгибание ног сидя | 62-82-90 | 12-12-11-10 | +| Румынская тяга | 40 | 12-12-12 | +| Икроножные сидя | 27 | 16-15-14 | +| Разведение рук а стороны сидя | 47 | 12-12-12 | +| Жим гантелей сидя | 18х2 | 11-12-12 | +| Разведение рук в наклоне | 7х2 | 12-12-12 | + +# 07.10.2024 (c136-82) + +| Упражнение | Вес | Подходы | +| ------------------------------ | -------- | ---------- | +| Подтягивания | | 10-7-6 | +| Гребная тяга с упорм в грудь | 47 | 12-12-12 | +| Тяга гантели в наклоне 1 рукой | 26 | 12-12-12 | +| Жим гантелей лежа на скамье | 40-48 | 12-10-8-7 | +| Баттерфляй | 57-67-57 | 12-7-10-10 | + +# 04.10.2024 (c135-81) + +| Упражнение | Вес | Подходы | +| ------------------------ | ---------- | ----------- | +| Разгибание ног сидя | 59-77-81.5 | 12-12-12-12 | +| Румынская тяга | 40 | 12-12-12 | +| Икроножные сидя | 27.2 | 12-12-12 | +| Жим гантелей сидя | 32-36 | 12-12-12 | +| Разведение рук в стороны | 47 | 12-12-10 | + +# 02.10.2024 (c134-80) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | ----- | -------- | +| Подтягивания | | 10-7-5 | +| Тяга гантели в наклоне одной рукой | 24-26 | 12-12-12 | +| Тяга верхнего блока | 54-49 | 12-9-12 | +| Жим от груди рычаги | 77-87 | 12-12-11 | + +# 25.09.2024 (c133-79) + +| Упражнение | Вес | Подходы | +| ------------------------------------- | -------- | ----------- | +| Разгибание ног сидя | 67-87-97 | 12-12-12-12 | +| Гиперэкстензия | 10 | 12-12-12 | +| Жим гантелей сидя 80⁰ | 36 | 12-12-10 | +| Отведение руки в пек дек (по очереди) | 11 | 12-12-12 | + +# 23.09.2024 (c132-78) + +| Упражнение | Вес | Подходы | +| --------------------------------------- | -------- | ---------- | +| Подтянивания | | 10-7-5 | +| Тяга горизонтального блока | 47-57 | 12-12-12 | +| Тяга гантели в наклоне к поясу к стойки | 26 | 12-12-12 | +| Жим от груди рычаги | 40-60 | 12-12-9-11 | +| Сведение рук пек дек | 37-47-37 | 12-9-12 | + +# 11.09.2024 (c131-77) + +| Упражнение | Вес | Подходы | +| ------------------------------------- | ----------- | --------- | +| Подтягивания | | 11-8-7 | +| Гребная тяга с упором в грудь | 47 | 12-12-12 | +| Тяга верхнего блока за | 58.9 | 10-10-10 | +| Жим от плеч сидя в тренажере (рычаги) | 40-70-70-60 | 12-11-9-9 | +| Сведение рук в пек декх | 37-47 | 12-11-10 | +| Трицепс машина | 77 | 12-12-12 | + +# 09.09.2024 (c130-76) + +| Упражнение | Вес | Подходы | +| ---------------------------------- | ----- | ----------- | +| Болгарские приседания на одну ногу | 16-25 | 10-10-10 | +| Гиперэкстензия | 15 | 12-12-12 | +| Жим гантелей сидя 8⁰ | 16-36 | 10-12-12-12 | +| Разведение рук в стороны стоя | 20 | 12-12-12-12 | +| Разведение рук в наклоне | 8х8 | 12-12-12 | + +# 06.09.2024 (c129-75) + +| Упражнение | Вес | Подходы | +| ---------------------------------------------- | ----------- | -------- | +| Подтягивания | 0 | 11-8-7-4 | +| Тяга гантелей к поясу лёжа на животе на скамье | 40-52 | 12-12-12 | +| Тяга горизонтального блока 1 рукой поочерёдно | 32 | 12-12-12 | +| Жим гантелей лежа на скамье | 36-52-52-44 | 12-8-6-8 | +| Баттерфляй | 57-47 | 12-9-12 | + +# 04.09.2024 (c128-74) + +| Упражнение | Вес | Подходы | +| -------------------------------------------------- | -------- | ----------- | +| Разгибание ног сидя | 77-77-95 | 12-12-10-10 | +| Приседания | 30 | 12-12-12 | +| Сгибание ног лежа | 47 | 12-12-10 | +| Отведение руки в пек дек (по очереди каждой рукой) | 13.6 | 12-12-12 | +| Жим от плеч вверх в тренажёре | 37 | 12-12-10 | +| Разведение рук в наклоне | 8х8 | 12-12-12 | + +# 02.09.2024 (c127-73) + +| Упражнение | Вес | Подходы | +| -------------------------- | ----------- | --------- | +| Подтягивания | 0 | 9-6-6 | +| Тяга гантелей в наклоне | 30 | 12-12-10 | +| Тяга горизонтального блока | 45.3 | 12-10-12 | +| Жим от плеч вверх рычаги | 40-70-70-60 | 12-10-9-9 | +| Баттерфляй | 57 | 12-12-12 | +| Брусья узким хватом | 37 | 9-8-10 | + +# 30.08.2024 (c126-72) + +| Упражнение | Вес | Подходы | +| ------------------------------------------------ | -------- | ----------- | +| Разгибание ног сидя | 59-77-86 | 12-12-12-12 | +| Жим ногами | 150 | 12-12-12 | +| Сгибание ног лежа | 47 | 12-12-12 | +| Разведение рук в стороны сидя спиной к тренажеру | 47 | 12-12-12 | + +# 28.08.2024 (c125-71) + +| Упражнение | Вес | Подходы | +| ------------------------------------------- | -------------- | --------- | +| Подтягивания | 0 | 9-7-6 | +| Тяга горизонтального блока | 57 | 12-12-12 | +| Тяга гантели в наклоне одной рукой (каждой) | 24-26 | 12-12-12 | +| Жим гантелей лежа на скамье 30⁰ | 18х2-24х2-22х2 | 12-9-10-8 | +| Сведение рук пек дек | 47 | 12-12-10 | + +# 26.08.2024 (с124-70) + +| Упражнение | Вес | Подходы | +| -------------------------------------------------- | ----------- | ----------- | +| Сгибание ног лежа | 37-47 | 12-12-12 | +| Жим ногами | 100-150-175 | 12-10-10-10 | +| Отведение руки в кроссовере по очереди каждую руку | 13.6 | 12-12-12-12 | +| Жим от плеч вверх в тренажёре | 37 | 12-12-10 | +| Разведение рук в стороны в наклоне с гантелями | 8х2 | 12-12 | + +# 21.08.2024 (с123-69) + +| Упражнение | Вес | Подходы | +| ------------------------------------------ | -------- | ----------- | +| Подтягивания | 0-37-37 | 7-10-7 | +| Тяга гантелей лежа на животе на скамье 80° | 36-48 | 12-12-12-12 | +| Тяга вертикального блока | 59 | 10-9-10 | +| Жим от груди сидя в тренажере (рычаги) | 40-60-60 | 12-12-10 | +| Баттерфляй | 57 | 12-12-12 | + +""" + +workout_data = parse_workout(workout_text) +print("Упражнения:", workout_data) + +# Для полного парсинга всего файла .md потребуется обработка всех секций diff --git a/main.py b/main.py index 5eea4d9..de00af2 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,4 @@ -from pprint import pprint -from apple.notes_parser import parse_training_data as aptd -from obsidian.notes_parser import parse_training_data as optd -from obsidian.py_models import Training +from parsers.text_data_parser import parse_old_data -o_dates = [train.date for train in optd()] -print(len(o_dates)) - -a_dates = [train.date for train in aptd()] -print(len(a_dates)) - -def print_train(training: Training): - print(f"Training date: {training.date}") - for ex in training.exercises: - print(f" {ex.name}") - -for tr in aptd(): - print_train(tr) +text_trainings = parse_old_data() +print(len(text_trainings)) diff --git a/main_backup.py b/main_backup.py index 17953fa..d7738d8 100644 --- a/main_backup.py +++ b/main_backup.py @@ -18,15 +18,15 @@ from obsidian.py_models import Training # LOADING DATA -# load_dotenv() -# -# DB_USERNAME = os.getenv("POSTGRES_USER") -# DB_PASS = os.getenv("POSTGRES_PASSWORD") -# -# engine = create_engine( -# f"postgresql+psycopg2://{DB_USERNAME}:{DB_PASS}@localhost:5433/fitness_database", -# echo=True, -# ) +load_dotenv() + +DB_USERNAME = os.getenv("POSTGRES_USER") +DB_PASS = os.getenv("POSTGRES_PASSWORD") + +engine = create_engine( + f"postgresql+psycopg2://{DB_USERNAME}:{DB_PASS}@localhost:5433/fitness_database", + echo=True, +) # # # Creating async engine for Database connection # async_engine = create_async_engine( @@ -57,8 +57,8 @@ from obsidian.py_models import Training # TODO: Check how migrations are done # NOTE: Drop all Tables from database -metadata_obj.drop_all(engine) -metadata_obj.create_all(engine) +# metadata_obj.drop_all(engine) +# metadata_obj.create_all(engine) # NOTE: Table reflection - generating table object from existing tables (only tables, that are stored in metadata) # some_table = Table("some_table", metadata_obj, autoload_with=engine) @@ -70,13 +70,13 @@ metadata_obj.create_all(engine) trainings: List[Training] = parse_training_data() for train in trainings: - if not train: + if not train or not train.exercises: continue else: print(train) new_training_pk: int = TrainingRepository(engine).create_training(train.date) for exr in train.exercises: - approach_statements = [] + approach_statements: List[str] = [] new_exercise_pk: int = ExerciseRepository(engine).create_exercise( training_pk=new_training_pk, exercise_name=exr.name ) diff --git a/obsidian/notes_parser.py b/obsidian/notes_parser.py index 43f046a..07a3ed0 100644 --- a/obsidian/notes_parser.py +++ b/obsidian/notes_parser.py @@ -31,25 +31,28 @@ def read_example_file(example_file_name: str): def serialize_exercise(reps: str, weight: str, name: str) -> Exercise: # Split reps into array of int's - reps: List[int] = [int(rep) for rep in reps.split("-")] + reps_list: List[int] = [int(rep) for rep in reps.split("-")] weight_splitted: bool = False + weight_list: List[float] = [] if weight: - weight: List[str] = [weight for weight in weight.split("-")] + weight_str_list: List[str] = [weight for weight in weight.split("-")] # Check if weight is splitted - if any(split_anchor in weight[0] for split_anchor in ["x", "х"]): + if any(split_anchor in weight_str_list[0] for split_anchor in ["x", "х"]): weight_splitted = True - splitter = "x" if "x" in weight[0] else "х" - weight: List[float] = [xweight.split(splitter)[0] for xweight in weight] + splitter = "x" if "x" in weight_str_list[0] else "х" + weight_list = [float(xweight.split(splitter)[0]) for xweight in weight_str_list] + else: + weight_list = [float(w) for w in weight_str_list] approaches = [] if not weight: - for rep_index in range(0, len(reps)): - approach = Approach(weight=0, reps=reps[rep_index]) + for rep_index in range(0, len(reps_list)): + approach = Approach(weight=0.0, reps=reps_list[rep_index]) approaches.append(approach) else: weight_pointer = 0 - for rep_index in range(0, len(reps)): - approach = Approach(weight=weight[weight_pointer], reps=reps[rep_index]) - if rep_index < len(weight) - 1: + for rep_index in range(0, len(reps_list)): + approach = Approach(weight=weight_list[weight_pointer], reps=reps_list[rep_index]) + if rep_index < len(weight_list) - 1: weight_pointer += 1 approaches.append(approach) exercise = Exercise( @@ -71,6 +74,7 @@ def parse_training_exercises(exercise_line: str) -> Exercise: return serialize_exercise( name=stripped[0], weight=stripped[1], reps=stripped[2] ) + raise ValueError("No valid exercise data found") def parse_training_header( @@ -118,10 +122,10 @@ def parse_training_data(): def remap_unique_exercises(obsidian_trainings: List[Training]) -> List[Training]: for obsidian_training in obsidian_trainings: - if not obsidian_training: + if not obsidian_training or not obsidian_training.exercises: continue for obsidian_exercise in obsidian_training.exercises: - obsidian_exercise.name = obsidian_unique_exercies_mapping.get( - obsidian_exercise.name - ) + mapped_name = obsidian_unique_exercies_mapping.get(obsidian_exercise.name) + if mapped_name is not None: + obsidian_exercise.name = mapped_name return obsidian_trainings diff --git a/api/__init__.py b/parsers/__init__.py similarity index 100% rename from api/__init__.py rename to parsers/__init__.py diff --git a/parsers/text_data_parser.py b/parsers/text_data_parser.py new file mode 100644 index 0000000..4a4dd35 --- /dev/null +++ b/parsers/text_data_parser.py @@ -0,0 +1,15 @@ +from typing import List +from apple.notes_parser import parse_training_data as aptd +from obsidian.notes_parser import parse_training_data as optd +from obsidian.py_models import Training + +def parse_old_data() -> List[Training]: + """Method for parsing all old data from apple and obsidian notes + + Returns: + List of trainings + """ + o_dates = [train for train in optd()] + a_dates = [train for train in aptd()] + return o_dates + a_dates + diff --git a/playground/contexts.py b/playground/contexts.py index f0b52c1..28c192d 100644 --- a/playground/contexts.py +++ b/playground/contexts.py @@ -38,7 +38,7 @@ class AsyncContextPlayground: def __init__(self) -> None: self.keka = "Hi, i am async Keka" - async def __aenter__(self) -> None: + async def __aenter__(self): print("\tEntered async context") return self diff --git a/pyproject.toml b/pyproject.toml index 18e9172..0ae31d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,3 +14,10 @@ dependencies = [ "grpcio>=1.70.0", "grpcio-tools>=1.70.0", ] + +[dependency-groups] +dev = [ + "mypy>=1.17.1", + "types-grpcio>=1.0.0.20250703", + "types-protobuf>=6.30.2.20250822", +] diff --git a/uv.lock b/uv.lock index 86d7d14..52168c4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.13" [[package]] @@ -51,6 +51,13 @@ dependencies = [ { name = "sqlalchemy" }, ] +[package.dev-dependencies] +dev = [ + { name = "mypy" }, + { name = "types-grpcio" }, + { name = "types-protobuf" }, +] + [package.metadata] requires-dist = [ { name = "asyncpg", specifier = ">=0.30.0" }, @@ -63,6 +70,13 @@ requires-dist = [ { name = "sqlalchemy", specifier = ">=2.0.37" }, ] +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = ">=1.17.1" }, + { name = "types-grpcio", specifier = ">=1.0.0.20250703" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250822" }, +] + [[package]] name = "greenlet" version = "3.2.4" @@ -137,6 +151,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, ] +[[package]] +name = "mypy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/82/aec2fc9b9b149f372850291827537a508d6c4d3664b1750a324b91f71355/mypy-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7", size = 11075338, upload-time = "2025-07-31T07:53:38.873Z" }, + { url = "https://files.pythonhosted.org/packages/07/ac/ee93fbde9d2242657128af8c86f5d917cd2887584cf948a8e3663d0cd737/mypy-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81", size = 10113066, upload-time = "2025-07-31T07:54:14.707Z" }, + { url = "https://files.pythonhosted.org/packages/5a/68/946a1e0be93f17f7caa56c45844ec691ca153ee8b62f21eddda336a2d203/mypy-1.17.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6", size = 11875473, upload-time = "2025-07-31T07:53:14.504Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, + { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, + { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, + { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, + { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, + { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, + { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -146,6 +195,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -295,6 +353,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b8/d9/13bdde6521f322861fab67473cec4b1cc8999f3871953531cf61945fad92/sqlalchemy-2.0.43-py3-none-any.whl", hash = "sha256:1681c21dd2ccee222c2fe0bef671d1aef7c504087c9c4e800371cfcc8ac966fc", size = 1924759, upload-time = "2025-08-11T15:39:53.024Z" }, ] +[[package]] +name = "types-grpcio" +version = "1.0.0.20250703" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/17/c80b7231e337993b808aef32bcc556aad60810ca51eeb7acd1204eefe518/types_grpcio-1.0.0.20250703.tar.gz", hash = "sha256:baf100184e5353cb60f045fb4fd47f37a360bedf0f19581535e4c3a3a1f7912b", size = 14552, upload-time = "2025-07-03T03:14:01.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/e2/9c682ba59a7f9cf477bc7954c25ce1c20f881693651f354d15df577996c0/types_grpcio-1.0.0.20250703-py3-none-any.whl", hash = "sha256:78d1bfc33b58a56697ef99e666e34be4c6887631341c75fdd28d58587aef5d9f", size = 15274, upload-time = "2025-07-03T03:14:00.907Z" }, +] + +[[package]] +name = "types-protobuf" +version = "6.30.2.20250822" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/61/68/0c7144be5c6dc16538e79458839fc914ea494481c7e64566de4ecc0c3682/types_protobuf-6.30.2.20250822.tar.gz", hash = "sha256:faacbbe87bd8cba4472361c0bd86f49296bd36f7761e25d8ada4f64767c1bde9", size = 62379, upload-time = "2025-08-22T03:01:56.572Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/64/b926a6355993f712d7828772e42b9ae942f2d306d25072329805c374e729/types_protobuf-6.30.2.20250822-py3-none-any.whl", hash = "sha256:5584c39f7e36104b5f8bdfd31815fa1d5b7b3455a79ddddc097b62320f4b1841", size = 76523, upload-time = "2025-08-22T03:01:55.157Z" }, +] + [[package]] name = "typing-extensions" version = "4.14.1"