# Учебная редакция: назначение, единицы и этапы алгоритма пояснены по-русски.
# Исходная программа остаётся самостоятельным свидетельством прежней проверки.
# Основа — II01-2.py. Углы механические, в градусах.
def angles(samples=96, pole_pairs=4):
    """Вернуть механические углы одного электрического периода в градусах.
    
    samples и pole_pairs передают как положительные объекты типа int.
    Последняя точка периода не повторяет начальную; геометрическая симметрия
    конкретного ротора должна быть проверена отдельно."""
    if type(samples) is not int or type(pole_pairs) is not int or samples <= 0 or pole_pairs <= 0:
        raise ValueError("Positive integer samples and pole pairs required")
    # Электрический период 360° соответствует механическому периоду 360°/p.
    return [360.0 * k / (pole_pairs * samples) for k in range(samples)]


def run_checks():
    """Проверить число, уникальность и шаг углов при четырёх парах полюсов."""
    values = angles()
    assert len(values) == len(set(values)) == 96
    assert values[0] == 0 and abs(values[-1] - 89.0625) < 1e-12
    assert 90 not in values and abs(values[1] - .9375) < 1e-12
    return {"count": 96, "period_mechanical_deg": 90, "step_deg": .9375, "last_deg": values[-1], "scope": "Electrical period; actual geometry symmetry is a separate check"}
