#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Diese Datei soll NUR importiert (mit import Aufgabenkontrolle13 oder from 
# Aufgabenkontrolle13 import ...), aber WEDER bearbeitet NOCH kopiert werden!

import numpy as np


####
def QTbTest(testfunktion):
    m, n = 20, 15
    print(f'Ihre Funktion wird jetzt mit einer ({m}x{m})- '\
          +f'und einer ({m}x{n})-Matrix getestet:');
    t = 0
    for mm, nn in zip([m, m], [m, n]):   
        Vtest = np.tril(np.random.rand(mm, nn))
        Vtest = Vtest/np.linalg.norm(Vtest, axis=0)
        btest = np.random.rand(mm,1)
        Qb1 = testfunktion(Vtest, btest)
        Qb2 = _Qblang(Vtest, btest)
        if np.allclose(Qb1, Qb2):
            t += 1
    print('{0} von {1} Tests erfolgreich'.format(t, 2));
    
def _Qblang(V, b):
    m, n = V.shape
    QT = np.eye(m)
    for k in range(n):
        v = V[k:, [k]]
        Qk = np.eye(m)
        Qk[k:, k:] = np.eye(m-k) - 2*(v @ v.T)
        QT = Qk @ QT
    return QT@b

