Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 30 additions & 14 deletions src/fire2a/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
"""
__author__ = "Fernando Badilla"
__revision__ = "$Format:%H$"

import logging
import sys
from importlib.metadata import PackageNotFoundError, distribution
from pathlib import Path
from typing import Any, Dict, List, Tuple, Union
Expand Down Expand Up @@ -69,16 +69,28 @@ def setup_logger(name: str = __name__, verbosity: int = 0, logfile: Path = None)
# root logger
logger = logging.getLogger()

# Create a stream handler
import sys

stream_handler = logging.StreamHandler(sys.stdout)

# Create a rotating file handler
# Find or create StreamHandler
stream_handler = None
for h in logger.handlers:
if isinstance(h, logging.StreamHandler):
stream_handler = h
break
if stream_handler is None:
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)

# Find or create RotatingFileHandler
rf_handler = None
if logfile:
from logging.handlers import RotatingFileHandler

rf_handler = RotatingFileHandler(logfile, maxBytes=25 * 1024, backupCount=5)
for h in logger.handlers:
if isinstance(h, RotatingFileHandler):
rf_handler = h
break
if rf_handler is None:
rf_handler = RotatingFileHandler(logfile, maxBytes=25 * 1024, backupCount=5)
logger.addHandler(rf_handler)

# Set the logs level
if verbosity in ["CRITICAL", "FATAL"] or verbosity == -1:
Expand All @@ -93,9 +105,11 @@ def setup_logger(name: str = __name__, verbosity: int = 0, logfile: Path = None)
level = logging.DEBUG
else:
level = logging.DEBUG

logger.setLevel(level)
stream_handler.setLevel(level)
if logfile:
if stream_handler:
stream_handler.setLevel(level)
if logfile and rf_handler:
rf_handler.setLevel(level)

# formatter
Expand All @@ -104,13 +118,15 @@ def setup_logger(name: str = __name__, verbosity: int = 0, logfile: Path = None)
"%(asctime)s %(levelname)s %(name)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
stream_handler.setFormatter(formatter)
if logfile:
if stream_handler:
stream_handler.setFormatter(formatter)
if logfile and rf_handler:
rf_handler.setFormatter(formatter)

# Add the handlers to the logger
logger.addHandler(stream_handler)
if logfile:
if stream_handler:
logger.addHandler(stream_handler)
if logfile and rf_handler:
logger.addHandler(rf_handler)
logger.debug("Logger initialized @level %s", logging.getLevelName(level))

Expand Down
3 changes: 2 additions & 1 deletion src/fire2a/agglomerative_clustering.py
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,8 @@ def main(argv=None):
global logger
from fire2a import setup_logger

logger = setup_logger(verbosity=args.verbose)
name = __name__ if __name__ != "__main__" else "fire2a.agglomerative_clustering"
logger = setup_logger(name, verbosity=args.verbose)

logger.info("args %s", args)

Expand Down
12 changes: 6 additions & 6 deletions src/fire2a/cell2fire.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ def final_scar_step(i, data, afile, scar_raster, scar_raster_ds, burn_prob, burn
if burn_prob:
if np_any(data == -1):
mask = data != -1
burn_prob_arr[ mask ] += data[ mask ]
burn_prob_arr[mask] += data[mask]
else:
burn_prob_arr += data

Expand Down Expand Up @@ -566,8 +566,7 @@ def build_stats(
callback=None,
feedback=None,
):
"""Builds final statistics raster (1 band per-simulation) and summary raster (2 bands: mean against pixel burn count and stdev against total number of simulations) files
"""
"""Builds final statistics raster (1 band per-simulation) and summary raster (2 bands: mean against pixel burn count and stdev against total number of simulations) files"""
from numpy import float32 as np_float32
from numpy import loadtxt as np_loadtxt
from numpy import sqrt as np_sqrt
Expand Down Expand Up @@ -635,7 +634,7 @@ def build_stats(
mask = data != -9999
tmp = data[mask]
summed[mask] += tmp
sumsquared[mask] += tmp ** 2
sumsquared[mask] += tmp**2
burncount[mask & (data != 0)] += 1

if callback:
Expand Down Expand Up @@ -668,7 +667,7 @@ def build_stats(
# std
# from all simulations
N = len(files)
stddev = np_sqrt(sumsquared / N - (summed/N)**2)
stddev = np_sqrt(sumsquared / N - (summed / N) ** 2)
# beacause this is always zero:
# stddev = np_zeros((H, W), dtype=np_float32) - 9999
# zero_mask = burncount == 0
Expand Down Expand Up @@ -773,7 +772,8 @@ def main(argv=None):
global logger
from fire2a import setup_logger

logger = setup_logger(verbosity=args.verbose, logfile=args.logfile)
name = __name__ if __name__ != "__main__" else "fire2a.cell2fire"
logger = setup_logger(name, verbosity=args.verbose, logfile=args.logfile)
# set other modules logging level
logging.getLogger("asyncio").setLevel(logging.INFO)

Expand Down
3 changes: 2 additions & 1 deletion src/fire2a/downstream_protection_value.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,8 @@ def main(argv=None):
if argv is None:
argv = sys.argv[1:]
args = argument_parser(argv)
logger = setup_logger(__name__, args.verbosity, args.logfile)
name = __name__ if __name__ != "__main__" else "fire2a.downstream_protection_value"
logger = setup_logger(name, args.verbosity, args.logfile)
logger.info(f"{args=}")
logger.debug("debugging...")

Expand Down
2 changes: 1 addition & 1 deletion src/fire2a/knapsack.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ def pre_solve(argv):
global logger
from fire2a import setup_logger

logger = setup_logger(verbosity=args.verbose)
logger = setup_logger(name=__name__, verbosity=args.verbose)

logger.info("args %s", args)

Expand Down
3 changes: 2 additions & 1 deletion src/fire2template/documenting.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ def do_something(self, *args, **kwargs):

def main(argv):
"""This is a function docstring that describes a function"""
logger = setup_logger(__name__, 2, None)
name = __name__ if __name__ != "__main__" else "fire2a.documenting"
logger = setup_logger(name, 2, None)
logger.info("Hello world!")
logger.info(f"argv:{argv}")
returns = b_method((1, "a"), "b", "c", an_optional_argument=2, d="e", f="g")
Expand Down
3 changes: 2 additions & 1 deletion src/fire2template/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,8 @@ def main(argv=None):
global logger
from fire2template import setup_logger

logger = setup_logger(verbosity=args.verbose, logfile=args.logfile)
name = __name__ if __name__ != "__main__" else "fire2a.template"
logger = setup_logger(name, verbosity=args.verbose, logfile=args.logfile)
# set other modules logging level
logging.getLogger("asyncio").setLevel(logging.INFO)

Expand Down