Skip to main content

Simple python3 wrapper for .a7p files

[PyPI Version(https://pypi.org/project/a7p)] license

.a7p is the most common ballistic profile format for the latest Archer thermal vision devices

Table of Contents

Installation

As CLI tool

# with `uv`
uv tool install a7p

# with `pipx`
pipx install a7p

Installation to your project:

# with `uv`
uv add a7p

# with `pip`
pip install a7p

Usage

CLI-tool

a7p -h
usage: a7p 1.0.0b3 [-h] [-V] [-r] [-F] [--unsafe] [--jsonify] [--verbose] [-zd ZERO_DISTANCE] [-d {subsonic,low,medium,long,ultra}] [-zs ZERO_SYNC | -zo X_OFFSET Y_OFFSET] [-cps COPY_SWITCHES] [--disable-validator] path

positional arguments:
  path                  Specify the path to the directory or a .a7p file to process.

options:
  -h, --help            show this help message and exit
  -V, --version         Display the current version of the tool.
  -r, --recursive       Recursively process files in the specified directory.
  -F, --force           Force saving changes without confirmation.
  --unsafe              Skip data validation (use with caution).

Single file specific options:
  --jsonify             Print as json. This option is only allowed for a single file.
  --verbose             Enable verbose output for detailed logs. This option is only allowed for a single file.

Distances:
  -zd ZERO_DISTANCE, --zero-distance ZERO_DISTANCE
                        Set the zero distance in meters.
  -d {subsonic,low,medium,long,ultra}, --distances {subsonic,low,medium,long,ultra}
                        Specify the distance range: 'subsonic', 'low', 'medium', 'long', or 'ultra'.

Zeroing:
  -zs ZERO_SYNC, --zero-sync ZERO_SYNC
                        Synchronize zero using a specified configuration file.
  -zo X_OFFSET Y_OFFSET, --zero-offset X_OFFSET Y_OFFSET
                        Set the offset for zeroing in clicks (X_OFFSET and Y_OFFSET).

Switches:
  -cps COPY_SWITCHES, --copy-switches-from COPY_SWITCHES
                        Copy switches from other a7p file.

Advanced:
  --disable-validator   Disable JSON Schema validation (unsafe).

Use as imported module

import logging
import a7p
from a7p import exceptions, A7PFactory

# open file in binary mode
with open('data/test.a7p', 'rb') as fp:
    # read data from file
    try:
        payload = a7p.load(fp)
    except exceptions.A7PDataError as exc:  # raises if md5 crc not match
        logging.error(exc)

# accessing attributes as for default protobuf payload
profile_name = payload.profile.profile_name

# data conversion to common types
payload_json = a7p.to_json(payload)
payload_dict = a7p.to_dict(payload)
from_json = a7p.from_json(payload_json)
from_dict = a7p.from_dict(payload_dict)

# saving builded profile
with open('data/test.a7p', 'rb') as fp:
    a7p.dump(payload, fp)

# creating a new a7p Payload
payload = A7PFactory(
    meta=A7PFactory.Meta(
        name="test profile name",
    ),
    bullet=A7PFactory.Bullet(
        weight=175,
        length=0.9
    ),
    distances=A7PFactory.DistanceTable.LONG_RANGE
)
with open('data/test.a7p', 'wb') as fp:
    a7p.dump(payload, fp)

Dimensions

To obtain values from an .a7p profile in the desired units, you need to divide them by the multiplier. For the reverse operation, you need to perform the inverse operation and convert to an integer.

key unit multiplier desc
sc_height mm 1 sight height in mm
r_twist inch 100 positive twist value
c_zero_temperature C 1 temperature at c_muzzle_velocity
c_muzzle_velocity mps 10 muzzle velocity at c_zero_temperature
c_t_coeff %/15C 1000 temperature sensitivity
c_zero_distance_idx 10 index of zero distance from distances table
c_zero_air_temperature C 1 air temperature at zero
c_zero_air_pressure hPa 10 air pressure at zero
c_zero_air_humidity % 1 air humidity at zero
c_zero_p_temperature C 1 powder temperature at zero
c_zero_w_pitch deg 1 zeroing look angle
b_diameter inch 1000 bullet diameter
b_weight grain 10 bullet weight
b_length inch 1000 bullet length
twist_dir RIGHT|LEFT twist direction
bc_type G1|G7|CUSTOM g-func type
distances m 100 distances table in m
zero_x -1000 zeroing h-clicks for specific device
zero_y 1000 zeroing v-clicks for specific device
coef_rows.bc_cd (G1/G7) 10000 bc coefficient for mv
coef_rows.mv (G1/G7) mps 10 mv for bc provided
coef_rows.bc_cd (CUSTOM) 10000 drag coefficient (Cd)
coef_rows.mv (CUSTOM) mach 10 speed in mach

Metadata

Release files for a7p 1.2.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for a7p 1.2.5
File Size Uploaded
a7p-1.2.5.tar.gz 131.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for a7p 1.2.5
File Interpreter ABI Platform
a7p-1.2.5-py3-none-any.whl Python 3 none any Details

Total release size: 193.3 kB

Release files / a7p-1.2.5.tar.gz

Download URL a7p-1.2.5.tar.gz
Size 131.2 kB
Tags Source
SHA-256 checksum
How to use checksums
37a674493ab7723a19d232c44c16adc4733c20a6ec6e3251e3970cdf37c8afe9
BLAKE2b-256 checksum
How to use checksums
a4c34d3ec92b47af396232b21a1aa4be69f049b53629ebffc1545dd78e6e6104
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / a7p-1.2.5-py3-none-any.whl

Download URL a7p-1.2.5-py3-none-any.whl
Size 62.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bba6bebaaf3bedc809062dab74d31f1a74f7411c871f1b08270a67b0afb9310c
BLAKE2b-256 checksum
How to use checksums
b704e5b556b0ac78c7c8cd8210e12b03640f4ffe4ff74292fcb7ec7acb6ed81f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.2.5 This release

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page