Zrychlení výsledkovky čísla sjednocením sčítání bodů.
This commit is contained in:
		
							parent
							
								
									d0a6e35298
								
							
						
					
					
						commit
						b9875b5a1a
					
				
					 1 changed files with 40 additions and 53 deletions
				
			
		|  | @ -259,6 +259,13 @@ class VysledkovkaCisla(Vysledkovka): | ||||||
| 
 | 
 | ||||||
| 	@cached_property | 	@cached_property | ||||||
| 	def problemy_s_body_za_cislo(self): | 	def problemy_s_body_za_cislo(self): | ||||||
|  | 		""" | ||||||
|  | 			TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí | ||||||
|  | 			(výpočet bodů hlavních problémů a výpočet bodů podproblémů) | ||||||
|  | 			pro zrychlení výpočtu bodů ve výsledkovce. | ||||||
|  | 
 | ||||||
|  | 			Což asi zpomalilo výsledkovku v TeXu. Co s tím? (Tu nevidí řeš.) | ||||||
|  | 		""" | ||||||
| 
 | 
 | ||||||
| 		hlavni_problemy_slovnik = dict() | 		hlavni_problemy_slovnik = dict() | ||||||
| 		for hp in self.hlavni_problemy: | 		for hp in self.hlavni_problemy: | ||||||
|  | @ -277,25 +284,48 @@ class VysledkovkaCisla(Vysledkovka): | ||||||
| 
 | 
 | ||||||
| 			hlavni_problemy_slovnik[-1][ar.id] = "" | 			hlavni_problemy_slovnik[-1][ar.id] = "" | ||||||
| 
 | 
 | ||||||
|  | 		problem2nadproblem = dict() | ||||||
|  | 
 | ||||||
|  | 		body_slovnik = {} | ||||||
|  | 		for tema in self.temata_a_spol: | ||||||
|  | 			body_slovnik[tema.id] = {} | ||||||
|  | 			for problem in self.podproblemy[tema.id]: | ||||||
|  | 				body_slovnik[tema.id][problem.id] = {} | ||||||
|  | 				problem2nadproblem[problem.id] = tema.id | ||||||
|  | 		body_slovnik[-1] = {} | ||||||
|  | 		for problem in self.podproblemy[-1]: | ||||||
|  | 			body_slovnik[-1][problem.id] = {} | ||||||
|  | 			problem2nadproblem[problem.id] = -1 | ||||||
|  | 
 | ||||||
|  | 		# zakládání prázdných záznamů pro řešitele | ||||||
|  | 		for ar in self.aktivni_resitele: | ||||||
|  | 			for tema in self.temata_a_spol: | ||||||
|  | 				for problem in self.podproblemy[tema.id]: | ||||||
|  | 					body_slovnik[tema.id][problem.id][ar.id] = "" | ||||||
|  | 
 | ||||||
|  | 			for problem in self.podproblemy[-1]: | ||||||
|  | 				body_slovnik[-1][problem.id][ar.id] = "" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | ||||||
| 
 | 
 | ||||||
| 		for hodnoceni in hodnoceni_do_cisla: | 		for hodnoceni in hodnoceni_do_cisla: | ||||||
| 			prob = hodnoceni.problem | 			prob = hodnoceni.problem | ||||||
| 			nadproblem = hlavni_problem(prob) | 			nadproblem = problem2nadproblem[prob.id] | ||||||
| 			if self.ne_clanek_ne_konfera(nadproblem): | 			nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem] | ||||||
| 				nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] |  | ||||||
| 			else: |  | ||||||
| 				nadproblem_slovnik = hlavni_problemy_slovnik[-1] |  | ||||||
| 
 | 
 | ||||||
| 			body = hodnoceni.body | 			body = hodnoceni.body | ||||||
| 
 | 
 | ||||||
|  | 			problem_slovnik = body_slovnik[nadproblem][prob.id] | ||||||
|  | 
 | ||||||
| 			# a mít více řešitelů | 			# a mít více řešitelů | ||||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | 			for resitel in hodnoceni.reseni.resitele.all(): | ||||||
| 				if resitel not in self.aktivni_resitele: | 				if resitel not in self.aktivni_resitele: | ||||||
| 					continue | 					continue | ||||||
| 				self.pricti_body(cislobody, resitel, body) | 				self.pricti_body(cislobody, resitel, body) | ||||||
| 				self.pricti_body(nadproblem_slovnik, resitel, body) | 				self.pricti_body(nadproblem_slovnik, resitel, body) | ||||||
| 		return hlavni_problemy_slovnik, cislobody | 				self.pricti_body(problem_slovnik, resitel, body) | ||||||
|  | 		return hlavni_problemy_slovnik, cislobody, body_slovnik | ||||||
| 
 | 
 | ||||||
| 	@cached_property | 	@cached_property | ||||||
| 	def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: | 	def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: | ||||||
|  | @ -305,6 +335,10 @@ class VysledkovkaCisla(Vysledkovka): | ||||||
| 	def body_za_cislo(self) -> dict[int, str]: | 	def body_za_cislo(self) -> dict[int, str]: | ||||||
| 		return self.problemy_s_body_za_cislo[1] | 		return self.problemy_s_body_za_cislo[1] | ||||||
| 
 | 
 | ||||||
|  | 	@cached_property | ||||||
|  | 	def problemy_slovnik(self): | ||||||
|  | 		return self.problemy_s_body_za_cislo[2] | ||||||
|  | 
 | ||||||
| 	@cached_property | 	@cached_property | ||||||
| 	def temata_a_spol(self) -> list[m.Problem]: | 	def temata_a_spol(self) -> list[m.Problem]: | ||||||
| 		if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT: | 		if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT: | ||||||
|  | @ -328,53 +362,6 @@ class VysledkovkaCisla(Vysledkovka): | ||||||
| 	def podproblemy_iter(self) -> FixedIterator: | 	def podproblemy_iter(self) -> FixedIterator: | ||||||
| 		return FixedIterator(self.podproblemy_seznam.__iter__()) | 		return FixedIterator(self.podproblemy_seznam.__iter__()) | ||||||
| 
 | 
 | ||||||
| 	@cached_property |  | ||||||
| 	def problemy_slovnik(self): |  | ||||||
| 		# získáme body u jednotlivých témat |  | ||||||
| 		""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních |  | ||||||
| 		problémech (témata). """ |  | ||||||
| 
 |  | ||||||
| 		body_slovnik = {} |  | ||||||
| 		for tema in self.temata_a_spol: |  | ||||||
| 			body_slovnik[tema.id] = {} |  | ||||||
| 			for problem in self.podproblemy[tema.id]: |  | ||||||
| 				body_slovnik[tema.id][problem.id] = {} |  | ||||||
| 		body_slovnik[-1] = {} |  | ||||||
| 		for problem in self.podproblemy[-1]: |  | ||||||
| 			body_slovnik[-1][problem.id] = {} |  | ||||||
| 
 |  | ||||||
| 		# zakládání prázdných záznamů pro řešitele |  | ||||||
| 		for ar in self.aktivni_resitele: |  | ||||||
| 			for tema in self.temata_a_spol: |  | ||||||
| 				for problem in self.podproblemy[tema.id]: |  | ||||||
| 					body_slovnik[tema.id][problem.id][ar.id] = "" |  | ||||||
| 
 |  | ||||||
| 			for problem in self.podproblemy[-1]: |  | ||||||
| 				body_slovnik[-1][problem.id][ar.id] = "" |  | ||||||
| 
 |  | ||||||
| 		temata = set(t.id for t in self.temata_a_spol) |  | ||||||
| 
 |  | ||||||
| 		hodnoceni_do_cisla = self.hodnoceni_do_cisla |  | ||||||
| 
 |  | ||||||
| 		for hodnoceni in hodnoceni_do_cisla: |  | ||||||
| 			prob = hodnoceni.problem |  | ||||||
| 			nadproblem = hlavni_problem(prob) |  | ||||||
| 			if nadproblem.id in temata: |  | ||||||
| 				nadproblem_slovnik = body_slovnik[nadproblem.id] |  | ||||||
| 			else: |  | ||||||
| 				nadproblem_slovnik = body_slovnik[-1] |  | ||||||
| 
 |  | ||||||
| 			problem_slovnik = nadproblem_slovnik[prob.id] |  | ||||||
| 
 |  | ||||||
| 			body = hodnoceni.body |  | ||||||
| 
 |  | ||||||
| 			# a mít více řešitelů |  | ||||||
| 			for resitel in hodnoceni.reseni.resitele.all(): |  | ||||||
| 				if resitel not in self.aktivni_resitele: |  | ||||||
| 					continue |  | ||||||
| 				self.pricti_body(problem_slovnik, resitel, body) |  | ||||||
| 		return body_slovnik |  | ||||||
| 
 |  | ||||||
| 	class RadekVysledkovkyCisla(object): | 	class RadekVysledkovkyCisla(object): | ||||||
| 		"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. | 		"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. | ||||||
| 		Umožňuje snazší práci v templatu (lepší, než seznam).""" | 		Umožňuje snazší práci v templatu (lepší, než seznam).""" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue