abacuslite 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. abacuslite-1.1.0/AGENTS.md +50 -0
  2. abacuslite-1.1.0/CHANGELOG.md +56 -0
  3. abacuslite-1.1.0/CONTRIBUTING.md +107 -0
  4. abacuslite-1.1.0/LICENSE +165 -0
  5. abacuslite-1.1.0/MANIFEST.in +8 -0
  6. abacuslite-1.1.0/PKG-INFO +107 -0
  7. abacuslite-1.1.0/README.md +84 -0
  8. abacuslite-1.1.0/UPSTREAM.md +64 -0
  9. abacuslite-1.1.0/docs/README.md +42 -0
  10. abacuslite-1.1.0/docs/compatibility-ci.md +145 -0
  11. abacuslite-1.1.0/docs/design.md +34 -0
  12. abacuslite-1.1.0/docs/migration.md +109 -0
  13. abacuslite-1.1.0/docs/reference.md +107 -0
  14. abacuslite-1.1.0/docs/superpowers/plans/2026-10-16-cross-repository-regressions.md +84 -0
  15. abacuslite-1.1.0/docs/superpowers/plans/2026-10-16-standalone-bootstrap.md +95 -0
  16. abacuslite-1.1.0/docs/superpowers/plans/2026-10-17-1.1.0-release.md +91 -0
  17. abacuslite-1.1.0/docs/superpowers/plans/2026-10-17-abacus-atst-integration-acceptance.md +795 -0
  18. abacuslite-1.1.0/docs/superpowers/plans/2026-10-17-dual-engine-ci.md +152 -0
  19. abacuslite-1.1.0/docs/upstream-integration.md +79 -0
  20. abacuslite-1.1.0/docs/usage.md +113 -0
  21. abacuslite-1.1.0/examples/bandstructure.py +82 -0
  22. abacuslite-1.1.0/examples/cellrelax.py +76 -0
  23. abacuslite-1.1.0/examples/constraintmd.py +101 -0
  24. abacuslite-1.1.0/examples/dos.py +65 -0
  25. abacuslite-1.1.0/examples/md.py +72 -0
  26. abacuslite-1.1.0/examples/metadynamics.py +146 -0
  27. abacuslite-1.1.0/examples/neb.py +112 -0
  28. abacuslite-1.1.0/examples/relax.py +67 -0
  29. abacuslite-1.1.0/examples/scf.py +56 -0
  30. abacuslite-1.1.0/examples/soc.py +64 -0
  31. abacuslite-1.1.0/examples/socketio.py +157 -0
  32. abacuslite-1.1.0/pyproject.toml +47 -0
  33. abacuslite-1.1.0/setup.cfg +4 -0
  34. abacuslite-1.1.0/src/abacuslite/__init__.py +13 -0
  35. abacuslite-1.1.0/src/abacuslite/core.py +1384 -0
  36. abacuslite-1.1.0/src/abacuslite/io/__init__.py +0 -0
  37. abacuslite-1.1.0/src/abacuslite/io/generalio.py +649 -0
  38. abacuslite-1.1.0/src/abacuslite/io/latestio.py +527 -0
  39. abacuslite-1.1.0/src/abacuslite/io/legacyio.py +963 -0
  40. abacuslite-1.1.0/src/abacuslite/utils/__init__.py +0 -0
  41. abacuslite-1.1.0/src/abacuslite/utils/ksampling.py +233 -0
  42. abacuslite-1.1.0/src/abacuslite/xtest.sh +3 -0
  43. abacuslite-1.1.0/src/abacuslite.egg-info/PKG-INFO +107 -0
  44. abacuslite-1.1.0/src/abacuslite.egg-info/SOURCES.txt +86 -0
  45. abacuslite-1.1.0/src/abacuslite.egg-info/dependency_links.txt +1 -0
  46. abacuslite-1.1.0/src/abacuslite.egg-info/requires.txt +11 -0
  47. abacuslite-1.1.0/src/abacuslite.egg-info/top_level.txt +1 -0
  48. abacuslite-1.1.0/tests/conftest.py +35 -0
  49. abacuslite-1.1.0/tests/consumers/test_installed.py +268 -0
  50. abacuslite-1.1.0/tests/fixtures/io/testfiles/input-script +34 -0
  51. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm0-nspin2-multik-cellrelax +315 -0
  52. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm0-nspin2-multik-cellrelax_ +648 -0
  53. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm0-nspin2-multik-relax +254 -0
  54. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm0-nspin2-multik-relax_ +542 -0
  55. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm1-nspin1-multik-scf +135 -0
  56. abacuslite-1.1.0/tests/fixtures/io/testfiles/lcao-symm1-nspin1-multik-scf_ +259 -0
  57. abacuslite-1.1.0/tests/fixtures/io/testfiles/nspin4-gamma-eigocc +80 -0
  58. abacuslite-1.1.0/tests/fixtures/io/testfiles/nspin4-gamma-mddump +22 -0
  59. abacuslite-1.1.0/tests/fixtures/io/testfiles/pw-symm0-nspin4-gamma-md +234 -0
  60. abacuslite-1.1.0/tests/fixtures/io/testfiles/pw-symm0-nspin4-gamma-md_ +409 -0
  61. abacuslite-1.1.0/tests/fixtures/lts_native_md/MD_dump +33 -0
  62. abacuslite-1.1.0/tests/fixtures/lts_native_md/README.md +15 -0
  63. abacuslite-1.1.0/tests/fixtures/lts_native_md/running_md.log +644 -0
  64. abacuslite-1.1.0/tests/fixtures/multiframe_md_latest/MD_dump +22 -0
  65. abacuslite-1.1.0/tests/fixtures/multiframe_md_latest/eig_occ.txt +80 -0
  66. abacuslite-1.1.0/tests/fixtures/multiframe_md_latest/running_md.log +207 -0
  67. abacuslite-1.1.0/tests/fixtures/multiframe_md_legacy/running_md.log +170 -0
  68. abacuslite-1.1.0/tests/fixtures/multiframe_scf_trial_last/INPUT +5 -0
  69. abacuslite-1.1.0/tests/fixtures/multiframe_scf_trial_last/STRU +29 -0
  70. abacuslite-1.1.0/tests/fixtures/multiframe_scf_trial_last/running_scf.log +195 -0
  71. abacuslite-1.1.0/tests/integration/__init__.py +0 -0
  72. abacuslite-1.1.0/tests/integration/common.py +31 -0
  73. abacuslite-1.1.0/tests/integration/test_band.py +62 -0
  74. abacuslite-1.1.0/tests/integration/test_magnetic.py +130 -0
  75. abacuslite-1.1.0/tests/integration/test_md.py +51 -0
  76. abacuslite-1.1.0/tests/integration/test_relax.py +48 -0
  77. abacuslite-1.1.0/tests/integration/test_scf.py +42 -0
  78. abacuslite-1.1.0/tests/integration/xtest.sh +3 -0
  79. abacuslite-1.1.0/tests/unit/test_consumer_contract.py +137 -0
  80. abacuslite-1.1.0/tests/unit/test_core.py +336 -0
  81. abacuslite-1.1.0/tests/unit/test_examples.py +79 -0
  82. abacuslite-1.1.0/tests/unit/test_frame_selection.py +753 -0
  83. abacuslite-1.1.0/tests/unit/test_generalio.py +331 -0
  84. abacuslite-1.1.0/tests/unit/test_ksampling.py +32 -0
  85. abacuslite-1.1.0/tests/unit/test_latestio.py +247 -0
  86. abacuslite-1.1.0/tests/unit/test_legacyio.py +434 -0
  87. abacuslite-1.1.0/tests/unit/test_reader_contract.py +76 -0
  88. abacuslite-1.1.0/tests/unit/test_test_configuration.py +93 -0
@@ -0,0 +1,50 @@
1
+ # abacuslite development
2
+
3
+ ## Goal and scope
4
+
5
+ Maintain one independently installable ABACUS calculator and I/O plugin for ASE.
6
+ Preserve public `abacuslite` imports, upstream attribution and read-only parsing
7
+ while consolidating general-purpose fixes from ABACUS and ATST. Pure file I/O
8
+ must work without an ABACUS executable.
9
+
10
+ ## Upstream and downstream boundaries
11
+
12
+ - ASE supplies calculator contracts and optimization/MD/NEB algorithms.
13
+ - ABACUS owns the engine, output formats, assets and engine integration tests.
14
+ Support develop's newer format and LTS through `legacyio`; bind reader
15
+ selection to each calculator instance, even when LTS has no bundled interface.
16
+ - ATST consumes calculator/I/O behavior and owns workflow and launcher policy.
17
+ - Forge consumes the optional parser and owns its native default and result
18
+ contracts. ATST and Forge are not runtime dependencies of this package.
19
+ - Keep general parser/calculator fixes here. Compatibility adapters may forward
20
+ to this implementation; do not add duplicate parsers, schedulers, workflow
21
+ orchestration or consumer result schemas to the package.
22
+
23
+ ## Development workflow
24
+
25
+ 1. Read [the documentation index](docs/README.md), [design](docs/design.md),
26
+ [module reference](docs/reference.md) and [source provenance](UPSTREAM.md)
27
+ for the affected area. Reuse an applicable plan for coordinated work.
28
+ 2. Make focused, reversible changes within the agreed design. Update the
29
+ relevant design/plan before changing public or cross-repository boundaries;
30
+ continue within approved scope without reopening routine implementation choices.
31
+ 3. Add regressions for observable behavior changes. For behavior-preserving
32
+ extraction or packaging changes, compare baseline and candidate behavior.
33
+ Preserve units, atom order and missing-value meaning. Parsing existing
34
+ output must not modify or delete input/output files.
35
+ 4. Follow [CONTRIBUTING.md](CONTRIBUTING.md) for commands. Default tests are
36
+ offline; real-engine and installed-consumer checks require explicit opt-in
37
+ and supplied dependencies/assets. Validate built wheels outside the source
38
+ checkout; source-only success is not release evidence.
39
+ 5. Test affected develop/LTS and consumer boundaries using the
40
+ [compatibility guide](docs/compatibility-ci.md). Fixture success does not
41
+ establish engine compatibility; report local results, remote CI and merge
42
+ enforcement separately. Validate locally before PR delivery.
43
+ 6. Use English for documentation and new diagnostics/docstrings, retain source
44
+ attribution, and record material compatibility changes in `CHANGELOG.md`.
45
+ Obtain independent review before integration. PyPI publication requires
46
+ validated artifacts and explicit release authorization.
47
+
48
+ Current guidance lives in the root entry documents and `docs/`. Implementation
49
+ plans and dated evidence live in `docs/superpowers/plans/`; historical results
50
+ apply only to their recorded revisions and environments.
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ ## 1.1.0
4
+
5
+ - Provide the independent ASE plugin as a wheel and source distribution with
6
+ unchanged public imports. Preserve the validated runtime from the final
7
+ candidate; the stable release adds packaging, documentation and release gates.
8
+
9
+ - Honor explicit engine/consumer pytest markers and reject unknown markers or
10
+ configuration keys; offline tests no longer depend on checkout directory or
11
+ function names. Validate wheel and sdist tests outside the checkout, and
12
+ include the source-only test launchers in the sdist.
13
+ - Restore the skipped pseudopotential/orbital filename-selection tests with
14
+ self-contained temporary assets, without requiring an ABACUS installation.
15
+ - Give cell relaxation, DOS and metadynamics examples separate calculation
16
+ directories, and use the standard `abacus` command in the NEB default launcher.
17
+ Check default and overridden example settings before engine execution.
18
+ - Preserve explicit ASE atomic velocities in STRU, converting from Angstrom
19
+ per ASE time unit to Bohr per atomic time unit and maintaining species order;
20
+ atoms without velocities retain the existing zero initialization.
21
+ - Prefer `MD_dump` for LTS native MD geometry; retain complete single-file
22
+ `running_md.log` trajectories when no dump exists. Assemble physical
23
+ Angstrom coordinates/cells and periodic ASE frames, recognize unpadded LTS
24
+ ionic-step headers, and reject incomplete geometry or malformed dumps
25
+ without changing SCF/relax output semantics.
26
+ - Align the default SCF structure-identity tolerance with ATST 2.2.9:
27
+ `1e-5` Angstrom for cell components and periodic Cartesian residuals,
28
+ with `rtol=0`. Explicit `atol` overrides remain supported. The former
29
+ `1e-5` to `1e-4` interval is now rejected rather than silently selecting
30
+ a mismatching SCF frame; native relax/MD last-frame selection is unchanged.
31
+ - Establish an independent source package from ABACUS develop `4b92455ca`,
32
+ retaining original attribution, module paths and socket support.
33
+ - Integrate ATST SCF structure-frame matching, periodic equivalence and atom
34
+ mapping validation, actual STRU filename handling, and Fermi-level retention.
35
+ - Correct decimal point-KPT parsing and tolerate absent Fermi levels.
36
+ - Normalize Cartesian log coordinates by the lattice constant when matching
37
+ SCF frames to STRU, for both output readers.
38
+ - Convert latest-format native MD `MD_dump` lattice vectors from alat units to
39
+ Angstrom and mark those ASE frames periodic; dump-reader dictionaries and
40
+ their already-Angstrom Cartesian positions retain their existing units.
41
+ - Keep the upstream read-only `eig_occ.txt` behavior: repeated collection no
42
+ longer consumes the input file. This intentionally differs from old ATST.
43
+ - Isolate each calculator's output-format selection; compatibility switch
44
+ calls affect new bare templates only, not existing calculator instances.
45
+ - Add persistent installed ATST/Forge consumer CI, bidirectional reader
46
+ isolation regressions and a cross-repository compatibility guide.
47
+ - Make all examples accept explicit engine/asset environment settings and
48
+ document source layout, installation and consumer migration.
49
+ - Separate offline tests from opt-in engine tests and package source fixtures.
50
+ - Raise the ASE dependency floor to 3.28 for the supported candidate matrix;
51
+ this release does not claim the old unverified `ase>=3.22` range.
52
+
53
+ Publication status and artifact identities are recorded in the
54
+ [release record](docs/superpowers/plans/2026-10-17-1.1.0-release.md).
55
+ Existing consumers must validate their installed integration
56
+ before removing vendored implementations or changing production dependencies.
@@ -0,0 +1,107 @@
1
+ # Contributing
2
+
3
+ General ASE calculator and ABACUS I/O fixes belong in this package. ABACUS
4
+ owns the engine and its integration harness; ATST owns workflow and launcher
5
+ policy. See the [integration audit](docs/upstream-integration.md) and
6
+ [cross-repository CI guide](docs/compatibility-ci.md) before changing a boundary.
7
+
8
+ ## Development setup
9
+
10
+ From the repository root in a suitable Python environment:
11
+
12
+ ```bash
13
+ python -m pip install -e '.[dev]'
14
+ python -m pytest -q
15
+ ```
16
+
17
+ The default suite is offline; engine and external-consumer tests are opt-in.
18
+ `tests/integration/` is marked `engine`, and `tests/consumers/` is marked
19
+ `consumer`. Tests elsewhere must use `@pytest.mark.engine` or
20
+ `@pytest.mark.consumer` when they need those resources; function names and
21
+ checkout directory names do not select a test tier. Unknown markers and
22
+ pytest configuration keys fail validation. `-m engine` selects tests but does
23
+ not enable execution without `--run-engine`.
24
+
25
+ Editable installs are appropriate for development. For acceptance, build wheel
26
+ and sdist distributions and check their metadata:
27
+
28
+ ```bash
29
+ python -m build
30
+ python -m twine check --strict dist/*
31
+ ```
32
+
33
+ Install the built wheel and pytest in a fresh environment, run `pip check`,
34
+ and copy `tests/`, `examples/` and `pyproject.toml` to a directory outside the
35
+ source checkout. Run `python -m pytest -q` there without a source `PYTHONPATH`.
36
+ Verify that `abacuslite.__file__` resolves inside that environment; the
37
+ [migration guide](docs/migration.md#install-one-implementation) provides the
38
+ check. Include `examples/` because offline tests verify their startup. Repeat
39
+ with a wheel rebuilt from the sdist when validating distribution changes.
40
+ Use the tests, examples and configuration extracted from that sdist for the
41
+ second run, so missing distribution files cannot be masked by the checkout.
42
+ CI uses this layout for Python 3.10 with the declared direct dependency floors
43
+ and Python 3.12 with current dependencies. Tests and examples ship in the
44
+ sdist; the wheel contains the runtime package only.
45
+ Use `python -I -m pytest -q` for artifact validation: example subprocesses
46
+ preserve isolated mode and check that a conflicting `PYTHONPATH` is ignored.
47
+
48
+ ## Engine and consumer checks
49
+
50
+ For the package's opt-in engine tests, supply the matching ABACUS build and
51
+ the tests' named pseudopotential/orbital assets:
52
+
53
+ ```bash
54
+ export ABACUS_COMMAND='mpirun -np 2 abacus'
55
+ export ABACUS_PP_ORB=/absolute/path/to/ABACUS/tests/PP_ORB
56
+ export OMP_NUM_THREADS=1
57
+ python -m pytest --run-engine -m engine -q
58
+ ```
59
+
60
+ These imported tests contain engine-specific references and do not replace the
61
+ stronger two-format engine harness. Consult the [compatibility guide](docs/compatibility-ci.md)
62
+ for installed ATST/Forge checks, current develop/LTS evidence and pending CI
63
+ work. Fixture or example-startup success alone is not real-engine acceptance.
64
+
65
+ ## Changes and review
66
+
67
+ Add a regression for the observable bug, with a small attributed fixture when
68
+ output formats matter. Preserve units,
69
+ atom ordering, missing-value meaning, readonly parsing and public imports.
70
+ Validate the built wheel, not only editable source. For a parser or calculator
71
+ change, identify affected supported engine versions and consumers and collect
72
+ real-engine evidence where needed before release.
73
+
74
+ CI and fixtures are part of the contract: explain changed expectations and
75
+ link paired repository PRs. Internal refactoring is welcome when the behavior
76
+ continues to pass. Breaking public behavior needs an explicit migration and
77
+ versioning decision; do not silently weaken existing assertions.
78
+
79
+ Historical implementation evidence is retained in the
80
+ [bootstrap record](docs/superpowers/plans/2026-10-16-standalone-bootstrap.md)
81
+ and [installed-consumer CI record](docs/superpowers/plans/2026-10-16-cross-repository-regressions.md).
82
+ Current engine/consumer results and subsequent plans are linked from the
83
+ compatibility guide.
84
+
85
+ ## Releasing
86
+
87
+ Stable releases require explicit maintainer authorization, reviewed changes,
88
+ installed-wheel/sdist checks and successful `Package tests` for the release
89
+ tag. Preserve affected develop/LTS and consumer evidence. Set the version in
90
+ `pyproject.toml`, update the changelog, and merge the reviewed source into main
91
+ before creating its `vMAJOR.MINOR.PATCH` tag. Never move a published tag or
92
+ replace a published distribution.
93
+
94
+ The manual `Publish to PyPI` workflow must run from main. Supply the stable tag
95
+ and the successful **tag push** run ID of `Package tests`. It checks the source
96
+ repository, workflow, event, revision, main ancestry and artifact versions,
97
+ then publishes that run's `distributions-3.12` artifact without rebuilding.
98
+ Only the upload job receives OIDC permission. The `pypi` GitHub environment
99
+ must match a PyPI Trusted Publisher for owner `QuantumMisaka`, repository
100
+ `abacuslite`, workflow `publish.yml`, environment `pypi`. A first release uses
101
+ a pending publisher configured by the maintainer in their PyPI account.
102
+
103
+ After upload, compare PyPI's SHA256 digests with the workflow summary and
104
+ verify `pip install abacuslite==VERSION` and `pip check` in a fresh environment.
105
+ If an upload partially succeeds, inspect the registry before retrying; do not
106
+ silently skip conflicting artifacts. Keep the release's source/run IDs and
107
+ verification evidence in its record under `docs/superpowers/plans/`.
@@ -0,0 +1,165 @@
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+ This version of the GNU Lesser General Public License incorporates
10
+ the terms and conditions of version 3 of the GNU General Public
11
+ License, supplemented by the additional permissions listed below.
12
+
13
+ 0. Additional Definitions.
14
+
15
+ As used herein, "this License" refers to version 3 of the GNU Lesser
16
+ General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+ General Public License.
18
+
19
+ "The Library" refers to a covered work governed by this License,
20
+ other than an Application or a Combined Work as defined below.
21
+
22
+ An "Application" is any work that makes use of an interface provided
23
+ by the Library, but which is not otherwise based on the Library.
24
+ Defining a subclass of a class defined by the Library is deemed a mode
25
+ of using an interface provided by the Library.
26
+
27
+ A "Combined Work" is a work produced by combining or linking an
28
+ Application with the Library. The particular version of the Library
29
+ with which the Combined Work was made is also called the "Linked
30
+ Version".
31
+
32
+ The "Minimal Corresponding Source" for a Combined Work means the
33
+ Corresponding Source for the Combined Work, excluding any source code
34
+ for portions of the Combined Work that, considered in isolation, are
35
+ based on the Application, and not on the Linked Version.
36
+
37
+ The "Corresponding Application Code" for a Combined Work means the
38
+ object code and/or source code for the Application, including any data
39
+ and utility programs needed for reproducing the Combined Work from the
40
+ Application, but excluding the System Libraries of the Combined Work.
41
+
42
+ 1. Exception to Section 3 of the GNU GPL.
43
+
44
+ You may convey a covered work under sections 3 and 4 of this License
45
+ without being bound by section 3 of the GNU GPL.
46
+
47
+ 2. Conveying Modified Versions.
48
+
49
+ If you modify a copy of the Library, and, in your modifications, a
50
+ facility refers to a function or data to be supplied by an Application
51
+ that uses the facility (other than as an argument passed when the
52
+ facility is invoked), then you may convey a copy of the modified
53
+ version:
54
+
55
+ a) under this License, provided that you make a good faith effort to
56
+ ensure that, in the event an Application does not supply the
57
+ function or data, the facility still operates, and performs
58
+ whatever part of its purpose remains meaningful, or
59
+
60
+ b) under the GNU GPL, with none of the additional permissions of
61
+ this License applicable to that copy.
62
+
63
+ 3. Object Code Incorporating Material from Library Header Files.
64
+
65
+ The object code form of an Application may incorporate material from
66
+ a header file that is part of the Library. You may convey such object
67
+ code under terms of your choice, provided that, if the incorporated
68
+ material is not limited to numerical parameters, data structure
69
+ layouts and accessors, or small macros, inline functions and templates
70
+ (ten or fewer lines in length), you do both of the following:
71
+
72
+ a) Give prominent notice with each copy of the object code that the
73
+ Library is used in it and that the Library and its use are
74
+ covered by this License.
75
+
76
+ b) Accompany the object code with a copy of the GNU GPL and this license
77
+ document.
78
+
79
+ 4. Combined Works.
80
+
81
+ You may convey a Combined Work under terms of your choice that,
82
+ taken together, effectively do not restrict modification of the
83
+ portions of the Library contained in the Combined Work and reverse
84
+ engineering for debugging such modifications, if you also do each of
85
+ the following:
86
+
87
+ a) Give prominent notice with each copy of the Combined Work that
88
+ the Library is used in it and that the Library and its use are
89
+ covered by this License.
90
+
91
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+ document.
93
+
94
+ c) For a Combined Work that displays copyright notices during
95
+ execution, include the copyright notice for the Library among
96
+ these notices, as well as a reference directing the user to the
97
+ copies of the GNU GPL and this license document.
98
+
99
+ d) Do one of the following:
100
+
101
+ 0) Convey the Minimal Corresponding Source under the terms of this
102
+ License, and the Corresponding Application Code in a form
103
+ suitable for, and under terms that permit, the user to
104
+ recombine or relink the Application with a modified version of
105
+ the Linked Version to produce a modified Combined Work, in the
106
+ manner specified by section 6 of the GNU GPL for conveying
107
+ Corresponding Source.
108
+
109
+ 1) Use a suitable shared library mechanism for linking with the
110
+ Library. A suitable mechanism is one that (a) uses at run time
111
+ a copy of the Library already present on the user's computer
112
+ system, and (b) will operate properly with a modified version
113
+ of the Library that is interface-compatible with the Linked
114
+ Version.
115
+
116
+ e) Provide Installation Information, but only if you would otherwise
117
+ be required to provide such information under section 6 of the
118
+ GNU GPL, and only to the extent that such information is
119
+ necessary to install and execute a modified version of the
120
+ Combined Work produced by recombining or relinking the
121
+ Application with a modified version of the Linked Version. (If
122
+ you use option 4d0, the Installation Information must accompany
123
+ the Minimal Corresponding Source and Corresponding Application
124
+ Code. If you use option 4d1, you must provide the Installation
125
+ Information in the manner specified by section 6 of the GNU GPL
126
+ for conveying Corresponding Source.)
127
+
128
+ 5. Combined Libraries.
129
+
130
+ You may place library facilities that are a work based on the
131
+ Library side by side in a single library together with other library
132
+ facilities that are not Applications and are not covered by this
133
+ License, and convey such a combined library under terms of your
134
+ choice, if you do both of the following:
135
+
136
+ a) Accompany the combined library with a copy of the same work based
137
+ on the Library, uncombined with any other library facilities,
138
+ conveyed under the terms of this License.
139
+
140
+ b) Give prominent notice with the combined library that part of it
141
+ is a work based on the Library, and explaining where to find the
142
+ accompanying uncombined form of the same work.
143
+
144
+ 6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+ The Free Software Foundation may publish revised and/or new versions
147
+ of the GNU Lesser General Public License from time to time. Such new
148
+ versions will be similar in spirit to the present version, but may
149
+ differ in detail to address new problems or concerns.
150
+
151
+ Each version is given a distinguishing version number. If the
152
+ Library as you received it specifies that a certain numbered version
153
+ of the GNU Lesser General Public License "or any later version"
154
+ applies to it, you have the option of following the terms and
155
+ conditions either of that published version or of any later version
156
+ published by the Free Software Foundation. If the Library as you
157
+ received it does not specify a version number of the GNU Lesser
158
+ General Public License, you may choose any version of the GNU Lesser
159
+ General Public License ever published by the Free Software Foundation.
160
+
161
+ If the Library as you received it specifies that a proxy can decide
162
+ whether future versions of the GNU Lesser General Public License shall
163
+ apply, that proxy's public statement of acceptance of any version is
164
+ permanent authorization for you to choose that version for the
165
+ Library.
@@ -0,0 +1,8 @@
1
+ include CONTRIBUTING.md
2
+ include LICENSE UPSTREAM.md CHANGELOG.md AGENTS.md
3
+ include src/abacuslite/xtest.sh
4
+ recursive-include tests *.py *.sh
5
+ recursive-include tests/fixtures *
6
+ recursive-include examples *.py
7
+ recursive-include docs *.md
8
+ global-exclude __pycache__ *.py[cod]
@@ -0,0 +1,107 @@
1
+ Metadata-Version: 2.4
2
+ Name: abacuslite
3
+ Version: 1.1.0
4
+ Summary: A lightweight ABACUS calculator and I/O plugin for ASE
5
+ Author: Yuyang Ji, Zhenxiong Shen, Yike Huang, Zhaoqing Liu
6
+ License-Expression: LGPL-3.0-only
7
+ Project-URL: Homepage, https://github.com/QuantumMisaka/abacuslite
8
+ Project-URL: Documentation, https://github.com/QuantumMisaka/abacuslite/tree/main/docs
9
+ Project-URL: Issues, https://github.com/QuantumMisaka/abacuslite/issues
10
+ Requires-Python: >=3.10
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: ase<4,>=3.28
14
+ Requires-Dist: numpy<3,>=1.26
15
+ Requires-Dist: seekpath<3,>=2.2
16
+ Provides-Extra: test
17
+ Requires-Dist: pytest<10,>=8; extra == "test"
18
+ Provides-Extra: dev
19
+ Requires-Dist: pytest<10,>=8; extra == "dev"
20
+ Requires-Dist: build>=1.2; extra == "dev"
21
+ Requires-Dist: twine>=6; extra == "dev"
22
+ Dynamic: license-file
23
+
24
+ # abacuslite
25
+
26
+ A lightweight [ABACUS](https://github.com/deepmodeling/abacus-develop) calculator
27
+ and I/O plugin for [ASE](https://ase-lib.org/), combining the ABACUS interface
28
+ with general-purpose fixes from [ATST](https://github.com/QuantumMisaka/atst-tools).
29
+ It preserves the existing `abacuslite` imports and works without patching ASE.
30
+
31
+ Use it for energy, forces and stress in ASE calculations, or to read and write
32
+ ABACUS files without launching an engine. Both develop's newer output format
33
+ and LTS v3.10.x are supported; the fixed-cell socket calculator requires an
34
+ engine with socket support.
35
+
36
+ **Release line:** `1.1.0`. Local develop/LTS interface checks have passed;
37
+ dual-engine PR CI is still planned. See the [compatibility record](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/compatibility-ci.md)
38
+ for tested snapshots and the [release record](https://github.com/QuantumMisaka/abacuslite/blob/main/docs/superpowers/plans/2026-10-17-1.1.0-release.md)
39
+ for publication status.
40
+
41
+ ## Installation
42
+
43
+ Requires **Python 3.10+** and **ASE 3.28+ (<4)**. From a POSIX shell:
44
+
45
+ ```bash
46
+ python3 -m venv .venv
47
+ source .venv/bin/activate
48
+ python -m pip install 'abacuslite==1.1.0'
49
+ python -m pip check
50
+ ```
51
+
52
+ Pip installs ASE, NumPy and seekpath. ABACUS and its pseudopotential/orbital
53
+ assets are supplied separately. Existing environments and callers should
54
+ follow the [migration guide](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/migration.md).
55
+
56
+ ## Quick start
57
+
58
+ Read an existing ABACUS input file without an engine:
59
+
60
+ ```python
61
+ from abacuslite.io.generalio import read_input
62
+
63
+ parameters = read_input("INPUT")
64
+ print(parameters)
65
+ ```
66
+
67
+ Examples are distributed in the source release. For a real calculation,
68
+ get the matching checkout, configure the engine and assets, and run an example:
69
+
70
+ ```bash
71
+ git clone --branch v1.1.0 https://github.com/QuantumMisaka/abacuslite.git
72
+ cd abacuslite
73
+ export ABACUS_COMMAND='mpirun -np 2 abacus'
74
+ export ABACUS_PP_ORB=/absolute/path/to/ABACUS/tests/PP_ORB
75
+ export OMP_NUM_THREADS=1
76
+ python examples/scf.py
77
+ ```
78
+
79
+ This example uses `genelpa`; select a solver supported by your ABACUS build.
80
+ The [usage guide](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/usage.md) lists required assets, example cleanup behavior,
81
+ calculator configuration and the complete example collection.
82
+
83
+ ## Documentation
84
+
85
+ See the [documentation index](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/README.md) for current guides and development records.
86
+
87
+ | Task | Guide |
88
+ | --- | --- |
89
+ | Configure calculators, read output, run examples | [Usage](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/usage.md) |
90
+ | Migrate ABACUS/ATST callers | [Migration](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/migration.md) |
91
+ | Set up development, run tests and validate packages | [Contributing](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/CONTRIBUTING.md) |
92
+ | Understand modules and package boundaries | [Module reference](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/reference.md) |
93
+ | Check supported engines, CI and acceptance evidence | [Compatibility](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/compatibility-ci.md) |
94
+ | Review changes and source attribution | [Changelog](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/CHANGELOG.md), [provenance](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/UPSTREAM.md) |
95
+
96
+ ## Authors and maintenance
97
+
98
+ - [Yuyang Ji (@jiyuyang)](https://github.com/jiyuyang)
99
+ - [Zhenxiong Shen (@Shen-Zhen-Xiong)](https://github.com/Shen-Zhen-Xiong)
100
+ - [Yike Huang (@kirk0830)](https://github.com/kirk0830)
101
+ - [Zhaoqing Liu (@QuantumMisaka)](https://github.com/QuantumMisaka)
102
+
103
+ The independent package is maintained by QuantumMisaka. Thanks to the ABACUS
104
+ and ATST contributors; original attribution is preserved in [UPSTREAM.md](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/UPSTREAM.md).
105
+
106
+ Licensed under [LGPL-3.0-only](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/LICENSE). Report plugin issues at
107
+ [QuantumMisaka/abacuslite](https://github.com/QuantumMisaka/abacuslite/issues).
@@ -0,0 +1,84 @@
1
+ # abacuslite
2
+
3
+ A lightweight [ABACUS](https://github.com/deepmodeling/abacus-develop) calculator
4
+ and I/O plugin for [ASE](https://ase-lib.org/), combining the ABACUS interface
5
+ with general-purpose fixes from [ATST](https://github.com/QuantumMisaka/atst-tools).
6
+ It preserves the existing `abacuslite` imports and works without patching ASE.
7
+
8
+ Use it for energy, forces and stress in ASE calculations, or to read and write
9
+ ABACUS files without launching an engine. Both develop's newer output format
10
+ and LTS v3.10.x are supported; the fixed-cell socket calculator requires an
11
+ engine with socket support.
12
+
13
+ **Release line:** `1.1.0`. Local develop/LTS interface checks have passed;
14
+ dual-engine PR CI is still planned. See the [compatibility record](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/compatibility-ci.md)
15
+ for tested snapshots and the [release record](https://github.com/QuantumMisaka/abacuslite/blob/main/docs/superpowers/plans/2026-10-17-1.1.0-release.md)
16
+ for publication status.
17
+
18
+ ## Installation
19
+
20
+ Requires **Python 3.10+** and **ASE 3.28+ (<4)**. From a POSIX shell:
21
+
22
+ ```bash
23
+ python3 -m venv .venv
24
+ source .venv/bin/activate
25
+ python -m pip install 'abacuslite==1.1.0'
26
+ python -m pip check
27
+ ```
28
+
29
+ Pip installs ASE, NumPy and seekpath. ABACUS and its pseudopotential/orbital
30
+ assets are supplied separately. Existing environments and callers should
31
+ follow the [migration guide](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/migration.md).
32
+
33
+ ## Quick start
34
+
35
+ Read an existing ABACUS input file without an engine:
36
+
37
+ ```python
38
+ from abacuslite.io.generalio import read_input
39
+
40
+ parameters = read_input("INPUT")
41
+ print(parameters)
42
+ ```
43
+
44
+ Examples are distributed in the source release. For a real calculation,
45
+ get the matching checkout, configure the engine and assets, and run an example:
46
+
47
+ ```bash
48
+ git clone --branch v1.1.0 https://github.com/QuantumMisaka/abacuslite.git
49
+ cd abacuslite
50
+ export ABACUS_COMMAND='mpirun -np 2 abacus'
51
+ export ABACUS_PP_ORB=/absolute/path/to/ABACUS/tests/PP_ORB
52
+ export OMP_NUM_THREADS=1
53
+ python examples/scf.py
54
+ ```
55
+
56
+ This example uses `genelpa`; select a solver supported by your ABACUS build.
57
+ The [usage guide](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/usage.md) lists required assets, example cleanup behavior,
58
+ calculator configuration and the complete example collection.
59
+
60
+ ## Documentation
61
+
62
+ See the [documentation index](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/README.md) for current guides and development records.
63
+
64
+ | Task | Guide |
65
+ | --- | --- |
66
+ | Configure calculators, read output, run examples | [Usage](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/usage.md) |
67
+ | Migrate ABACUS/ATST callers | [Migration](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/migration.md) |
68
+ | Set up development, run tests and validate packages | [Contributing](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/CONTRIBUTING.md) |
69
+ | Understand modules and package boundaries | [Module reference](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/reference.md) |
70
+ | Check supported engines, CI and acceptance evidence | [Compatibility](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/docs/compatibility-ci.md) |
71
+ | Review changes and source attribution | [Changelog](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/CHANGELOG.md), [provenance](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/UPSTREAM.md) |
72
+
73
+ ## Authors and maintenance
74
+
75
+ - [Yuyang Ji (@jiyuyang)](https://github.com/jiyuyang)
76
+ - [Zhenxiong Shen (@Shen-Zhen-Xiong)](https://github.com/Shen-Zhen-Xiong)
77
+ - [Yike Huang (@kirk0830)](https://github.com/kirk0830)
78
+ - [Zhaoqing Liu (@QuantumMisaka)](https://github.com/QuantumMisaka)
79
+
80
+ The independent package is maintained by QuantumMisaka. Thanks to the ABACUS
81
+ and ATST contributors; original attribution is preserved in [UPSTREAM.md](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/UPSTREAM.md).
82
+
83
+ Licensed under [LGPL-3.0-only](https://github.com/QuantumMisaka/abacuslite/blob/v1.1.0/LICENSE). Report plugin issues at
84
+ [QuantumMisaka/abacuslite](https://github.com/QuantumMisaka/abacuslite/issues).
@@ -0,0 +1,64 @@
1
+ # Source provenance
2
+
3
+ Initial snapshot imported from `deepmodeling/abacus-develop`,
4
+ `interfaces/ASE_interface`, commit
5
+ `4b92455cab1b1a51e8534b7eb869798ae1241b1b` (2026-10-16).
6
+
7
+ Original repository: https://github.com/deepmodeling/abacus-develop
8
+ Original history: https://github.com/deepmodeling/abacus-develop/commits/4b92455cab1b1a51e8534b7eb869798ae1241b1b/interfaces/ASE_interface
9
+
10
+ This is a snapshot import; the original Git history is linked, not rewritten
11
+ or claimed as newly authored. Original author notices are retained. The root
12
+ LICENSE is copied from the same ABACUS commit. ATST adaptations are recorded below with their source and regression evidence.
13
+
14
+ ## Integrated ATST adaptations
15
+
16
+ Source: https://github.com/QuantumMisaka/atst-tools/tree/45d8c78de8a605c127cd4c36742d0c9525a0a6b6
17
+
18
+ The SCF frame helpers, template input/result handling, point-KPT reader,
19
+ missing-Fermi tolerance, frame-selection regressions and multiframe fixtures
20
+ are adapted from `src/atst_tools/external/ASE_interface` and `tests/unit`
21
+ at that revision. ATST authorship and its LGPL-3.0-or-later licensing are
22
+ acknowledged; the combined distribution retains the ABACUS LGPL-3.0 terms.
23
+ The older ATST implementation does not replace the newer ABACUS socket or
24
+ execution diagnostics. The upstream non-destructive `eig_occ.txt` reader is
25
+ retained, and its repeatability is tested.
26
+
27
+ The independent package additionally isolates calculator reader selection
28
+ from the compatibility global default. Behavioral changes and validation
29
+ are recorded in CHANGELOG.md and the implementation plan.
30
+
31
+ ## Independent maintenance after the source import
32
+
33
+ The LTS native-MD compatibility correction in `generalio.py` and `legacyio.py`
34
+ is maintained by the independent package after the ABACUS snapshot. STRU
35
+ velocity conversion follows the ABACUS develop
36
+ `source/source_md/md_func.cpp` and LTS `source/module_md/md_func.cpp` contract:
37
+ the MD dump writes internal atomic-unit velocity divided by
38
+ `ANGSTROM_AU * AU_to_FS` as Angstrom/fs. The real, unchanged v3.10.1 output
39
+ in `tests/fixtures/lts_native_md` and focused unit regressions establish
40
+ three-frame MD dump assembly, original-byte preservation and explicit failure
41
+ for incomplete log-only trajectories or incomplete dumps. Earlier complete
42
+ single-file `running_md.log` trajectories remain supported when `MD_dump` is
43
+ absent. Existing SCF/relax geometry assembly remains on the legacy running-log
44
+ path.
45
+
46
+ The default SCF identity tolerance is aligned with ATST 2.2.9 at
47
+ `1081b9d1fed06842ee1d95dfbeb542ed81c57d49`: `1e-5` Angstrom, no relative
48
+ tolerance, with explicit caller overrides retained. Boundary regressions
49
+ exercise cell and position differences of `9e-6`, `11e-6` and `5e-5` Angstrom.
50
+ Other implementation differences are not overwritten by this synchronization.
51
+
52
+ The latest-format native MD cell conversion in `src/abacuslite/io/latestio.py`
53
+ is an independent abacuslite correction made after the attributed ABACUS
54
+ snapshot and ATST adaptations. The real two-frame
55
+ `tests/fixtures/multiframe_md_latest` regression checks the dump-reader
56
+ dictionary contract and the assembled ASE cell, positions, volume and energies.
57
+ Only the latest-format native MD frames are additionally marked periodic.
58
+ The legacy running-log reader already converts its cell to Angstrom and is
59
+ unchanged by this correction.
60
+
61
+ Additional generic fixed-density, native version-probe and backup-suffix
62
+ regressions are adapted from ATST `tests/unit/test_abacuslite_profile.py` at
63
+ the same revision. The [integration audit](docs/upstream-integration.md) maps
64
+ all substantive source differences to retained behavior and test ownership.