Files
NeuralNetwork/src/run.py
2025-11-17 12:44:50 +04:00

182 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from tensor.tensor import *
def test_matrix_operations():
print("=" * 50)
print("ТЕСТИРОВАНИЕ БИБЛИОТЕКИ MATRIX")
print("=" * 50)
# Тест создания матриц
print("\n1. СОЗДАНИЕ МАТРИЦ:")
print("-" * 30)
# Создание матрицы с заполнением одним значением
m1 = Matrix([2, 3], 1.0)
print(f"Matrix([2, 3], 1.0) = {m1}")
# Создание матрицы с разными значениями
m2 = Matrix([2, 3], 2.0, 3.0)
print(f"Matrix([2, 3], 2.0, 3.0) = {m2}")
# Создание матрицы для умножения
m3 = Matrix([3, 2], 2.0)
print(f"Matrix([3, 2], 2.0) = {m3}")
# Тест получения свойств
print("\n2. СВОЙСТВА МАТРИЦ:")
print("-" * 30)
print(f"m1.get_shape() = {m1.get_shape()}")
print(f"m1.get_axes() = {m1.get_axes()}")
print(f"m1.get_size() = {m1.get_size()}")
# Тест доступа к элементам
print("\n3. ДОСТУП К ЭЛЕМЕНТАМ:")
print("-" * 30)
print(f"m1[0] = {m1[0]}")
print(f"m1[0, 1] = {m1[0, 1]}")
# Установка значений
m1[0, 1] = 5.0
print(f"После m1[0, 1] = 5.0: {m1}")
# Тест арифметических операций
print("\n4. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ:")
print("-" * 30)
# Сложение
m_add = m1 + m2
print(f"m1 + m2 = {m_add}")
# Вычитание
m_sub = m1 - m2
print(f"m1 - m2 = {m_sub}")
# Умножение на скаляр
m_mul_scalar = m1 * 2.0
print(f"m1 * 2.0 = {m_mul_scalar}")
# Поэлементное умножение
m_mul_element = m1 * m2
print(f"m1 * m2 (поэлементно) = {m_mul_element}")
# Деление на скаляр
m_div = m1 / 2.0
print(f"m1 / 2.0 = {m_div}")
# Унарные операторы
m_neg = -m1
print(f"-m1 = {m_neg}")
m_pos = +m1
print(f"+m1 = {m_pos}")
# Тест матричного умножения
print("\n5. МАТРИЧНОЕ УМНОЖЕНИЕ:")
print("-" * 30)
try:
m_matmul = m1 @ m3
print(f"m1 @ m3 = {m_matmul}")
except Exception as e:
print(f"Ошибка при матричном умножении: {e}")
# Тест транспонирования
print("\n6. ТРАНСПОНИРОВАНИЕ:")
print("-" * 30)
m_transposed = m1.t()
print(f"m1.t() = {m_transposed}")
try:
m_transpose_method = m1.transpose(0, 1)
print(f"m1.transpose(0, 1) = {m_transpose_method}")
except Exception as e:
print(f"Ошибка при transpose(0, 1): {e}")
try:
m_transpose_list = m1.transpose([0, 1])
print(f"m1.transpose([0, 1]) = {m_transpose_list}")
except Exception as e:
print(f"Ошибка при transpose([0, 1]): {e}")
# Тест операций на месте
print("\n7. ОПЕРАЦИИ НА МЕСТЕ:")
print("-" * 30)
m_test = Matrix([2, 2], 1.0)
print(f"Исходная матрица: {m_test}")
m_test += 2.0
print(f"После m_test += 2.0: {m_test}")
m_test -= 1.0
print(f"После m_test -= 1.0: {m_test}")
m_test *= 3.0
print(f"После m_test *= 3.0: {m_test}")
m_test /= 2.0
print(f"После m_test /= 2.0: {m_test}")
# Тест с вашими матрицами из примера
print("\n8. ТЕСТ С ВАШИМИ МАТРИЦАМИ:")
print("-" * 30)
a = Matrix([2, 3], 2)
b = Matrix([3, 2], 1)
print(f"a = {a}")
print(f"b = {b}")
try:
result = a @ b
print(f"a @ b = {result}")
except Exception as e:
print(f"Ошибка при a @ b: {e}")
# Тест обратных операций
print("\n9. ОБРАТНЫЕ ОПЕРАЦИИ:")
print("-" * 30)
m_base = Matrix([2, 2], 3.0)
print(f"Исходная матрица: {m_base}")
# Правое сложение
m_radd = 2.0 + m_base
print(f"2.0 + m_base = {m_radd}")
# Правое умножение
m_rmul = 2.0 * m_base
print(f"2.0 * m_base = {m_rmul}")
# Правое вычитание
m_rsub = 10.0 - m_base
print(f"10.0 - m_base = {m_rsub}")
print("\n" + "=" * 50)
print("ТЕСТИРОВАНИЕ ЗАВЕРШЕНО")
print("=" * 50)
def test_edge_cases():
print("\n\n10. ТЕСТ ГРАНИЧНЫХ СЛУЧАЕВ:")
print("=" * 50)
try:
# Попытка создания с разными параметрами
m_empty = Matrix([0, 0])
print(f"Matrix([0, 0]) = {m_empty}")
except Exception as e:
print(f"Ошибка при создании Matrix([0, 0]): {e}")
try:
# Попытка доступа к несуществующему элементу
m_test = Matrix([2, 2], 1.0)
print(f"Попытка доступа к m_test[5, 5]: ", end="")
value = m_test[5, 5]
print(value)
except Exception as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
test_matrix_operations()
test_edge_cases()