# Univerzitet u Novom Sadu, Fakultet tehničkih nauka, Novi Sad, Srbija
# Studijski program OAS Informacioni inženjering
# Predmet Metode i tehnike nauke o podacima

# Pomoćni sadržaj


# %% Biblioteke

import numpy as np


# %% Generator vrednosti

gpsv = np.random.default_rng(78)


# %% Klasa

class JNM:
    def __init__(self, veličina_ulaza, broj_neurona, fakt, generator):
        self.težine = generator.uniform(
            -0.1, 0.1, (broj_neurona, veličina_ulaza))
        self.pragovi = generator.random(broj_neurona)
        self.veličina_ulaza = veličina_ulaza
        self.broj_neurona = broj_neurona        
        self.fakt = fakt
        self.fakt_v = np.vectorize(fakt)
    
    def računanje_izlaza(self, ulaz):
        return self.fakt_v((self.težine @ ulaz) + self.pragovi)
     

# %% Upotreba

def stepenasta_binarna(ulaz):
    return 1 if ulaz >= 0 else 0

veličina_ulaza = 4
broj_neurona = 7

mreža = JNM(veličina_ulaza, broj_neurona, stepenasta_binarna, gpsv)

print("težine \n", mreža.težine)
print("pragovi \n", mreža.pragovi)
print()

for i in range(5):
    ulaz = gpsv.uniform(-100, 100, veličina_ulaza)      
    izlaz = mreža.računanje_izlaza(ulaz)    
    print("ulaz \n", ulaz)
    print("izlaz \n", izlaz)
    print()

