Skip to content

Commit f2d52f8

Browse files
author
Jon Palmer
committed
clean up logging in abinitio #23
1 parent ff71504 commit f2d52f8

File tree

3 files changed

+113
-41
lines changed

3 files changed

+113
-41
lines changed

CITATION.cff

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cff-version: version = "25.7.1"
1+
cff-version: version = "25.7.16"
22
title: 'funannotate2: eukaryotic genome annotation'
33
message: >-
44
If you use this software, please cite it using the
@@ -17,5 +17,5 @@ keywords:
1717
- functional annotation
1818
- consensus gene models
1919
license: BSD-2-Clause
20-
version: version = "25.7.1"
21-
date-released: '2025-07-14'
20+
version: version = "25.7.16"
21+
date-released: '2025-07-16'

funannotate2/abinitio.py

Lines changed: 109 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -452,13 +452,22 @@ def _load_training_parameters(train_dir):
452452
final_train = test_training(TrainData, test_models, tmpdir, tool="glimmerhmm")
453453
optimize_end = time.time()
454454
optimize_elapsed = time.strftime("%H:%M:%S", time.gmtime(optimize_end - train_end))
455-
log(
456-
"Initial training completed in {} and parameter optimization completed in {}s\n{}".format(
457-
train_elapsed,
458-
optimize_elapsed,
459-
json.dumps(final_train, indent=2, default=str),
455+
if hasattr(log, "info"):
456+
log.info(
457+
"Initial training completed in {} and parameter optimization completed in {}s\n{}".format(
458+
train_elapsed,
459+
optimize_elapsed,
460+
json.dumps(final_train, indent=2, default=str),
461+
)
462+
)
463+
else:
464+
log(
465+
"Initial training completed in {} and parameter optimization completed in {}s\n{}".format(
466+
train_elapsed,
467+
optimize_elapsed,
468+
json.dumps(final_train, indent=2, default=str),
469+
)
460470
)
461-
)
462471

463472
return {"location": TrainData, "train_results": final_train}
464473

@@ -507,11 +516,18 @@ def _glimmer2gff3(input, output):
507516
continue
508517
line = line.strip()
509518
if line.count("\t") < 8:
510-
log(
511-
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
512-
i + 1, line
519+
if hasattr(log, "error"):
520+
log.error(
521+
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
522+
i + 1, line
523+
)
524+
)
525+
else:
526+
log(
527+
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
528+
i + 1, line
529+
)
513530
)
514-
)
515531
continue
516532
(
517533
contig,
@@ -610,11 +626,18 @@ def _glimmer2gff3(input, output):
610626
)
611627
)
612628
else:
613-
log(
614-
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
615-
i + 1, line
629+
if hasattr(log, "error"):
630+
log.error(
631+
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
632+
i + 1, line
633+
)
634+
)
635+
else:
636+
log(
637+
"ERROR parsing GlimmerHMM Raw output in line {}:\n {}".format(
638+
i + 1, line
639+
)
616640
)
617-
)
618641

619642
glimmerRaw = os.path.join(
620643
folder,
@@ -715,11 +738,18 @@ def train_genemark(
715738
)
716739
train_end = time.time()
717740
train_elapsed = time.strftime("%H:%M:%S", time.gmtime(train_end - train_start))
718-
log(
719-
"Initial training completed in {}s\n{}".format(
720-
train_elapsed, json.dumps(init_train, indent=2, default=str)
741+
if hasattr(log, "info"):
742+
log.info(
743+
"Initial training completed in {}s\n{}".format(
744+
train_elapsed, json.dumps(init_train, indent=2, default=str)
745+
)
746+
)
747+
else:
748+
log(
749+
"Initial training completed in {}s\n{}".format(
750+
train_elapsed, json.dumps(init_train, indent=2, default=str)
751+
)
721752
)
722-
)
723753
return {"location": os.path.abspath(genemark_mod), "train_results": init_train}
724754
else:
725755
return {"location": None, "train_results": None}
@@ -874,11 +904,18 @@ def _sortDict(d):
874904
scaff2genes[v["contig"]].append(k)
875905

876906
# get only scaffolds that have gene models for training
877-
log.debug(
878-
"{:} gene models to train snap on {:} scaffolds".format(
879-
len(sGenes), len(scaff2genes)
907+
if hasattr(log, "debug"):
908+
log.debug(
909+
"{:} gene models to train snap on {:} scaffolds".format(
910+
len(sGenes), len(scaff2genes)
911+
)
912+
)
913+
else:
914+
log(
915+
"{:} gene models to train snap on {:} scaffolds".format(
916+
len(sGenes), len(scaff2genes)
917+
)
880918
)
881-
)
882919
trainingFasta = os.path.join(tmpdir, "snap-training.scaffolds.fasta")
883920
with open(trainingFasta, "w") as outfile:
884921
for title, seq in SeqRecords.items():
@@ -915,11 +952,18 @@ def _sortDict(d):
915952
# now we can test the trained model
916953
train_elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - train_start))
917954
init_train = test_training(snapHMM, test_models, tmpdir, tool="snap")
918-
log(
919-
"Initial training completed in {}s\n{}".format(
920-
train_elapsed, json.dumps(init_train, indent=2, default=str)
955+
if hasattr(log, "info"):
956+
log.info(
957+
"Initial training completed in {}s\n{}".format(
958+
train_elapsed, json.dumps(init_train, indent=2, default=str)
959+
)
960+
)
961+
else:
962+
log(
963+
"Initial training completed in {}s\n{}".format(
964+
train_elapsed, json.dumps(init_train, indent=2, default=str)
965+
)
921966
)
922-
)
923967

924968
# if this does not fail, then return some info in dict format
925969
return {"location": os.path.abspath(snapHMM), "train_results": init_train}
@@ -1219,7 +1263,10 @@ def run_augustus_join(
12191263
elapsed = time.time() - time_start
12201264
elapsed_str = time.strftime("%Hh%Mm%Ss", time.gmtime(elapsed))
12211265
# Log the completion message using the provided log function
1222-
log(f"Augustus took {elapsed_str} to predict genes on {genome}")
1266+
if hasattr(log, "info"):
1267+
log.info(f"Augustus took {elapsed_str} to predict genes on {genome}")
1268+
else:
1269+
log(f"Augustus took {elapsed_str} to predict genes on {genome}")
12231270
return 0
12241271

12251272

@@ -1445,7 +1492,10 @@ def train_augustus(
14451492
init_train = test_augustus_predictions(
14461493
tmpdir, species, trainingset, aug_init_training
14471494
)
1448-
log(f"Augustus initial training results:\n{init_train}")
1495+
if hasattr(log, "info"):
1496+
log.info(f"Augustus initial training results:\n{init_train}")
1497+
else:
1498+
log(f"Augustus initial training results:\n{init_train}")
14491499
# so idea here is to copy over existing and then run optimize augustus on it
14501500
optimize_cmd = [
14511501
OPTIMIZE,
@@ -1457,7 +1507,10 @@ def train_augustus(
14571507
f"{os.path.basename(trainingset)}",
14581508
]
14591509
with open(train_log, "w") as logfile:
1460-
log(f"{' '.join(optimize_cmd)}")
1510+
if hasattr(log, "debug"):
1511+
log.debug(f"{' '.join(optimize_cmd)}")
1512+
else:
1513+
log(f"{' '.join(optimize_cmd)}")
14611514
subprocess.run(optimize_cmd, cwd=tmpdir, stdout=logfile, stderr=logfile)
14621515
else:
14631516
new_species_cmd = [
@@ -1473,9 +1526,15 @@ def train_augustus(
14731526
f"{os.path.basename(trainingset)}",
14741527
]
14751528
with open(train_log, "w") as logfile:
1476-
log.debug(f"{' '.join(new_species_cmd)}")
1529+
if hasattr(log, "debug"):
1530+
log.debug(f"{' '.join(new_species_cmd)}")
1531+
else:
1532+
log(f"{' '.join(new_species_cmd)}")
14771533
subprocess.run(new_species_cmd, stdout=logfile, stderr=logfile)
1478-
log.debug(f"{' '.join(etraining_cmd)}")
1534+
if hasattr(log, "debug"):
1535+
log.debug(f"{' '.join(etraining_cmd)}")
1536+
else:
1537+
log(f"{' '.join(etraining_cmd)}")
14791538
subprocess.run(etraining_cmd, cwd=tmpdir, stdout=logfile, stderr=logfile)
14801539

14811540
# see if optimize is True
@@ -1484,7 +1543,10 @@ def train_augustus(
14841543
init_train = test_augustus_predictions(
14851544
tmpdir, species, trainingset, aug_init_training
14861545
)
1487-
log(f"Augustus initial training results:\n{init_train}")
1546+
if hasattr(log, "info"):
1547+
log.info(f"Augustus initial training results:\n{init_train}")
1548+
else:
1549+
log(f"Augustus initial training results:\n{init_train}")
14881550
# so idea here is to copy over existing and then run optimize augustus on it
14891551
optimize_cmd = [
14901552
OPTIMIZE,
@@ -1496,7 +1558,10 @@ def train_augustus(
14961558
f"{os.path.basename(trainingset)}",
14971559
]
14981560
with open(train_log, "a") as logfile:
1499-
log.debug(f"{' '.join(optimize_cmd)}")
1561+
if hasattr(log, "debug"):
1562+
log.debug(f"{' '.join(optimize_cmd)}")
1563+
else:
1564+
log(f"{' '.join(optimize_cmd)}")
15001565
subprocess.run(optimize_cmd, cwd=tmpdir, stdout=logfile, stderr=logfile)
15011566

15021567
# now predict the test to see accuracy
@@ -1505,11 +1570,18 @@ def train_augustus(
15051570
species, test_models, tmpdir, tool="augustus", aug_config_dir=tmpdir
15061571
)
15071572
train_elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - train_start))
1508-
log(
1509-
"Initial training completed in {}s\n{}".format(
1510-
train_elapsed, json.dumps(init_train, indent=2, default=str)
1573+
if hasattr(log, "info"):
1574+
log.info(
1575+
"Initial training completed in {}s\n{}".format(
1576+
train_elapsed, json.dumps(init_train, indent=2, default=str)
1577+
)
1578+
)
1579+
else:
1580+
log(
1581+
"Initial training completed in {}s\n{}".format(
1582+
train_elapsed, json.dumps(init_train, indent=2, default=str)
1583+
)
15111584
)
1512-
)
15131585
# aug_final_training = os.path.join(tmpdir, "augustus.final.training.txt")
15141586
# final_train = test_augustus_predictions(
15151587
# tmpdir, species, trainingset, aug_final_training

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "funannotate2"
7-
version = "25.7.1"
7+
version = "25.7.16"
88
description = "Funannotate2: eukarytoic genome annotation pipeline"
99
readme = {file = "README.md", content-type = "text/markdown"}
1010
authors = [

0 commit comments

Comments
 (0)