{"id":39917204,"url":"https://github.com/ergs/transmutagen","last_synced_at":"2026-01-18T17:04:48.690Z","repository":{"id":57476954,"uuid":"76492153","full_name":"ergs/transmutagen","owner":"ergs","description":"Transmutation CRAM solver code generator","archived":false,"fork":false,"pushed_at":"2018-03-20T22:33:42.000Z","size":1636,"stargazers_count":7,"open_issues_count":2,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-25T14:57:19.221Z","etag":null,"topics":["code-generation","sympy","transmutation"],"latest_commit_sha":null,"homepage":"http://www.ergs.sc.edu/transmutagen/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ergs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-14T19:55:26.000Z","updated_at":"2025-06-10T00:04:18.000Z","dependencies_parsed_at":"2022-09-14T16:41:19.226Z","dependency_job_id":null,"html_url":"https://github.com/ergs/transmutagen","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ergs/transmutagen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergs%2Ftransmutagen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergs%2Ftransmutagen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergs%2Ftransmutagen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergs%2Ftransmutagen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ergs","download_url":"https://codeload.github.com/ergs/transmutagen/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergs%2Ftransmutagen/sbom","scorecard":{"id":379934,"data":{"date":"2025-08-11","repo":{"name":"github.com/ergs/transmutagen","commit":"16b9467a3bb52914b641e1d9a5de643eb3fff214"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: docker/cram/Dockerfile:1: pin your Docker image by updating ergs/ergs-base to ergs/ergs-base@sha256:ddd8744fc8ecd30d057d3a9ce87e8d80f50eef8c597660405e20ba966bd023e5","Warn: containerImage not pinned by hash: docker/origen_all/Dockerfile:1","Warn: containerImage not pinned by hash: docker/origen_all/Dockerfile-base:4: pin your Docker image by updating ergs/ergs-base to ergs/ergs-base@sha256:ddd8744fc8ecd30d057d3a9ce87e8d80f50eef8c597660405e20ba966bd023e5","Warn: pipCommand not pinned by hash: docker/cram/Dockerfile:13","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-18T15:09:44.871Z","repository_id":57476954,"created_at":"2025-08-18T15:09:44.871Z","updated_at":"2025-08-18T15:09:44.871Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28543656,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generation","sympy","transmutation"],"created_at":"2026-01-18T17:04:48.593Z","updated_at":"2026-01-18T17:04:48.672Z","avatar_url":"https://github.com/ergs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Transmutagen\n\nTransmutation generates CRAM approximations for solving transmutation problems\n\n[![Build Status](https://travis-ci.org/ergs/transmutagen.svg?branch=master)](https://travis-ci.org/ergs/transmutagen)\n\n![logo](logo.png)\n\n# Usage\n\n\nTransmutagen depends on\n\n - mpmath\n - sympy \u003e= 1.1\n - matplotlib\n - numpy\n - scipy\n - pyne\n - jinja2\n - gmpy2\n - Cython\n - scikit-umfpack\n\nTo build transmutagen from source requires GCC. Clang support can be added,\nalthough the py_solve solver generated from Clang is slower than the one from\nGCC, so presently GCC is supported only.\n\n## Generating the CRAM approximation to exp(-x) on [0, oo)\n\nRun\n\n    python -m transmutagen.cram D N\n\nwhere `D` is the degree of the approximation and `N` is the number of digits.\nA typical run would be something like\n\n    python -m transmutagen.cram 14 200\n\nNote that the digits returned are not necessarily all accurate. To compute `N`\ncorrect digits one generally needs to many more working digits in the\ncomputation. Furthermore, when roots are taken, the precision may decrease\neven further. So it is recommend to always compute the CRAM expression with a\nvery high number of digits.\n\nThere are many options, but it is not recommending changing them unless you\nknow what you are doing. See `python -m transmutagen --help`. To\nincrease/reduce the verbosity of the output, use the `--log-level` flag.\n\nIf you use iTerm2, install `iterm2-tools` (from conda-forge) to get plots in\nthe terminal.\n\nNote: all output and plots are logged to the `logs` and `plots` directories.\n\n## Generating solver code\n\nTo generate solver code, use\n\n    python -m transmutagen.gensolve\n\nThis will generate ``solve.c`` and ``solve.h``. Use\n\n    python -m transmutagen.gensolve --help\n\nto see various options, such as how to change the degrees that are generated,\nand the namespace of the generated functions.\n\nThis will use a default list of nuclides and sparsity pattern. To add or\nremove nuclides, modify the JSON file, and pass it in with\n\n    python -m transmutagen.gensolve --json-file gensolve.json\n\nThe format of the JSON file is\n\n``` json\n{\n    \"nucs\": [\"H1\", \"H2\", ...],\n    \"fromto\": [[\"H1\", \"H1\"], [\"H1\", \"H2\"], ...]\n}\n```\n\nWhere ``\"nucs\"`` is a list of nuclides and ``\"fromto\"`` is a list of lists of\nevery possible reaction product pair. Every nuclide should be listed as a\nreaction with itself.\n\nTo generate a JSON file from ORIGEN libraries, run\n\n    python -m transmutagen.generate_json /path/to/origen/libs/ --outfile gensolve.json\n\nThis will save the JSON to ``gensolve.json``. Note that transmutagen comes\nwith a a JSON file generated from ORIGEN in\n``transmutagen/data/gensolve_origen.json`` as well as one generated from PyNE\nin ``transmutagen/data/gensolve.json``.\n\nThe resulting solve.c will have functions\n``{namespace}_expm_multiply{N}(double* A, double* b, double* x)``, where\n``{namespace}`` is the namespace specified by the ``--namespace`` flag to\n``python -m transmutagen.gensolve`` (the default is ``transmutagen``), and\n``{N}`` is the degree of the approximation used in the solve, specified by the\n``--degree`` flag (the default is ``14``). The function computes ``exp(A)*b``\nand stores the result in ``x``.  ``A`` should be in a flattened format,\naccording to the sparsity pattern the solver was generated from.\n\n## Converting ORIGEN libraries to a sparse matrix representation\n\nIf you'd like to convert an origen file to a matrix representation, please\nuse something like:\n\n    python -m transmutagen.tape9sparse ~/origen22/libs/pwru50.lib --decay ~/origen22/libs/decay.lib\n\nSee `--help` and the `transmutagen.tape9utils` docs for more details.\n\n## Running tests against ORIGEN\n\nPut `ORIGEN.zip` in the `docker/origen_all` directory. Then run\n\n    ./docker/origen_all/build_and_run.sh\n\nThis requires the docker daemon to be running, and may require `sudo`. There\nare various options, which you can see with\n\n    ./docker/origen_all/build_and_run.sh --help\n\nThis will run both ORIGEN and transmutagen (CRAM) on a suite of ORIGEN\nlibraries, starting nuclides, and times, writing the results to\n`data/results.hdf5`. The output will also be logged to `logs/origen_all.log`.\nBe warned total suite takes over 24 hours to run.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergs%2Ftransmutagen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fergs%2Ftransmutagen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergs%2Ftransmutagen/lists"}