testutils: rozbitá verze kde padají vcn, neznámo proč
This commit is contained in:
parent
8604ef7b4c
commit
7332466a31
1 changed files with 29 additions and 5 deletions
|
@ -19,6 +19,13 @@ zlinska = None # tohle bude speciální škola, které později dodáme kontaktn
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# testuje unikátnost vygenerovaného jména
|
||||
def __unikatni_jmeno(osoby, jmeno, prijmeni):
|
||||
for os in osoby:
|
||||
if os.jmeno == jmeno and os.prijmeni == prijmeni:
|
||||
return 0
|
||||
else: return 1
|
||||
|
||||
def gen_osoby(rnd, size):
|
||||
logger.info('Generuji osoby (size={})...'.format(size))
|
||||
|
||||
|
@ -48,6 +55,19 @@ def gen_osoby(rnd, size):
|
|||
pohlavi = rnd.randint(0,1)
|
||||
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
|
||||
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
|
||||
pokusy = 0
|
||||
max_pokusy = 120*size
|
||||
while (not __unikatni_jmeno and pokusy < max_pokusy):
|
||||
# pokud jméno a příjmení není unikátní, zkoušíme generovat nová
|
||||
# do daného limitu (abychom se nezacyklili do nekonečna při málo jménech a příjmeních
|
||||
# ze kterých se generuje)
|
||||
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
|
||||
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
|
||||
pokusy = pokusy + 1
|
||||
if pokusy >= max_pokusy:
|
||||
print("Chyba, na danou velikost testovacích dat příliš málo možných"
|
||||
" jmen a příjmení")
|
||||
exit
|
||||
prezdivka = rnd.choice(prezdivky)
|
||||
email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)])
|
||||
telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)])
|
||||
|
@ -165,11 +185,12 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size)
|
|||
k = 0
|
||||
for rocnik in rocniky:
|
||||
k+=1
|
||||
print("Generuji {}. číslo.".format(k))
|
||||
cisla = rocnik_cisla[k-1]
|
||||
for ci in range(3, len(cisla)+1): # pro všechna čísla
|
||||
resitele_size = round(7/8 * 30 * size) # očekáváný celkový počet řešitelů
|
||||
poc_res = rnd.randint(round(resitele_size/8), round(3*resitele_size/4))
|
||||
# dané číslo řeší něco mezi osminou a tříčtvrtinou všech řešitelů
|
||||
poc_res = rnd.randint(round(resitele_size/8), round(resitele_size/4))
|
||||
# dané číslo řeší něco mezi osminou a čtvrtinou všech řešitelů
|
||||
# (náhodná hausnumera, možno změnit)
|
||||
# účelem je, aby se řešení generovala z menší množiny řešitelů a tedy
|
||||
# bylo více řešení od jednoho řešitele daného čísla
|
||||
|
@ -228,9 +249,10 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size)
|
|||
p.save()
|
||||
|
||||
# generování řešení
|
||||
poc_reseni = rnd.randint(size // 2, size * 2)
|
||||
# generujeme náhodný počet řešení
|
||||
poc_reseni = rnd.randint(poc_res, poc_res * 4)
|
||||
# generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla
|
||||
for ri in range(poc_reseni):
|
||||
#print("Generuji {}-té řešení".format(ri))
|
||||
if rnd.randint(1, 10) == 6:
|
||||
# cca desetina řešení od více řešitelů
|
||||
res_vyber = rnd.sample(resitele_cisla, rnd.randint(2, 5))
|
||||
|
@ -432,8 +454,10 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori)
|
|||
cisla = rocnik_cisla[k-1]
|
||||
temata = rocnik_temata[k-1]
|
||||
for ci in range(len(cisla)):
|
||||
print("Generuji {}-té číslo".format(ci))
|
||||
cislo = cisla[ci-1]
|
||||
mozna_tema_vcn = cislo.cislonode.first_child
|
||||
# kdybyste nad tím někdo taky přemýšleli, tak vcn == VCisleNode :)
|
||||
while mozna_tema_vcn != None:
|
||||
if type(mozna_tema_vcn) != TemaVCisleNode:
|
||||
mozna_tema_vcn = mozna_tema_vcn.succ
|
||||
|
@ -521,7 +545,7 @@ def gen_novinky(rnd, organizatori):
|
|||
|
||||
def otec_syn(otec, syn):
|
||||
bratr = otec.first_child
|
||||
syn.succ = bratr
|
||||
syn.ucc = bratr
|
||||
otec.first_child = syn
|
||||
syn.save()
|
||||
otec.save()
|
||||
|
|
Loading…
Reference in a new issue