Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement yaml parsing #46

Open
16 tasks
K20shores opened this issue Feb 13, 2024 · 0 comments
Open
16 tasks

Implement yaml parsing #46

K20shores opened this issue Feb 13, 2024 · 0 comments

Comments

@K20shores
Copy link
Collaborator

K20shores commented Feb 13, 2024

Currently, there is a JSON parsing class (include/open_atmos/mechanism_configuration/json_parser.hpp; src/json_parser.cpp) that is used to read mechanism configuration files, which uses the nlohmann::json library. There is also a stubbed-out version of a equivalent YAML parser that has yet to be implemented (include/open_atmos/mechanism_configuration/yaml_parser.hpp; src/yaml_parser.cpp).

As we've learned, yaml-cpp can parse json as well as yaml. Replace the existing json and to-be-implemented yaml parsers with a single json/yaml parser that reads both types of files.

Acceptance criteria

  • nlohmann::json is removed
  • all parsing is done with yaml-cpp
  • Existing tests that parse json still work
  • New tests are added that parse corresponding yaml examples

Ideas

  • Something similar was done in micm, this PR could act as a guide
  • Instead of separating the unit tests into yaml and json folders, put all tests for both config types into a single test file
  • Ensure all of these are taken care of
    • Parse species
    • Parse aerosol phases
    • Parse arrhenius reactions
    • Parse troe reactions
    • Parse branched reactions
    • Parse tunnelling reactions
    • Parse surface reacdtions
    • Parse photolysis reactions
    • Parse emissions reaction
    • Parse first order loss reactions
    • Parse condensed phase photolysis reactions
    • Parse condensed phase arrhenius reactions
    • Parse aqueous equilibrium reactions
    • Parse henry's law phase transfer
    • Parse wet deposition
    • Parse simpol phase transfer
  • use this (chatgpt generated) python scrip to convert any existing json samples to yaml
import json
import yaml

def json_to_yaml(json_file_path, yaml_file_path):
    """
    Reads a JSON file and exports its contents to a YAML file.

    :param json_file_path: Path to the JSON file to read.
    :param yaml_file_path: Path to the YAML file to write.
    """
    try:
        # Open and read the JSON file
        with open(json_file_path, 'r') as json_file:
            data = json.load(json_file)

        # Write the data to a YAML file
        with open(yaml_file_path, 'w') as yaml_file:
            yaml.dump(data, yaml_file, default_flow_style=False)

        print(f"Successfully converted {json_file_path} to {yaml_file_path}")

    except FileNotFoundError:
        print(f"Error: The file {json_file_path} does not exist.")
    except json.JSONDecodeError:
        print(f"Error: Failed to decode JSON from the file {json_file_path}.")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

# Example usage
if __name__ == "__main__":
    # Replace with your file paths
    input_json_file = "input.json"
    output_yaml_file = "output.yaml"

    json_to_yaml(input_json_file, output_yaml_file)
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

No branches or pull requests

1 participant