SDFIdk / FIRE

🔥 FIRE - FIkspunktREgister
https://sdfidk.github.io/FIRE/
MIT License
4 stars 8 forks source link

RecursionError: maximum recursion depth exceeded while calling a Python object #701

Closed Aslak-Meister closed 1 month ago

Aslak-Meister commented 1 year ago

Jeg får en fejlmeddelelse, når jeg forsøger at beregne et stort net af observationer. Pågældende observationer svarer omtrent til 3. prs, og jeg har korrigeret observationerne for tideeffekter.

Jeg starter beregningen med:

fire niv regn asmei_temp

Ifm. "Analyserer net" kommer bl.a. følgende meddelelse:

RecursionError: maximum recursion depth exceeded while calling a Python object

Projekt-regnearket er vedhæftet. asmei_temp.xlsx

kbevers commented 1 year ago

Den robuste løsning er vist at omskrive algoritmen i netanalysen fra en rekursiv til en iterativ tilgang. Men måske kan det løses hurtigt ved at hæve rekursionsgrænsen lidt - i så fald er det simplest. Prøv fx med nedenstående patch:

C:\dev\fire>git diff fire\cli\niv\_regn.py
diff --git a/fire/cli/niv/_regn.py b/fire/cli/niv/_regn.py
index ac5fdb4..a4148a0 100644
--- a/fire/cli/niv/_regn.py
+++ b/fire/cli/niv/_regn.py
@@ -4,6 +4,7 @@ from pathlib import Path
 from math import hypot, sqrt
 from typing import Dict, Tuple, List
 from dataclasses import dataclass, asdict
+import sys

 import click
 import xmltodict
@@ -78,6 +79,7 @@ def regn(projektnavn: str, **kwargs) -> None:
     'Kontrolberegning' (der skrives ved første kald til denne funktion),
     til 'Endelig beregning' (der skrives ved efterfølgende kald).
     """
+    sys.setrecursionlimit(1500)
     er_projekt_okay(projektnavn)

     fire.cli.print("Så regner vi")

Jeg har bare proppet det ind i _regn.py for at være sikker på at ændringen rammer rigtigt, men det kan formentligt gøres mere præcist et sted i _netoversigt.py. Prøv med forskellige værdier. 1000 er standarden og der er en øvre grænse som jeg ikke lige ved hvad er. 1500 er bare et gæt.

krebslw commented 2 months ago

Hej Aslak

Har prøvet at køre fire niv regn asmei_temp igennem nu. Det går fint igennem gama men fejler lidt senere når der skrives geojson filer i funktionen "obs_feature". Det er lidt kringlet men skal prøve at forklare:

Når der skrives en input xml-fil (den her: asmei_temp.txt . Har ændret extension til txt da github brokker sig over xml..) til gama, bruges kun fanebladet Observationer. Alle observationer sat som slukket medtages ikke.

Efter endt udjævning skriver gama en output xml-fil asmei_temp-resultat .txt. Output xml filen bruges til opdatere en intern udgave (kaldet et arbejdssæt) af fanebladet Punktoversigt. Hvis et Punkt findes i xml-filen men ikke i Arbejdssættet (dette er normalt pga. nyetablerede punkter, men er generelt fordi et Punkt fremgår i Observations-fanebladet, men ikke i Punktoversigts-fanebladet), så tilføjes Punktet til Arbejdssættet.

Derefter skrives resultaterne (som ligger i Arbejdssættet) til en geojson-fil asmei_temp-kon-punkter.json (har igen måttet ændre extension til json i stedet for geojson)

Derefter skrives også observationerne til en geojson-fil. Her går det imidlertid galt, fordi programmet prøver at skrive ALLE observationer ud og tilføjer geometri-information (nord, øst) som det henter fra punkterne i Arbejdssættet. Her crasher den i funktionen "obs_feature" hvis der er observationer til Punkter som ikke findes i Arbejdssættet (KeyError). Som jeg lige ser det, så vil dette kun være tilfældet ved slukkede observationer til Punkter, som ikke allerede findes i Punktoversigten fra start af.

Det korte af det lange: Problem: Slukkede observationer til Punkter som ikke findes i Punktoversigt. Løsninger: Enten: gør så obs_feature springer slukkede observationer over eller: lav check inden kørsel og advar bruger om ovenstående Problem eller: gør ikke noget, da dette problem måske ikke er et problem, men bare forkert brug af programmet :) Husk fremover at inkludere alle observerede punkter i Punktoversigten eller slet observationerne fra arket. :)

EDIT: Nu med filer vedhæftet.

kbevers commented 1 month ago

Her crasher den i funktionen "obs_feature" hvis der er observationer til Punkter som ikke findes i Arbejdssættet (KeyError). Som jeg lige ser det, så vil dette kun være tilfældet ved slukkede observationer til Punkter, som ikke allerede findes i Punktoversigten fra start af.

@krebslw kan du lave et simpelt eksempel der reproducerer fejlen? Altså et med få punkter og observationer. Det lyder umiddelbart som noget vi skal have fikset og det vil være en stor hjælp at have et lettilgængeligt datasæt til at gøre det med.

krebslw commented 1 month ago

Den her virker: TEST_VIRKER.xlsx

Den her fejler: TEST_FEJLER.xlsx

For at genkøre test, slet da de faneblade som oprettes: netgeometri, singulære, og kontrolberegning