Skip to main content

High-performance Rust library and Python extension for reading LAMMPS log files

Project description

Log LAMMPS Reader

Log LAMMPS Reader is a high-performance Rust library and Python extension for reading LAMMPS log files and converting them into DataFrames using the Polars library. This project leverages PyO3 to create a Python module that interfaces with Rust code, ensuring both speed and efficiency.

This package returns a polars DataFrame allowing the user to use powerful data manipulations (e.g filters) provided through polars.

Features

  • High-speed reading of LAMMPS log files
  • Converts log data into Polars DataFrames
  • Exposes functionality to Python through a PyO3 module
  • Gets thermo data for multiple thermo runs
  • Better data parsing, skips rows if they are invalid (e.g missing newline, non-numeric characters in the log)
  • Only stores the needed thermo run data specified by user

Installation

Python

Using pip:

pip install log-lammps-reader

Build From Source

Alternatively, to build the Python module, follow these steps:

Requirements

  • Rust (latest stable version recommended)
  • Python 3.8 or later
  • Cargo (Rust package manager)
  1. Ensure you have maturin installed:

    pip install maturin
    
  2. Compile the Rust packages and install the python module.

    maturin develop --release
    

Usage Examples

Python

import log_lammps_reader

thermo_number = 0 # Choose the nth number of thermo run
df = log_lammps_reader.new('log.lammps') # polars DataFrame for 1st thermo run

# Or choose the nth number of thermo run (default n = 0)
df = log_lammps_reader.new('log.lammps', n) 
time = df.get_column('Time') # Get any thermo column
time_squared = time ** 2 # use broadcasting operations similar to numpy

# Use polars to filter the results.
import polars as pl
equilibrated_df = df.filter(pl.col('Time') > 1) 

# Convert data to numpy if needed
import numpy as np
step = np.array(df.get_column('Step'))

Example of a DataFrame for a LAMMPS log file.

>>> import log_lammps_reader
>>> df = log_lammps_reader.new('log.lammps')
>>> df
shape: (10_000_002, 10)
┌──────────────┬───────────┬───────────┬───────────┬───┬───────┬────────────┬───────────┬───────────┐
 Step          Time       Temp       Press        Atoms  PotEng      KinEng     TotEng    
 ---           ---        ---        ---           ---    ---         ---        ---       
 f64           f64        f64        f64           f64    f64         f64        f64       
╞══════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════╪════════════╪═══════════╪═══════════╡
 61.0          0.0        298.0      57.20028     519.0  -14.776112  19.953113  5.1770012 
 70.0          0.009      296.73074  60.840723    519.0  -14.721924  19.868128  5.1462039 
 80.0          0.019      292.56952  72.565657    519.0  -14.530972  19.589506  5.0585341 
 90.0          0.029      285.36347  92.936408    519.0  -14.18668   19.107012  4.9203316 
 100.0         0.039      275.29149  121.91127    519.0  -13.681587  18.432625  4.7510379 
                                                                                  
 1.0000003e8   99999.969  301.90216  225.03035    519.0  -11.279288  20.214389  8.9351011 
 1.0000004e8   99999.979  301.99266  220.86566    519.0  -11.33326   20.220449  8.8871881 
 1.0000005e8   99999.989  302.04158  215.55467    519.0  -11.406581  20.223724  8.8171428 
 1.0000006e8   99999.999  301.61379  210.565      519.0  -11.471215  20.195081  8.723866  
 1.00000061e8  100000.0   301.52726  210.15164    519.0  -11.475823  20.189287  8.7134637 
└──────────────┴───────────┴───────────┴───────────┴───┴───────┴────────────┴───────────┴───────────┘
>>> df.get_column('Time')
shape: (10_000_002,)
Series: 'Time' [f64]
[
        0.0
        0.009
        0.019
        0.029
        0.039
        
        99999.969
        99999.979
        99999.989
        99999.999
        100000.0
]
>>> df.get_column('Time').mean()
50000.00399999919
>>> df.get_column('Time').std()
28867.520676357886
>>>

Rust

Clone the repo and add it to your project

use log_lammps_reader::LogLammpsReader;

fn main() {
    let log_file_name = "log.lammps";
    let run_number = Some(0);

    match LogLammpsReader::new(log_file_name.into(), run_number) {
        Ok(df) => println!("DataFrame read successfully: {:?}", df),
        Err(e) => eprintln!("Error reading DataFrame: {}", e),
    }
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

log_lammps_reader-0.1.4.tar.gz (18.5 kB view hashes)

Uploaded Source

Built Distributions

log_lammps_reader-0.1.4-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-pp310-pypy310_pp73-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-pp39-pypy39_pp73-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-pp38-pypy38_pp73-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp312-none-win_amd64.whl (3.1 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

log_lammps_reader-0.1.4-cp312-none-win32.whl (2.8 MB view hashes)

Uploaded CPython 3.12 Windows x86

log_lammps_reader-0.1.4-cp312-cp312-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-cp312-cp312-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-cp312-cp312-musllinux_1_2_armv7l.whl (3.8 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-cp312-cp312-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

log_lammps_reader-0.1.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

log_lammps_reader-0.1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

log_lammps_reader-0.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

log_lammps_reader-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (3.0 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

log_lammps_reader-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl (3.2 MB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

log_lammps_reader-0.1.4-cp311-none-win_amd64.whl (3.1 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

log_lammps_reader-0.1.4-cp311-none-win32.whl (2.8 MB view hashes)

Uploaded CPython 3.11 Windows x86

log_lammps_reader-0.1.4-cp311-cp311-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-cp311-cp311-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-cp311-cp311-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-cp311-cp311-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

log_lammps_reader-0.1.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

log_lammps_reader-0.1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

log_lammps_reader-0.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

log_lammps_reader-0.1.4-cp311-cp311-macosx_11_0_arm64.whl (3.0 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

log_lammps_reader-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl (3.2 MB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

log_lammps_reader-0.1.4-cp310-none-win_amd64.whl (3.1 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

log_lammps_reader-0.1.4-cp310-none-win32.whl (2.8 MB view hashes)

Uploaded CPython 3.10 Windows x86

log_lammps_reader-0.1.4-cp310-cp310-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-cp310-cp310-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-cp310-cp310-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-cp310-cp310-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

log_lammps_reader-0.1.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

log_lammps_reader-0.1.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

log_lammps_reader-0.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

log_lammps_reader-0.1.4-cp310-cp310-macosx_11_0_arm64.whl (3.0 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

log_lammps_reader-0.1.4-cp39-none-win_amd64.whl (3.1 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

log_lammps_reader-0.1.4-cp39-none-win32.whl (2.8 MB view hashes)

Uploaded CPython 3.9 Windows x86

log_lammps_reader-0.1.4-cp39-cp39-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-cp39-cp39-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-cp39-cp39-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-cp39-cp39-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

log_lammps_reader-0.1.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

log_lammps_reader-0.1.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

log_lammps_reader-0.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

log_lammps_reader-0.1.4-cp39-cp39-macosx_11_0_arm64.whl (3.0 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

log_lammps_reader-0.1.4-cp38-none-win_amd64.whl (3.1 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

log_lammps_reader-0.1.4-cp38-none-win32.whl (2.8 MB view hashes)

Uploaded CPython 3.8 Windows x86

log_lammps_reader-0.1.4-cp38-cp38-musllinux_1_2_x86_64.whl (3.8 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

log_lammps_reader-0.1.4-cp38-cp38-musllinux_1_2_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

log_lammps_reader-0.1.4-cp38-cp38-musllinux_1_2_armv7l.whl (3.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

log_lammps_reader-0.1.4-cp38-cp38-musllinux_1_2_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

log_lammps_reader-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

log_lammps_reader-0.1.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

log_lammps_reader-0.1.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (3.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

log_lammps_reader-0.1.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

log_lammps_reader-0.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page