2d transformations are regularly used in linear algebra i have added the codes for reflection projection scaling and rotation 2d matrices scaling5 5 0 0 0 0 0 5 0 rotation45 0 5253219888177297 0 8509035245341184 0 8509035245341184 0 5253219888177297 projection45 0 27596319193541496 0 446998331800279 0 446998331800279 0 7240368080645851 reflection45 0 05064397763545947 0 893996663600558 0 893996663600558 0 7018070490682369 scaling5 5 0 0 0 0 0 5 0 rotation45 doctest normalizewhitespace 0 5253219888177297 0 8509035245341184 0 8509035245341184 0 5253219888177297 projection45 doctest normalizewhitespace 0 27596319193541496 0 446998331800279 0 446998331800279 0 7240368080645851 reflection45 doctest normalizewhitespace 0 05064397763545947 0 893996663600558 0 893996663600558 0 7018070490682369 scaling 5 5 0 0 0 0 0 5 0 rotation 45 doctest normalize_whitespace 0 5253219888177297 0 8509035245341184 0 8509035245341184 0 5253219888177297 projection 45 doctest normalize_whitespace 0 27596319193541496 0 446998331800279 0 446998331800279 0 7240368080645851 reflection 45 doctest normalize_whitespace 0 05064397763545947 0 893996663600558 0 893996663600558 0 7018070490682369
from math import cos, sin


def scaling(scaling_factor: float) -> list[list[float]]:
    
    scaling_factor = float(scaling_factor)
    return [[scaling_factor * int(x == y) for x in range(2)] for y in range(2)]


def rotation(angle: float) -> list[list[float]]:
    
    c, s = cos(angle), sin(angle)
    return [[c, -s], [s, c]]


def projection(angle: float) -> list[list[float]]:
    
    c, s = cos(angle), sin(angle)
    cs = c * s
    return [[c * c, cs], [cs, s * s]]


def reflection(angle: float) -> list[list[float]]:
    
    c, s = cos(angle), sin(angle)
    cs = c * s
    return [[2 * c - 1, 2 * cs], [2 * cs, 2 * s - 1]]


print(f"    {scaling(5) = }")
print(f"  {rotation(45) = }")
print(f"{projection(45) = }")
print(f"{reflection(45) = }")