Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
851 commits
Select commit Hold shift + click to select a range
43192a9
Merge branch 'main' into fix-sbml2bngl-dict-lookup
akutuva21 Jun 2, 2026
c47876c
Merge pull request #423 from akutuva21/fix-sbml2bngl-dict-lookup-1739…
akutuva21 Jun 2, 2026
987e72f
Remove junk files
akutuva21 Jun 2, 2026
78bf222
fix: resolve CI failures - black formatting, test assertions, and dep…
akutuva21 Jun 3, 2026
5e7f083
fix: resolve remaining CI test failures - bad escape, BNGModelError a…
akutuva21 Jun 3, 2026
32afe40
fix: patch _new_ccompiler instead of module-level ccompiler in csimul…
akutuva21 Jun 3, 2026
5c5187c
fix: replace parenthesized with statement for Python 3.8 compatibility
akutuva21 Jun 3, 2026
c3a1cbc
PyBioNetGen: Refactor equivalent items grouping in ContextAnalyzer
akutuva21 Jun 4, 2026
850f1b5
PyBioNetGen: Fix contactMap.py to only process the first cluster usin…
akutuva21 Jun 4, 2026
50f96e5
PyBioNetGen: 🧪 Add unit test for printInfo in core/main.py
akutuva21 Jun 4, 2026
c37f6f7
PyBioNetGen: Fix string copying bug in `analyzeSBML.py`
akutuva21 Jun 4, 2026
4cb397d
PyBioNetGen: Add verbosity option logging during XML parsing
akutuva21 Jun 4, 2026
20d1464
PyBioNetGen: Fix BNGL argument parsing to support 0 as a dictionary key
akutuva21 Jun 4, 2026
59ad8f0
PyBioNetGen: ⚡ Optimize Levenshtein distance calculations via memoiza…
akutuva21 Jun 4, 2026
f3169ba
PyBioNetGen: 🧪 Add error test for shutil.rmtree in CSimulator
akutuva21 Jun 4, 2026
1be33e4
PyBioNetGen: fix: Migrate BNGL function creation into bngModel class
akutuva21 Jun 4, 2026
f663e96
PyBioNetGen: 🔒 Fix Hardcoded BioGRID API Key
akutuva21 Jun 4, 2026
d2a0029
PyBioNetGen: Merge ruleworld/main - Add BNGsim bridge and simulation …
akutuva21 Jun 5, 2026
e991daa
PyBioNetGen: Add missing logger and exception handling in runner to f…
akutuva21 Jun 5, 2026
88810a8
PyBioNetGen: Add PLA support to BNGsim backend bridge
akutuva21 Jun 5, 2026
dfe574a
Revert PLA support for BNGsim - BNGsim does not support PLA
akutuva21 Jun 5, 2026
842cef9
Refactor add_protocol_block to use BNGErrors and logging
google-labs-jules[bot] Jun 9, 2026
4e89b96
Refactor `add_protocol_block` to use `BNGErrors` and custom logging.
google-labs-jules[bot] Jun 9, 2026
96c69bd
perf: optimize execution bottleneck in processNamingConventions2 by r…
google-labs-jules[bot] Jun 9, 2026
686adf4
Optimize list membership checks to use sets in bnglWriter.py
google-labs-jules[bot] Jun 9, 2026
b1ec37d
Add tests for AttributeError and KeyError in generate_notebook()
google-labs-jules[bot] Jun 9, 2026
87d5977
test: add explicit exception format check in test_bngcli_init_invalid…
google-labs-jules[bot] Jun 9, 2026
25588a1
Refactor consolidate_arules method in bngModel.py
google-labs-jules[bot] Jun 9, 2026
de88a97
Remove unused imports in bionetgen/network/network.py
google-labs-jules[bot] Jun 9, 2026
197d306
⚡ Optimize string concatenation in bnglWriter lambda parsing
google-labs-jules[bot] Jun 9, 2026
c1a9e6c
Add explicit ImportError test for librrsimulator
google-labs-jules[bot] Jun 9, 2026
d14dece
Refactor: Raise BNGModelError on empty model
google-labs-jules[bot] Jun 9, 2026
0917db0
Add test for __version__ fallback in __init__.py
google-labs-jules[bot] Jun 9, 2026
4feb6e7
perf: Use set instead of list for dimensions membership check
google-labs-jules[bot] Jun 9, 2026
57b3e9b
Add tests for AttributeError and KeyError in generate_notebook()
google-labs-jules[bot] Jun 9, 2026
c95ba4f
⚡ [Performance] Use set instead of list for membership check
google-labs-jules[bot] Jun 9, 2026
0543954
chore: remove unused `run_command` import in `main.py`
google-labs-jules[bot] Jun 9, 2026
e5229f4
Refactor getReactions method to fix double-asterisk formatting bug
google-labs-jules[bot] Jun 9, 2026
1a45ddb
Add tests for AttributeError and KeyError in generate_notebook()
google-labs-jules[bot] Jun 9, 2026
cd9be30
Remove unused imports in core/tools/plot.py
google-labs-jules[bot] Jun 9, 2026
85dcb03
🧪 Add missing tests for error paths in csimulator.py
google-labs-jules[bot] Jun 9, 2026
af9718e
perf: optimize string concatenation in bnglFunction
google-labs-jules[bot] Jun 9, 2026
98a91c3
test: explicitly cover all four exception types in _resolve_species_c…
google-labs-jules[bot] Jun 9, 2026
8252f6c
perf: optimize membership checks in bnglWriter.py using sets
google-labs-jules[bot] Jun 9, 2026
27180b1
test: add test coverage for exception path in version parsing
google-labs-jules[bot] Jun 9, 2026
f740fbf
fix(atomizer): split by smallest actionable unit
google-labs-jules[bot] Jun 9, 2026
f1f15e5
Optimize membership checks by changing lists to sets in annotationRes…
google-labs-jules[bot] Jun 9, 2026
c0ce476
Fix formatting in bngModel.py using black
google-labs-jules[bot] Jun 9, 2026
3173126
perf: remove unnecessary synchronous sleep before github api network …
google-labs-jules[bot] Jun 9, 2026
9861c5e
🧪 Add parametrized tests for CSimulator error paths
google-labs-jules[bot] Jun 9, 2026
0ff8e96
Optimize regex compilation in BNGL writer by combining patterns
google-labs-jules[bot] Jun 9, 2026
e9aad91
Fix string copying logic by verifying the already-present implementation
google-labs-jules[bot] Jun 9, 2026
5b0a177
Refactor: Extract selectBestCandidate from consolidateDependencyGraph
google-labs-jules[bot] Jun 9, 2026
d7eaedc
🧪 Add test for AssertionError with debug=True in main.py
google-labs-jules[bot] Jun 9, 2026
0e5a4aa
test(cli): add error path test for exception in cli.py getattr fallback
google-labs-jules[bot] Jun 9, 2026
e5c1e9c
fix(atomizer): handle species with multiple identically-named molecul…
google-labs-jules[bot] Jun 9, 2026
b3c3626
Refactor selectBestCandidate to a class method
google-labs-jules[bot] Jun 9, 2026
23e3dc9
refactor: remove unused os and numpy imports from plot.py
google-labs-jules[bot] Jun 9, 2026
40e02be
🔒 Fix insecure XML parsing (XXE) by disabling entities in xmltodict.p…
google-labs-jules[bot] Jun 9, 2026
5d8d0b9
fix: properly propagate suppress and utilize BNGLogger for verbosity
google-labs-jules[bot] Jun 9, 2026
b99b6fa
Refactor `getAssignmentRules` to reduce code duplication\n\nConsolida…
google-labs-jules[bot] Jun 9, 2026
4e0d88d
Refactor ActionList.__init__ into smaller methods\n\nExtracted massiv…
google-labs-jules[bot] Jun 9, 2026
0b37f11
test: add missing BNGError coverage for visualize.py
google-labs-jules[bot] Jun 9, 2026
de0e0c9
Refactor string concatenation to list join for performance improvemen…
google-labs-jules[bot] Jun 9, 2026
9fa9502
Refactor analyzeReactionRate by extracting logic to helper methods
google-labs-jules[bot] Jun 9, 2026
8035619
Added missing error path tests for bionetgen notebook stdout/stderr f…
google-labs-jules[bot] Jun 9, 2026
d883d33
Optimize bngModel.__str__ to use list joining instead of string conca…
google-labs-jules[bot] Jun 9, 2026
40457a3
Optimize viable candidate search in `analyzeSpeciesModification` usin…
google-labs-jules[bot] Jun 9, 2026
fd31c3b
🔒 Fix Insecure Deserialization of pickle
google-labs-jules[bot] Jun 9, 2026
98c9f47
⚡ Optimize list membership check to set membership check
google-labs-jules[bot] Jun 9, 2026
b6724d2
Refactor analyzeHelper to reduce complexity and improve maintainability
google-labs-jules[bot] Jun 9, 2026
5df98e2
Remove deprecated naming convention code in analyzeSBML.py
google-labs-jules[bot] Jun 9, 2026
f9aad1d
Fix unused imports in bionetgen/__init__.py
google-labs-jules[bot] Jun 9, 2026
d235043
Remove unused AtomizeTool import from bionetgen/atomizer/__init__.py
google-labs-jules[bot] Jun 9, 2026
4c1dc36
perf: Hoist regex compilation outside loop in bnglWriter
google-labs-jules[bot] Jun 9, 2026
8ec8677
Add explicit tests for error paths in BNGGdiff._color_node
google-labs-jules[bot] Jun 9, 2026
0547673
Enable support for more than one transformation in analyzeSBML
google-labs-jules[bot] Jun 9, 2026
6120307
Optimize queryActiveSite network requests to run concurrently
google-labs-jules[bot] Jun 9, 2026
2650c68
Add missing error path test for CaughtSignal SIGTERM in main.py
google-labs-jules[bot] Jun 9, 2026
cc1c1ba
Refactor getSpecies to reduce complexity
google-labs-jules[bot] Jun 9, 2026
5bbd7cc
Refactored `adjust_func_def` in bngModel.py by extracting inner logic…
google-labs-jules[bot] Jun 9, 2026
6c6b9e5
perf: use sets for O(1) membership checks in bnglWriter
google-labs-jules[bot] Jun 9, 2026
673f48d
Fix SQL injection vulnerabilities in namingDatabase
google-labs-jules[bot] Jun 9, 2026
65521df
test: format test_version.py to resolve lint failure
google-labs-jules[bot] Jun 9, 2026
05828b4
test: format test_version.py to resolve lint failure
google-labs-jules[bot] Jun 9, 2026
a787eec
fix(atomizer): split by smallest actionable unit
google-labs-jules[bot] Jun 9, 2026
9a963ac
Refactor: Raise BNGModelError on empty model
google-labs-jules[bot] Jun 9, 2026
52374a4
🧪 Add parametrized tests for CSimulator error paths
google-labs-jules[bot] Jun 9, 2026
0d68e17
Optimize regex compilation in BNGL writer by combining patterns
google-labs-jules[bot] Jun 9, 2026
fd130fd
test: add explicit exception format check in test_bngcli_init_invalid…
google-labs-jules[bot] Jun 9, 2026
35ca14d
style(tests): run black on test_cli.py
google-labs-jules[bot] Jun 9, 2026
fcf3642
style: run black on test_cli.py
google-labs-jules[bot] Jun 9, 2026
9e12029
style: format moleculeCreation.py with black
google-labs-jules[bot] Jun 9, 2026
888335e
Refactor: Extract selectBestCandidate from consolidateDependencyGraph
google-labs-jules[bot] Jun 9, 2026
8001d04
Fix: apply black formatting to resolveSCT.py
google-labs-jules[bot] Jun 9, 2026
4d007f3
style: fix formatting in moleculeCreation.py
google-labs-jules[bot] Jun 9, 2026
efae620
🔒 Fix insecure XML parsing (XXE) by disabling entities in xmltodict.p…
google-labs-jules[bot] Jun 9, 2026
8c1eb03
🧪 Add test for AssertionError with debug=True in main.py
google-labs-jules[bot] Jun 9, 2026
a17d409
🔒 Fix insecure XML parsing (XXE) by disabling entities in xmltodict.p…
google-labs-jules[bot] Jun 9, 2026
8846b7d
fix: properly propagate suppress and utilize BNGLogger for verbosity
google-labs-jules[bot] Jun 9, 2026
5365e21
Added missing error path tests for bionetgen notebook stdout/stderr f…
google-labs-jules[bot] Jun 9, 2026
63d368b
Optimize viable candidate search in analyzeSpeciesModification using …
google-labs-jules[bot] Jun 9, 2026
c6bf6b6
🔒 Fix Insecure Deserialization of pickle
google-labs-jules[bot] Jun 9, 2026
5262d1e
Optimize viable candidate search in analyzeSpeciesModification using …
google-labs-jules[bot] Jun 9, 2026
7688fa5
🔒 Fix Insecure Deserialization of pickle
google-labs-jules[bot] Jun 9, 2026
86def09
Remove unused imports in core/tools/plot.py
google-labs-jules[bot] Jun 9, 2026
9bf630f
Add tests for AttributeError and KeyError in generate_notebook()
google-labs-jules[bot] Jun 9, 2026
38af27a
perf: Hoist regex compilation outside loop in bnglWriter
google-labs-jules[bot] Jun 9, 2026
94ed63f
perf: Hoist regex compilation outside loop in bnglWriter
google-labs-jules[bot] Jun 9, 2026
12ba8df
Add explicit tests for error paths in BNGGdiff._color_node
google-labs-jules[bot] Jun 9, 2026
ac4415e
Optimize queryActiveSite network requests to run concurrently
google-labs-jules[bot] Jun 9, 2026
e206f67
Enable support for more than one transformation in analyzeSBML
google-labs-jules[bot] Jun 9, 2026
7b6a5e7
Optimize membership checks by changing lists to sets in annotationRes…
google-labs-jules[bot] Jun 9, 2026
ce9e02a
Refactor getSpecies to reduce complexity
google-labs-jules[bot] Jun 9, 2026
3673649
Refactored adjust_func_def into multiple methods
google-labs-jules[bot] Jun 9, 2026
9051549
Refactor: Raise BNGModelError on empty model
google-labs-jules[bot] Jun 9, 2026
fd46d9f
Formatting fixes for namingDatabase
google-labs-jules[bot] Jun 9, 2026
093d694
Optimize viable candidate search in analyzeSpeciesModification using …
google-labs-jules[bot] Jun 9, 2026
d501cd4
Added missing error path tests for bionetgen notebook stdout/stderr f…
google-labs-jules[bot] Jun 10, 2026
b1c4284
Remove unused AtomizeTool import from bionetgen/atomizer/__init__.py
google-labs-jules[bot] Jun 10, 2026
37022e3
fix: properly propagate suppress and utilize BNGLogger for verbosity
google-labs-jules[bot] Jun 10, 2026
25ba43c
fix(atomizer): handle species with multiple identically-named molecul…
google-labs-jules[bot] Jun 10, 2026
357fd98
Optimize viable candidate search in analyzeSpeciesModification using …
google-labs-jules[bot] Jun 10, 2026
7a71e78
Remove unused imports in core/tools/plot.py
google-labs-jules[bot] Jun 10, 2026
e161fff
Optimize membership checks by changing lists to sets in annotationRes…
google-labs-jules[bot] Jun 10, 2026
c2471c3
Merge PR #518: Refactor adjust_func_def in bngModel.py
akutuva21 Jun 10, 2026
c033ae8
Merge PR #501: optimize membership checks with sets and generators (r…
akutuva21 Jun 10, 2026
d179aab
Merge PR #496: Optimize string building in bngModel.__str__
akutuva21 Jun 10, 2026
633b087
Refactor analyzeReactionRate by extracting logic to helper methods
google-labs-jules[bot] Jun 10, 2026
783ce49
⚡ Optimize list membership check to set membership check
google-labs-jules[bot] Jun 10, 2026
ccce0e7
Optimize bngModel.__str__ to use list joining instead of string conca…
google-labs-jules[bot] Jun 10, 2026
86af5e8
Refactor getSpecies to reduce complexity
google-labs-jules[bot] Jun 10, 2026
bdd22f1
Merge PR #501: membership checks + PR #496: str concat
akutuva21 Jun 10, 2026
f0b451e
Merge PR #480
akutuva21 Jun 10, 2026
7eb14af
Merge PR #481
akutuva21 Jun 10, 2026
7432ff3
Merge PR #483
akutuva21 Jun 10, 2026
b850880
Merge PR #484
akutuva21 Jun 10, 2026
4e25b37
Merge PR #487
akutuva21 Jun 10, 2026
73ba6ec
Merge PR #489
akutuva21 Jun 10, 2026
2b40c39
Merge PR #490
akutuva21 Jun 10, 2026
6402e2c
Merge PR #491
akutuva21 Jun 10, 2026
d7957d9
Merge PR #492
akutuva21 Jun 10, 2026
83f673a
Merge PR #494
akutuva21 Jun 10, 2026
3138087
Merge PR #495
akutuva21 Jun 10, 2026
284d82d
Merge PR #496
akutuva21 Jun 10, 2026
9859b7e
Merge PR #497
akutuva21 Jun 10, 2026
e713c2a
Merge PR #498
akutuva21 Jun 10, 2026
3cfaec1
Merge PR #500
akutuva21 Jun 10, 2026
4a3c185
Merge PR #502
akutuva21 Jun 10, 2026
b5ed4fe
Merge PR #503
akutuva21 Jun 10, 2026
e408b2c
Merge PR #504
akutuva21 Jun 10, 2026
f1a95df
Merge PR #506
akutuva21 Jun 10, 2026
1029adc
Merge PR #507
akutuva21 Jun 10, 2026
234b8b3
Merge PR #510
akutuva21 Jun 10, 2026
cc550c1
Merge PR #511
akutuva21 Jun 10, 2026
4b25466
Merge PR #516
akutuva21 Jun 10, 2026
f0e62ab
Merge PR #517
akutuva21 Jun 10, 2026
1e71736
Merge PR #519
akutuva21 Jun 10, 2026
0a784c2
Merge PR #521
akutuva21 Jun 10, 2026
7eb3950
Merge PR #476: Add test for main assertion error debug
akutuva21 Jun 10, 2026
a881b85
Merge PR #477: Add test for CLI exception handling
akutuva21 Jun 10, 2026
b1d028f
Merge PR #515: Optimize pathwaycommons network requests to execute co…
akutuva21 Jun 10, 2026
f915e1b
Remove temp/log/patch files (plan.md, context.log)
akutuva21 Jun 10, 2026
da6ec28
Merge all open PRs with conflict resolution
akutuva21 Jun 10, 2026
a98810e
Merge branch 'main' into refactor/consolidate-dependency-graph-106397…
google-labs-jules[bot] Jun 10, 2026
5d12f31
Merge remote-tracking branch 'origin/fix/bngerror-protocol-block-5844…
akutuva21 Jun 10, 2026
f24b4a4
Merge remote-tracking branch 'origin/transition-protocol-block-bngerr…
akutuva21 Jun 10, 2026
8e1141f
Merge remote-tracking branch 'origin/fix/optimize-analyze-sbml-execut…
akutuva21 Jun 10, 2026
8d3a55c
Merge remote-tracking branch 'origin/optimize-bnglwriter-membership-c…
akutuva21 Jun 10, 2026
9471221
Merge remote-tracking branch 'origin/jules-testing-coverage-generate-…
akutuva21 Jun 10, 2026
33cc518
Merge remote-tracking branch 'origin/testing-improvement-115042096054…
akutuva21 Jun 10, 2026
0df43d7
Merge remote-tracking branch 'origin/jules-12830901640860690337-02e1e…
akutuva21 Jun 10, 2026
b4d39dd
Merge remote-tracking branch 'origin/fix-unused-imports-network-py-94…
akutuva21 Jun 10, 2026
aa9f287
Merge remote-tracking branch 'origin/perf-optimize-bnglwriter-concat-…
akutuva21 Jun 10, 2026
d8bdf44
Merge remote-tracking branch 'origin/fix-import-error-test-5464882885…
akutuva21 Jun 10, 2026
25f009f
Merge remote-tracking branch 'origin/fix-bngmodel-error-8365717460229…
akutuva21 Jun 10, 2026
424cd00
Merge remote-tracking branch 'origin/test-init-version-fallback-59532…
akutuva21 Jun 10, 2026
5783f2d
Merge remote-tracking branch 'origin/perf-set-membership-139890510576…
akutuva21 Jun 10, 2026
7c7c63b
Merge remote-tracking branch 'origin/performance-optimization-members…
akutuva21 Jun 10, 2026
f158028
Merge remote-tracking branch 'origin/remove-unused-import-main-392509…
akutuva21 Jun 10, 2026
87d780d
Merge remote-tracking branch 'origin/refactor-getreactions-sbml2bngl-…
akutuva21 Jun 10, 2026
ec83e16
Merge remote-tracking branch 'origin/fix-unused-imports-plot-py-17176…
akutuva21 Jun 10, 2026
53eea76
Merge remote-tracking branch 'origin/testing-improvement-csimulator-1…
akutuva21 Jun 10, 2026
e74f2f7
Merge remote-tracking branch 'origin/perf/optimize-string-concatenati…
akutuva21 Jun 10, 2026
f2a3241
Merge remote-tracking branch 'origin/test-improvement-csimulator-exce…
akutuva21 Jun 10, 2026
c773638
Merge remote-tracking branch 'origin/perf-bnglwriter-set-membership-1…
akutuva21 Jun 10, 2026
82fe6ea
Merge remote-tracking branch 'origin/test-coverage-version-parsing-98…
akutuva21 Jun 10, 2026
2b425c6
Merge remote-tracking branch 'origin/fix-molecule-splitting-141318992…
akutuva21 Jun 10, 2026
dbae567
Merge remote-tracking branch 'origin/optimize-membership-checks-annot…
akutuva21 Jun 10, 2026
300d79f
Merge remote-tracking branch 'origin/perf/remove-sync-sleep-143488206…
akutuva21 Jun 10, 2026
ea24eb3
Merge remote-tracking branch 'origin/test-coverage-csimulator-error-7…
akutuva21 Jun 10, 2026
9a7b260
Merge remote-tracking branch 'origin/perf/regex-compilation-hoisting-…
akutuva21 Jun 10, 2026
a8410fa
Merge remote-tracking branch 'origin/fix-string-copying-1487045724738…
akutuva21 Jun 10, 2026
820fd07
Merge remote-tracking branch 'origin/refactor/consolidate-dependency-…
akutuva21 Jun 10, 2026
6cb96d9
Fix CI: run black formatter, remove leftover fix_script.py
akutuva21 Jun 10, 2026
ee3853f
Fix windows zip extraction
akutuva21 Jun 16, 2026
9baec2c
Testing improvement action gen string
akutuva21 Jun 16, 2026
778d45d
Fix test sympy odes
akutuva21 Jun 16, 2026
cef19cb
Optimize notebook write performance
akutuva21 Jun 16, 2026
fb10e15
Fix ar conflict
akutuva21 Jun 16, 2026
ce871e1
Fix resolveSCT redundant block
akutuva21 Jun 16, 2026
443525a
Fix operations xml parser
akutuva21 Jun 16, 2026
ed4720a
Optimize dict keys blocks
akutuva21 Jun 16, 2026
5179790
Remove double bonds complexes
akutuva21 Jun 16, 2026
ea1cef6
Resolve SCT tiebreaker
akutuva21 Jun 16, 2026
393a3c9
Implement smarter heuristic actual modifications
akutuva21 Jun 16, 2026
6ac4baa
Optimize atomizetool dict update
akutuva21 Jun 16, 2026
d9e7e27
Fix double mod resolveSCT
akutuva21 Jun 16, 2026
c1a4d1c
Fix bngl observables parsing
akutuva21 Jun 16, 2026
c9287c6
Fix BNGModelError
akutuva21 Jun 16, 2026
ff67736
Dictionary binding interactions feature
akutuva21 Jun 16, 2026
a51be2c
Add label validation
akutuva21 Jun 16, 2026
81f2b9b
Fix resolveSCT uncomment
akutuva21 Jun 16, 2026
d15fda0
Fix structured molecule ratio
akutuva21 Jun 16, 2026
c3f6b22
Fix getNamedMolecule null parameter
akutuva21 Jun 16, 2026
0e46ecc
Compilation tags properties
akutuva21 Jun 16, 2026
099b8d0
Fix pattern isomorphism
akutuva21 Jun 16, 2026
9438807
🧪 [Testing Improvement] Add missing tests for `Action.print_line` (#550)
akutuva21 Jun 16, 2026
1f7af3d
Add tests for _replace_nv_ith_s inner repl function (#551)
akutuva21 Jun 16, 2026
afc9659
🧪 add tests for ModelObj.print_line() (#555)
akutuva21 Jun 16, 2026
12b53d8
🧪 Add test coverage for untested Action.print_line() method (#558)
akutuva21 Jun 16, 2026
0306692
test: Add unit test for Observable.add_pattern (#560)
akutuva21 Jun 16, 2026
e395df4
perf: optimize keyword replacement in notebook generation\n\nRefactor…
akutuva21 Jun 16, 2026
a1f7997
🧹 [Code Health] Refactor getAssignmentRules in libsbml2bngl (#572)
akutuva21 Jun 16, 2026
c92b1ef
perf(gdiff): optimize dictionary iteration over graphs (#523)
akutuva21 Jun 16, 2026
4c1f7bd
test: add unit test for untested repl method (#525)
akutuva21 Jun 16, 2026
6fb0b88
Optimize `_write_bng_dat` and `_append_bng_dat_rows` loops (#532)
akutuva21 Jun 16, 2026
363dc70
perf: optimize kwargs copying in BNGNotebook.__init__ (#534)
akutuva21 Jun 16, 2026
9cd1122
fix(atomizer): externalize hardcoded doubleModifications to json conf…
akutuva21 Jun 16, 2026
37deb95
Refactor split heuristic using greedyModificationMatching (#540)
akutuva21 Jun 16, 2026
6beb124
perf: optimize dictionary key iteration in BNGGdiff._get_node_text (#…
akutuva21 Jun 16, 2026
7cbf8f6
perf: optimize dict key iteration in sbml2bngl.py (#543)
akutuva21 Jun 16, 2026
699fdce
Add tests for Compartment.gen_string() (#522)
akutuva21 Jun 16, 2026
6c8bcd7
🧪 test: add test for ModelObj comment setter (#524)
akutuva21 Jun 16, 2026
2affeef
🧪 Add unit tests for Species gen_string method (#526)
akutuva21 Jun 16, 2026
7489337
test: add tests for Function.gen_string method (#527)
akutuva21 Jun 16, 2026
e376c64
Add test for MoleculeType's gen_string method (#528)
akutuva21 Jun 16, 2026
7754785
chore: remove obsolete FIXME comment regarding double bonds in comple…
akutuva21 Jun 16, 2026
1b651fa
test: add unit test for Rule.gen_string (#530)
akutuva21 Jun 16, 2026
c492ccf
🧪 Add tests for repl_param and parameter indexing in _replace_indexed…
akutuva21 Jun 16, 2026
16149fc
🧪 Add tests for Parameter.gen_string method (#533)
akutuva21 Jun 16, 2026
277396f
🧪 Add tests for comment property in ModelObj (#535)
akutuva21 Jun 16, 2026
ed8a70e
Fix: raise BNGModelError with correct file path (#536)
akutuva21 Jun 16, 2026
28ddb5c
🧪 Add test for EnergyPattern.gen_string (#537)
akutuva21 Jun 16, 2026
f2c1834
🧪 Add tests for Rule.set_rate_constants (#538)
akutuva21 Jun 16, 2026
23315c0
🧪 Add unit test for repl_param in sympy_odes.py (#541)
akutuva21 Jun 16, 2026
41060e0
Add test for Rule.side_string method (#544)
akutuva21 Jun 16, 2026
671785a
🧪 Add tests for Observable.gen_string (#545)
akutuva21 Jun 16, 2026
4dcfc7c
style: apply black formatting to fix CI
akutuva21 Jun 17, 2026
46b7285
style: apply black formatting to benchmark.py
akutuva21 Jun 17, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/black_format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- uses: psf/black@stable
with:
options: "--check --verbose"
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,29 +61,29 @@ jobs:
packages: write

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3

- name: Login to GHCR
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
uses: docker/build-push-action@v4.0.0
uses: docker/build-push-action@v6
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ temp_testing/*
build
dist
Issues/rule_keywords/test_DeleteMolecules_changed.bngl
.jules/
__pycache__/
8 changes: 0 additions & 8 deletions MANIFEST.in

This file was deleted.

95 changes: 95 additions & 0 deletions benchmark.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import time as time_mod
import numpy as np
import os


def _write_bng_dat_original(path, time, data_2d, col_names):
headers = ["time"] + list(col_names)
with open(path, "w") as f:
f.write("# " + " ".join(f"{h:>18s}" for h in headers) + "\n")
for i in range(len(time)):
vals = [time[i]] + [data_2d[i, j] for j in range(data_2d.shape[1])]
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


def _write_bng_dat_new(path, time, data_2d, col_names):
headers = ["time"] + list(col_names)
with open(path, "w") as f:
f.write("# " + " ".join(f"{h:>18s}" for h in headers) + "\n")
for i, t in enumerate(time):
vals = [t] + [data_2d[i, j] for j in range(data_2d.shape[1])]
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


def _write_bng_dat_new2(path, time, data_2d, col_names):
headers = ["time"] + list(col_names)
with open(path, "w") as f:
f.write("# " + " ".join(f"{h:>18s}" for h in headers) + "\n")
for i, t in enumerate(time):
vals = [t] + data_2d[i].tolist()
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


def _append_bng_dat_rows_original(path, time, data_2d, skip_first=True):
start = 1 if (skip_first and len(time) > 0) else 0
with open(path, "a") as f:
for i in range(start, len(time)):
vals = [time[i]] + [data_2d[i, j] for j in range(data_2d.shape[1])]
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


def _append_bng_dat_rows_new(path, time, data_2d, skip_first=True):
start = 1 if (skip_first and len(time) > 0) else 0
with open(path, "a") as f:
for i, t in enumerate(time[start:], start=start):
vals = [t] + [data_2d[i, j] for j in range(data_2d.shape[1])]
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


def _append_bng_dat_rows_new2(path, time, data_2d, skip_first=True):
start = 1 if (skip_first and len(time) > 0) else 0
with open(path, "a") as f:
for i, t in enumerate(time[start:], start=start):
vals = [t] + data_2d[i].tolist()
f.write(" ".join(f"{v:22.12e}" for v in vals) + "\n")


time = np.linspace(0, 100, 10000)
data_2d = np.random.rand(10000, 50)
col_names = [f"S{i}" for i in range(50)]

print("Testing _write_bng_dat:")
t0 = time_mod.time()
_write_bng_dat_original("test_orig.dat", time, data_2d, col_names)
t1 = time_mod.time()
print(f"Original: {t1 - t0:.4f} seconds")

t0 = time_mod.time()
_write_bng_dat_new("test_new.dat", time, data_2d, col_names)
t1 = time_mod.time()
print(f"New (enumerate): {t1 - t0:.4f} seconds")

t0 = time_mod.time()
_write_bng_dat_new2("test_new2.dat", time, data_2d, col_names)
t1 = time_mod.time()
print(f"New2 (enumerate + tolist): {t1 - t0:.4f} seconds")

print("\nTesting _append_bng_dat_rows:")
t0 = time_mod.time()
_append_bng_dat_rows_original("test_orig.dat", time, data_2d)
t1 = time_mod.time()
print(f"Original: {t1 - t0:.4f} seconds")

t0 = time_mod.time()
_append_bng_dat_rows_new("test_new.dat", time, data_2d)
t1 = time_mod.time()
print(f"New (enumerate): {t1 - t0:.4f} seconds")

t0 = time_mod.time()
_append_bng_dat_rows_new2("test_new2.dat", time, data_2d)
t1 = time_mod.time()
print(f"New2 (enumerate + tolist): {t1 - t0:.4f} seconds")

os.remove("test_orig.dat")
os.remove("test_new.dat")
os.remove("test_new2.dat")
52 changes: 52 additions & 0 deletions benchmark_gdiff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import timeit

setup_code = """
class DummyBNGGdiff:
def _get_node_text(self, node):
noded = node["data"]["y:ProxyAutoBoundsNode"]["y:Realizers"]
for key in noded.keys():
if "y:" in key:
return noded[key]["y:NodeLabel"]["#text"]
return None

class OptimizedBNGGdiff:
def _get_node_text(self, node):
noded = node["data"]["y:ProxyAutoBoundsNode"]["y:Realizers"]
for key in noded:
if "y:" in key:
return noded[key]["y:NodeLabel"]["#text"]
return None

node = {
"data": {
"y:ProxyAutoBoundsNode": {
"y:Realizers": {
"dummy1": "test",
"dummy2": "test",
"dummy3": "test",
"dummy4": "test",
"dummy5": "test",
"y:GroupNode": {
"y:NodeLabel": {
"#text": "Success"
}
}
}
}
}
}
dummy = DummyBNGGdiff()
optimized = OptimizedBNGGdiff()
"""

test_dummy = "dummy._get_node_text(node)"
test_optimized = "optimized._get_node_text(node)"

num_runs = 1000000

dummy_time = timeit.timeit(test_dummy, setup=setup_code, number=num_runs)
optimized_time = timeit.timeit(test_optimized, setup=setup_code, number=num_runs)

print(f"Baseline time: {dummy_time:.4f} seconds")
print(f"Optimized time: {optimized_time:.4f} seconds")
print(f"Improvement: {(dummy_time - optimized_time) / dummy_time * 100:.2f}%")
16 changes: 13 additions & 3 deletions bionetgen/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from .core.tools.bngsim_bridge import BNGSIM_AVAILABLE, BNGSIM_VERSION
from .modelapi import bngmodel
from .modelapi.runner import run
from .simulator import sim_getter
from .simulator.simulators import sim_getter

# sympy is an expensive dependency to import. We delay importing the
# SympyOdes helpers until they are actually accessed.
Expand All @@ -20,8 +20,18 @@


def __getattr__(name):
if name == "__version__":
import importlib.metadata

try:
return importlib.metadata.version("bionetgen")
except importlib.metadata.PackageNotFoundError:
from .core.version import get_version

return get_version()

if name in {"SympyOdes", "export_sympy_odes"}:
from .modelapi.sympy_odes import SympyOdes, export_sympy_odes
from .modelapi import sympy_odes

return locals()[name]
return getattr(sympy_odes, name)
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
1 change: 0 additions & 1 deletion bionetgen/assets/get_version_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
while ctr < 100:
ctr += 1
try:
time.sleep(5)
rls_resp = urllib.request.urlopen(rls_url)
print(f"success: {ctr}")
break
Expand Down
1 change: 0 additions & 1 deletion bionetgen/atomizer/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
from .atomizeTool import AtomizeTool
30 changes: 21 additions & 9 deletions bionetgen/atomizer/atomizeTool.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ def __init__(
)
# we generate our defaults first and override it with
# the dictionary first and then the namespace

bng_path = d.bng_path
if self.app is not None and hasattr(self.app, "config"):
if "bionetgen" in self.app.config:
bng_path = self.app.config.get("bionetgen", "bngpath")

config = {
"input": None, # we need this, check at the end and fail if we don't have it
"annotation": False,
Expand All @@ -29,9 +35,7 @@ def __init__(
"convert_units": False, # currently not supported
"atomize": False, # default is flat translation
"pathwaycommons": True, # requires connection so default is false
"bionetgen_analysis": os.path.join(
d.bng_path, "BNG2.pl"
), # TODO: get it from app config
"bionetgen_analysis": os.path.join(bng_path, "BNG2.pl"),
"isomorphism_check": False, # wtf do we do here?
"ignore": False, # wtf do we do here?
"memoized_resolver": False,
Expand All @@ -45,9 +49,7 @@ def __init__(
config["input"] = input_file
# dictionary override
if options_dict is not None:
for key in config:
if key in options_dict:
config[key] = options_dict[key]
config.update({k: v for k, v in options_dict.items() if k in config})
# namespace override
if parser_namespace is not None:
for key in config:
Expand Down Expand Up @@ -77,7 +79,13 @@ def checkConfig(self, config):
"Validating config options", loc=f"{__file__} : AtomizeTool.checkConfig()"
)
options = {}
options["inputFile"] = config["input"] # TODO: ensure this is not None
options["inputFile"] = config["input"]
if options["inputFile"] is None:
self.logger.error(
"Input file is required but was not provided",
loc=f"{__file__} : AtomizeTool.checkConfig()",
)
raise ValueError("Input file is required but was not provided")
conv, useID, naming = ls2b.selectReactionDefinitions(options["inputFile"])
options["outputFile"] = (
config["output"]
Expand Down Expand Up @@ -116,8 +124,12 @@ def checkConfig(self, config):
return options

def run(self):
# TODO: Make atomizer also use cement app logging
# this involves changing a lot of code in atomizer!
# Wire up the atomizer's global logger to the cement app
from bionetgen.atomizer.utils.util import logger as atomizer_logger

atomizer_logger.app = self.app
atomizer_logger.level = self.config["logLevel"]

self.logger.debug("Analyzing SBML file", loc=f"{__file__} : AtomizeTool.run()")
self.returnArray = ls2b.analyzeFile(
self.config["inputFile"],
Expand Down
Loading
Loading