Skip to content

Conversation

Constant206462
Copy link

@Constant206462 Constant206462 commented Sep 20, 2025

Making it possible to use cp.x to calculate energy and forces for structures returned by model_devi.
The cp.x input file at the 02.fp stage is created based on a provided template. This fp style still uses POSCAR for initial system configurations.

Summary by CodeRabbit

  • New Features

    • Added support for Quantum ESPRESSO Car–Parrinello (cp.x) FP style ("cpx") enabling template-driven CP runs and result collection.
  • Documentation

    • Added a CPMD (Quantum ESPRESSO cp.x) FP interface guide with usage, templating placeholders, pseudopotential and electron-dynamics guidance; note: the section appears duplicated.
  • Examples

    • Included QE‑CPX example inputs, POSCAR examples, and workflow parameter/machine templates for cp.x.
  • Tests

    • Added CPX-focused tests and included QE‑CPX configs in example checks.

@Constant206462
Copy link
Author

Heavily relies on this issue being solved deepmodeling/dpdata#899.

Copy link

codecov bot commented Sep 20, 2025

Codecov Report

❌ Patch coverage is 52.70270% with 35 lines in your changes missing coverage. Please review.
✅ Project coverage is 49.81%. Comparing base (6a410eb) to head (a78b356).

Files with missing lines Patch % Lines
dpgen/generator/run.py 49.27% 35 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##            devel    #1821      +/-   ##
==========================================
+ Coverage   49.80%   49.81%   +0.01%     
==========================================
  Files          83       83              
  Lines       14904    14978      +74     
==========================================
+ Hits         7423     7462      +39     
- Misses       7481     7516      +35     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Member

@njzjz njzjz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for contribution. I have two suggestions:

(1) Add some information to documentation: https://github.com/deepmodeling/dpgen/blob/devel/doc/overview/supported-software.md

(2) Add your example to https://github.com/deepmodeling/dpgen/blob/devel/tests/test_check_examples.py

Copy link
Collaborator

@Yi-FanLi Yi-FanLi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The only thing missing is to add it to the document and test check as @njzjz mentioned. Otherwise this PR looks clear and good to me.

@Constant206462
Copy link
Author

Thank you for approving this. Would this doc be fine? @njzjz

CPMD (Quantum ESPRESSO)

{dargs:argument}fp_style <run_jdata/fp_style>: cpx

CPMD (Car-Parrinello Molecular Dynamics) is another integration from Quantum ESPRESSO suite, specifically the cp.x executable. This interface is well-suited for calculating energies and forces of various types of structures, even large molecules, using Car-Parrinello method. It utilizes a plane-wave basis set and pseudopotentials, optimized for efficient molecular dynamics simulations.

To use it with DP-GEN, one must prepare a template for the cp.x program configured for an electron relaxation procedure to obtain accurate ground-state properties, which is usually achieved after several tens to several hundred minimization steps. Be cautious to set iprint equal to nstep to ensure the output contains the final relaxed structure and its properties. Other key configuration requirements for the template are: both ATOMIC_POSITIONS and CELL_PARAMETERS cards must contain the {angstrom} keyword; the %POSITIONS% string must be in place of actual atomic coordinates, while the %CELL% string must be in place of actual cell vectors. It is also recommended to use absolute path for pseudopotentials. Ensure proper pseudopotential selection and electron dynamics configuration for reliable results.

And did I get it right, that I just need to add
(run_jdata, p_examples / "qe-cpx" / "run_param.json"),
(run_mdata, p_examples / "qe-cpx" / "run_machine.json"),
to the input_files tuple for the test check?

@njzjz
Copy link
Member

njzjz commented Sep 28, 2025

@Constant206462 please commit the changes!

Copy link
Contributor

coderabbitai bot commented Sep 28, 2025

📝 Walkthrough

Walkthrough

Adds Quantum ESPRESSO Car–Parrinello (cp.x / "cpx") FP support: new fp_style schema, input rendering, execution routing, and post-processing. Includes QE-CPX example inputs/templates/POSCARs, run JSONs, tests, and a duplicated CPMD/QE-cp.x block in documentation.

Changes

Cohort / File(s) Summary of changes
Documentation: Supported software
doc/overview/supported-software.md
Adds a CPMD / QE cp.x FP section describing usage, template placeholders (%POSITIONS%, %CELL%, {angstrom}) and settings; the section is duplicated (identical block appears twice).
FP style argument schema
dpgen/generator/arginfo.py
Adds fp_style_cpx_args() to declare CPX fp parameters (fp_params with input_fn, template_fn) and registers the "cpx" variant in fp_style_variant_type_args().
FP workflow integration
dpgen/generator/run.py
Implements CPX support: make_fp_cpx() to render cp.x inputs from POSCAR/templates, post_fp_cpx() to collect/serialize results, and wires "cpx" through make/run/post flows analogous to other FP backends.
Examples: QE-CPX inputs and configs
examples/qe-cpx/*
examples/qe-cpx/POSCAR_SiO2-phosph, examples/qe-cpx/POSCAR_phosphorene, examples/qe-cpx/qe_template_P.in, examples/qe-cpx/qe_template_SiO2P.in, examples/qe-cpx/run_machine.json, examples/qe-cpx/run_param.json
Adds POSCAR files, cp.x input templates with %POSITIONS%/%CELL% placeholders, and example run_machine.json / run_param.json demonstrating fp_style: cpx and fp_params usage.
Tests: generator and examples
tests/generator/*, tests/test_check_examples.py
tests/generator/param-pyridine-cpx.json, tests/generator/cpx_pyridine_template.in, tests/generator/test_make_fp.py, tests/generator/context.py
Adds CPX test fixtures and configs: new test param JSON, template input, updated test context constant, CPX-focused test class and checks; registers QE-CPX examples in example validation.
Example registration in tests
tests/test_check_examples.py
Registers examples/qe-cpx/run_param.json and examples/qe-cpx/run_machine.json in example validation inputs.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant DPGEN as DPGEN Orchestrator
  participant ArgInfo as Arg Parser
  participant Runner as FP Runner
  participant QE as Quantum ESPRESSO (cp.x)

  User->>DPGEN: submit job with fp_style="cpx"
  DPGEN->>ArgInfo: parse fp_style variant
  ArgInfo-->>DPGEN: cpx(fp_params:{input_fn, template_fn})

  rect rgb(200,230,255)
    note right of DPGEN: Input generation (make_fp_cpx)
    DPGEN->>Runner: make_fp_cpx(iter, jdata)
    Runner->>Runner: render template (%POSITIONS% / %CELL%)
    Runner-->>DPGEN: generated P.in + aux files
  end

  rect rgb(200,255,200)
    note right of DPGEN: Execution
    DPGEN->>QE: cp.x -in P.in
    QE-->>DPGEN: output files
  end

  rect rgb(255,240,200)
    note right of DPGEN: Post-processing (post_fp_cpx)
    DPGEN->>Runner: post_fp_cpx(iter, jdata)
    Runner-->>DPGEN: serialized FP results
    DPGEN-->>User: FP task completion
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title accurately and concisely describes the primary change of the pull request, namely adding support for a new fp_style "cpx" variant for Quantum Espresso Car-Parrinello cp.x, matching the implementation details and scope of the changeset.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 10de8f8 and b0a6ed4.

📒 Files selected for processing (10)
  • doc/overview/supported-software.md (1 hunks)
  • dpgen/generator/arginfo.py (2 hunks)
  • dpgen/generator/run.py (5 hunks)
  • examples/qe-cpx/POSCAR_SiO2-phosph (1 hunks)
  • examples/qe-cpx/POSCAR_phosphorene (1 hunks)
  • examples/qe-cpx/qe_template_P.in (1 hunks)
  • examples/qe-cpx/qe_template_SiO2P.in (1 hunks)
  • examples/qe-cpx/run_machine.json (1 hunks)
  • examples/qe-cpx/run_param.json (1 hunks)
  • tests/test_check_examples.py (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
dpgen/generator/run.py (2)
dpgen/generator/lib/utils.py (1)
  • make_iter_name (16-17)
dpgen/util.py (1)
  • set_directory (163-186)
🔇 Additional comments (9)
examples/qe-cpx/POSCAR_phosphorene (1)

1-25: LGTM! Well-formatted POSCAR file for phosphorene structure.

The POSCAR file follows the standard VASP format correctly with proper scaling factor, lattice vectors, atom types, counts, and Cartesian coordinates. The phosphorene structure data appears complete and properly formatted for use with the new CPX workflow.

examples/qe-cpx/POSCAR_SiO2-phosph (1)

1-78: LGTM! Complete POSCAR structure for SiO2-phosph system.

The POSCAR file correctly defines a 70-atom SiO2 system with proper format including title line, scaling factor, lattice vectors, element types (Si, O, P), atom counts (18, 36, 16), and all Cartesian coordinates. This provides good test data for the new CPX workflow with a mixed system.

tests/test_check_examples.py (2)

166-166: LGTM! Correctly adds QE-CPX parameter file to test suite.

The addition of the qe-cpx run_param.json test ensures the new CPX configuration parameters are validated during testing.


198-198: LGTM! Correctly adds QE-CPX machine file to test suite.

The addition of the qe-cpx run_machine.json test ensures the new CPX machine configuration parameters are validated during testing.

dpgen/generator/run.py (5)

3905-3950: LGTM! Well-implemented CPX input generation function.

The make_fp_cpx function correctly:

  • Uses dpdata to read POSCAR files
  • Generates proper cell parameters and atomic positions
  • Replaces template placeholders (%CELL%, %POSITIONS%) with actual data
  • Maintains proper precision with scientific notation
  • Uses the set_directory context manager safely

The implementation follows the established patterns in the codebase and handles the template substitution properly.


4023-4024: LGTM! Correctly integrates CPX into make_fp_calculation dispatch.

The addition of the "cpx" case to the fp_style dispatch correctly calls the make_fp_cpx function, maintaining consistency with other fp_style implementations.


4332-4345: LGTM! Proper CPX integration in run_fp dispatch.

The CPX case correctly:

  • Defines appropriate input and output files based on the input_fn parameter
  • Uses extensions matching CP.x output files (.cel, .evp, .for, .pos, .str)
  • Reuses the QE check function (_qe_check_fin) which is appropriate since cp.x is part of Quantum ESPRESSO
  • Follows the established pattern for other fp_style cases

4816-4857: LGTM! Well-implemented CPX post-processing function.

The post_fp_cpx function correctly:

  • Follows the established pattern of other post_fp functions
  • Uses dpdata with the "qe/cp/traj" format for parsing cp.x output
  • Handles system indexing and file organization properly
  • Outputs data in both deepmd/raw and deepmd/npy formats with proper precision
  • Includes proper error handling by checking for output file existence

4923-4924: LGTM! Correctly integrates CPX into post_fp dispatch.

The addition of the "cpx" case to the post_fp dispatch correctly calls the post_fp_cpx function, completing the integration of CPX into the FP workflow.

Copy link
Contributor

coderabbitai bot commented Sep 28, 2025

📝 Walkthrough

Walkthrough

Adds a new FP style "cpx" (QE cp.x) to the argument schema and FP workflow. Implements input templating and post-processing for cp.x, integrates branches in make_fp_calculation/run_fp/post_fp, and adds example POSCARs, QE input templates, and run configs under examples/qe-cpx/.

Changes

Cohort / File(s) Summary of edits
FP style schema (CPX)
dpgen/generator/arginfo.py
Added fp_style_cpx_args() exposing fp_params as dict with sub_fields input_fn and template_fn; registered Argument("cpx", dict, fp_style_cpx_args()) in fp_style_variant_type_args().
FP workflow integration (CPX)
dpgen/generator/run.py
Introduced make_fp_cpx(iter_index, jdata) to template QE cp.x input from POSCAR (%CELL%, %POSITIONS%) and post_fp_cpx(iter_index, jdata) to collect trajectories into dpdata outputs; integrated "cpx" branches in make_fp_calculation, run_fp (forward/backward files, _qe_check_fin, log "output"), and post_fp. Note: make_fp_cpx appears duplicated.
QE-CPX examples
examples/qe-cpx/*
Added POSCARs (.../POSCAR_phosphorene, .../POSCAR_SiO2-phosph), QE input templates (.../qe_template_P.in, .../qe_template_SiO2P.in) with %CELL%/%POSITIONS% placeholders, and run configs (.../run_machine.json, .../run_param.json) referencing cp.x and CPX parameters.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Orchestrator
  participant Run as run.py
  participant CPX as QE cp.x
  participant Store as Data storage

  Orchestrator->>Run: make_fp_calculation(iter_index, jdata)
  Note over Run: fp_style == "cpx"
  Run->>Run: make_fp_cpx(...)\n- Read POSCAR\n- Fill template (%CELL%, %POSITIONS%)\n- Write input_fn.in

  Orchestrator->>Run: run_fp(iter_index, jdata, mdata)
  Run->>CPX: Execute cp.x -in input_fn.in\n(forward_files/backward_files set)
  CPX-->>Run: Outputs (.cel, .evp, .for, .pos, .str, output)
  Run-->>Orchestrator: _qe_check_fin(log="output")

  Orchestrator->>Run: post_fp(iter_index, jdata)
  Run->>Run: post_fp_cpx(...)\n- Parse cp.x traj\n- Build dpdata MultiSystems
  Run->>Store: Write data.{ss}
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • wanghan-iapcm

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title concisely and accurately summarizes the primary change—adding support for the new fp_style “cpx” using Quantum Espresso’s Car-Parrinello cp.x—without extraneous details or vague wording, making it clear for reviewers and maintainers.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Collaborator

@Yi-FanLi Yi-FanLi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Constant206462 Can you also add a unittest for this feature in tests/generator/test_make_fp.py? You may refer to the unittest for pwscf as a reference.

@Constant206462
Copy link
Author

@Yi-FanLi Yeah, sure. But I will be busy until next weekend, so it's unlikely I would do this in next several days.

@Constant206462
Copy link
Author

Well, I'm not sure if I did everything correct here, but hopefully it's alright.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
tests/generator/test_make_fp.py (1)

767-799: Clean up unused variables.

Static analysis identified several unused variables:

  • Line 775: mdata is loaded but never used
  • Line 779: n_frame is assigned but never used
  • Lines 780, 782: Loop variables ii and jj are not used within their loop bodies

Apply this diff to remove unused variables:

         with open(param_cpx_file) as fp:
             jdata = json.load(fp)
-        with open(machine_file) as fp:
-            mdata = json.load(fp)
         md_descript = []
         nsys = 2
         nmd = 3
-        n_frame = 10
-        for ii in range(nsys):
+        for _ in range(nsys):
             tmp = []
-            for jj in range(nmd):
+            for _ in range(nmd):
                 tmp.append(np.arange(0, 0.29, 0.29 / 10))
             md_descript.append(tmp)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f4f3552 and 0f6775d.

📒 Files selected for processing (4)
  • tests/generator/context.py (1 hunks)
  • tests/generator/cpx_pyridine_template.in (1 hunks)
  • tests/generator/param-pyridine-cpx.json (1 hunks)
  • tests/generator/test_make_fp.py (4 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
tests/generator/test_make_fp.py (2)
tests/generator/context.py (1)
  • setUpModule (55-56)
dpgen/generator/run.py (1)
  • make_fp (3976-3991)
🪛 Ruff (0.13.3)
tests/generator/test_make_fp.py

593-593: Unused noqa directive (non-enabled: UP031)

Remove unused noqa directive

(RUF100)


600-600: Loop control variable idx not used within loop body

(B007)


775-775: Local variable mdata is assigned to but never used

Remove assignment to unused variable mdata

(F841)


779-779: Local variable n_frame is assigned to but never used

Remove assignment to unused variable n_frame

(F841)


780-780: Loop control variable ii not used within loop body

Rename unused ii to _ii

(B007)


782-782: Loop control variable jj not used within loop body

Rename unused jj to _jj

(B007)

🔇 Additional comments (4)
tests/generator/context.py (1)

30-30: LGTM!

The addition of param_cpx_file follows the established naming convention and pattern used for other FP style parameter files.

tests/generator/test_make_fp.py (2)

28-28: LGTM!

The import follows the existing pattern for test configuration files.


108-146: LGTM!

The CPX input reference string is well-formed and follows Quantum Espresso CP.x input conventions. It will serve as a proper validation baseline for the CPX test.

tests/generator/cpx_pyridine_template.in (1)

1-45: LGTM!

The CPX template is well-formed and follows Quantum Espresso CP.x input conventions. The placeholders %POSITIONS% and %CELL% correctly mark where dpgen will substitute atomic coordinates and cell parameters. The template configuration (electron dynamics, convergence thresholds, etc.) is appropriate for Car-Parrinello calculations.

for some reason in every pyridine param json the masses are incorrect
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
tests/generator/test_make_fp.py (1)

592-604: Address the hardcoded filename.

The function correctly validates the CPX input header, and the variable shadowing issue from the previous review has been fixed. However, the hardcoded filename "C5H5N.in" on line 596 remains unaddressed from the previous review.

Consider making the filename configurable by reading it from fp_params.get("input_fn", "C5H5N.in") or document why it must be hardcoded for CPX tests.

Apply this diff to make the filename configurable:

-def _check_cpx_input_head(testCase, idx):
+def _check_cpx_input_head(testCase, idx, input_fn="C5H5N.in"):
     fp_path = os.path.join("iter.%06d" % idx, "02.fp")  # noqa: UP031
     tasks = glob.glob(os.path.join(fp_path, "task.*"))
     for ii in tasks:
-        ifile = os.path.join(ii, "C5H5N.in")
+        ifile = os.path.join(ii, input_fn)
         testCase.assertTrue(os.path.isfile(ifile))

Then update the test call on line 797 to pass the filename from jdata["fp_params"]["input_fn"] if desired.


Optional: Remove unused noqa directive.

Line 593 has an unused noqa directive that can be removed for cleaner code.

Apply this diff:

-    fp_path = os.path.join("iter.%06d" % idx, "02.fp")  # noqa: UP031
+    fp_path = os.path.join("iter.%06d" % idx, "02.fp")
🧹 Nitpick comments (1)
tests/generator/test_make_fp.py (1)

767-799: LGTM! Test structure follows established patterns.

The test class correctly follows the pattern of other FP tests (e.g., TestMakeFPPwscf), creating fake MD data, calling make_fp, and validating the generated files.


Optional: Consider removing unused variables for cleaner code.

Lines 775, 779, 780, and 782 have variables that are assigned but never used (mdata, n_frame, loop variables ii and jj). While these follow the pattern of other tests in this file, removing them would reduce noise from static analysis tools.

Apply this diff:

     with open(param_cpx_file) as fp:
         jdata = json.load(fp)
-    with open(machine_file) as fp:
-        mdata = json.load(fp)
     md_descript = []
     nsys = 2
     nmd = 3
-    n_frame = 10
-    for ii in range(nsys):
+    for _ in range(nsys):
         tmp = []
-        for jj in range(nmd):
+        for _ in range(nmd):
             tmp.append(np.arange(0, 0.29, 0.29 / 10))
         md_descript.append(tmp)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0f6775d and a78b356.

📒 Files selected for processing (2)
  • tests/generator/param-pyridine-cpx.json (1 hunks)
  • tests/generator/test_make_fp.py (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/generator/param-pyridine-cpx.json
🧰 Additional context used
🧬 Code graph analysis (1)
tests/generator/test_make_fp.py (2)
tests/generator/context.py (1)
  • setUpModule (55-56)
dpgen/generator/run.py (1)
  • make_fp (3976-3991)
🪛 Ruff (0.13.3)
tests/generator/test_make_fp.py

593-593: Unused noqa directive (non-enabled: UP031)

Remove unused noqa directive

(RUF100)


600-600: Loop control variable jj not used within loop body

(B007)


775-775: Local variable mdata is assigned to but never used

Remove assignment to unused variable mdata

(F841)


779-779: Local variable n_frame is assigned to but never used

Remove assignment to unused variable n_frame

(F841)


780-780: Loop control variable ii not used within loop body

Rename unused ii to _ii

(B007)


782-782: Loop control variable jj not used within loop body

Rename unused jj to _jj

(B007)

🔇 Additional comments (2)
tests/generator/test_make_fp.py (2)

108-146: LGTM! CPX reference input data is well-structured.

The reference input follows Quantum ESPRESSO CP namelist format correctly. The inconsistent trailing commas between parameters are valid in Fortran namelists (commas are optional separators), though a consistent style would be slightly cleaner.


28-28: LGTM! Import correctly added.

The param_cpx_file import is properly placed in alphabetical order with other parameter file imports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants