Skip to main content

LGPL library for small arms ballistic calculations (Python 3)

Reason this release was yanked:

not desired publish

Project description

BallisticCalculator

LGPL library for small arms ballistic calculations (Python 3.9+)

Table of contents

Installation

Latest stable release from pypi**

pip install py-ballisticcalc

# Using precompiled backend (improves performance)
pip install py-ballisticcalc[exts]

# Using matplotlib and pandas uses additional dependencies
pip install py-ballisticcalc[charts]

Using matplotlib and pandas uses additional dependencies

pip install py-ballisticcalc[charts]

Installing from sources

MSVC or GCC required

  • Download and install MSVC or GCC depending on target platform
  • Use one of the references you need:
# no binary from PyPi
pip install py-ballisticcalc==<version> --no-binary py-ballisticcalc

# master brunch
pip install git+https://github.com/o-murphy/py_ballisticcalc

# specific branch
pip install git+https://github.com/o-murphy/py_ballisticcalc.git@<target_branch_name>

Usage

The library supports all the popular units of measurement, and adds different built-in methods to define and manipulate it

Unit manipulation syntax:

from py_ballisticcalc.unit import *

# ways to define value in prefer_units
# 1. old syntax
unit_in_meter = Distance(100, Distance.Meter)
# 2. short syntax by Unit type class
unit_in_meter = Distance.Meter(100)
# 3. by Unit enum class
unit_in_meter = Unit.Meter(100)

# >>> <Distance>: 100.0 m (3937.0078740157483)

# convert unit
# 1. by method
unit_in_yard = unit_in_meter.convert(Distance.Yard)
# 2. using shift syntax
unit_in_yards = unit_in_meter << Distance.Yard  # '<<=' operator also supports
# >>> <Distance>: 109.36132983377078 yd (3937.0078740157483)

# get value in specified prefer_units
# 1. by method
value_in_km = unit_in_yards.get_in(Distance.Kilometer)
# 2. by shift syntax
value_in_km = unit_in_yards >> Distance.Kilometer  # '>>=' operator also supports
# >>> 0.1

# getting unit raw value:
rvalue = Distance.Meter(10).raw_value
rvalue = float(Distance.Meter(10))

# prefer_units comparison:
# supports operators like < > <= >= == !=
Distance.Meter(100) == Distance.Centimeter(100)  # >>> False, compare two prefer_units by raw value
Distance.Meter(100) > 10  # >>> True, compare unit with float by raw value

An example of calculations

from py_ballisticcalc import *
from py_ballisticcalc import Settings, PreferredUnits

# Modify default prefer_units
PreferredUnits.velocity = Velocity.FPS
PreferredUnits.temperature = Temperature.Celsius
PreferredUnits.distance = Distance.Meter
PreferredUnits.sight_height = Distance.Centimeter

Settings.USE_POWDER_SENSITIVITY = True  # Correct muzzle velocity for powder temperature

# Define ammunition parameters
weight, diameter = 168, 0.308  # Numbers will be assumed to use default Settings.Units
length = Distance.Inch(1.282)  # Or declare prefer_units explicitly
dm = DragModel(0.223, TableG7, weight, diameter, length)
ammo = Ammo(dm, 2750, 15)
ammo.calc_powder_sens(2723, 0)
gun = Weapon(sight_height=9, twist=12)
current_atmo = Atmo(110, 29.8, 15, 72)
current_winds = [Wind(2, 90)]
shot = Shot(weapon=gun, ammo=ammo, atmo=current_atmo, winds=current_winds)
calc = Calculator()
calc.set_weapon_zero(shot, Distance.Meter(100))

shot_result = calc.fire(shot, trajectory_range=1000, trajectory_step=100)

for p in shot_result:
    print(p.formatted())

Example of the formatted output:

python -m py_ballisticcalc.example
('0.000 s', '0.0 m', '2750.0 ft/s', '2.46 mach', '-3.5 inch', '-3.5 inch', '0.00 mil', '0.0 inch', '0.00 mil', '0.0 m', '0.0939 °', '-4.062e-03', '0.000', '2821 ft·lb', '880 lb', 8)
('0.125 s', '100.1 m', '2526.5 ft/s', '2.26 mach', '0.0 inch', '0.0 inch', '0.00 mil', '0.2 inch', '0.05 mil', '100.1 m', '0.0068 °', '-4.062e-03', '0.665', '2381 ft·lb', '683 lb', 9)
('0.260 s', '200.0 m', '2313.5 ft/s', '2.07 mach', '-3.0 inch', '-3.0 inch', '-0.39 mil', '0.8 inch', '0.10 mil', '200.0 m', '-0.0967 °', '-4.062e-03', '0.633', '1996 ft·lb', '524 lb', 8)
('0.409 s', '300.1 m', '2111.2 ft/s', '1.89 mach', '-13.8 inch', '-13.8 inch', '-1.19 mil', '1.9 inch', '0.16 mil', '300.1 m', '-0.2207 °', '-4.062e-03', '0.599', '1663 ft·lb', '398 lb', 8)
('0.572 s', '400.1 m', '1919.6 ft/s', '1.72 mach', '-33.9 inch', '-33.9 inch', '-2.19 mil', '3.5 inch', '0.22 mil', '400.1 m', '-0.3701 °', '-4.062e-03', '0.570', '1374 ft·lb', '299 lb', 8)
('0.751 s', '500.0 m', '1736.8 ft/s', '1.56 mach', '-65.4 inch', '-65.4 inch', '-3.38 mil', '5.7 inch', '0.30 mil', '500.0 m', '-0.5516 °', '-4.062e-03', '0.545', '1125 ft·lb', '222 lb', 8)
('0.951 s', '600.1 m', '1561.9 ft/s', '1.40 mach', '-110.7 inch', '-110.7 inch', '-4.77 mil', '8.7 inch', '0.37 mil', '600.1 m', '-0.7748 °', '-4.062e-03', '0.521', '910 ft·lb', '161 lb', 8)
('1.173 s', '700.0 m', '1395.2 ft/s', '1.25 mach', '-173.1 inch', '-173.1 inch', '-6.40 mil', '12.6 inch', '0.47 mil', '700.0 m', '-1.0525 °', '-4.062e-03', '0.495', '726 ft·lb', '115 lb', 8)
('1.423 s', '800.0 m', '1238.1 ft/s', '1.11 mach', '-257.0 inch', '-257.0 inch', '-8.31 mil', '17.6 inch', '0.57 mil', '800.0 m', '-1.4030 °', '-4.062e-03', '0.462', '572 ft·lb', '80 lb', 8)
('1.705 s', '900.1 m', '1097.8 ft/s', '0.98 mach', '-368.2 inch', '-368.2 inch', '-10.58 mil', '24.1 inch', '0.69 mil', '900.1 m', '-1.8503 °', '-9.633e-03', '0.333', '450 ft·lb', '56 lb', 8)

Contributors

This project exists thanks to all the people who contribute.

Special thanks to:

  • David Bookstaber - Ballistics Expert, Financial Engineer
    For the help in understanding and improvement of some calculation methods
  • Nikolay Gekht
    For the sources code on C# and GO-lang from which this project firstly was forked from

About project

The library provides trajectory calculation for projectiles including for various applications, including air rifles, bows, firearms, artillery and so on.

3DF model that is used in this calculator is rooted in old C sources of version 2 of the public version of JBM calculator, ported to C#, optimized, fixed and extended with elements described in Litz's "Applied Ballistics" book and from the friendly project of Alexandre Trofimov and then ported to Go.

Now it's also ported to python3 and expanded to support calculation trajectory by multiple ballistics coefficients and using custom drag data (such as Doppler radar data ©Lapua, etc.)

The online version of Go documentation is located here: https://godoc.org/github.com/gehtsoft-usa/go_ballisticcalc

C# version of the package is located here: https://github.com/gehtsoft-usa/BallisticCalculator1

The online version of C# API documentation is located here: https://gehtsoft-usa.github.io/BallisticCalculator/web-content.html

Go documentation can be obtained using godoc tool.

The current status of the project is ALPHA version.

RISK NOTICE

The library performs very limited simulation of a complex physical process and so it performs a lot of approximations. Therefore, the calculation results MUST NOT be considered as completely and reliably reflecting actual behavior or characteristics of projectiles. While these results may be used for educational purpose, they must NOT be considered as reliable for the areas where incorrect calculation may cause making a wrong decision, financial harm, or can put a human life at risk.

THE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.

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

py_ballisticcalc.exts-2.0.0b3.tar.gz (121.2 kB view details)

Uploaded Source

Built Distributions

py_ballisticcalc.exts-2.0.0b3-py3-none-any.whl (121.9 kB view details)

Uploaded Python 3

py_ballisticcalc.exts-2.0.0b3-cp312-cp312-win_amd64.whl (191.8 kB view details)

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.0b3-cp312-cp312-macosx_10_9_universal2.whl (277.9 kB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

py_ballisticcalc.exts-2.0.0b3-cp311-cp311-win_amd64.whl (194.5 kB view details)

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.0b3-cp311-cp311-macosx_10_9_universal2.whl (281.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

py_ballisticcalc.exts-2.0.0b3-cp310-cp310-win_amd64.whl (193.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.0b3-cp310-cp310-macosx_11_0_x86_64.whl (207.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

py_ballisticcalc.exts-2.0.0b3-cp39-cp39-win_amd64.whl (194.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.0b3-cp39-cp39-macosx_11_0_x86_64.whl (208.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

File details

Details for the file py_ballisticcalc.exts-2.0.0b3.tar.gz.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3.tar.gz
Algorithm Hash digest
SHA256 4eabf8a51cac2b060deb66adb6122878aceeaab1e190db755769e311dfc300d0
MD5 0a6d3a034b61e8f612d1bd1fb571cb4e
BLAKE2b-256 74fca81a0c4ec60da04ef24c3f0073c96f6dde73282656988b81938fc940a320

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-py3-none-any.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-py3-none-any.whl
Algorithm Hash digest
SHA256 aab72c8303cf82edaee24867d3cb2c7c57ee716a8122d76c18d58961c0c2a29d
MD5 4a94ca235145a0988f3f45c00e9ef626
BLAKE2b-256 23e421ad4ba54eb1d8ba26ee527ec8b3409e9b0a71b1a277c0a17c4ff350e7cc

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b1fa533725955335db9850ec25a99e355530a0943d51f37249e2302d3c5ae82b
MD5 9622f6a88b9cc9d02003b90fa1ce7904
BLAKE2b-256 6e287611d095d1e3c537322f8f623ffecdef33ec3ab32020d853cba5594f1eae

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3f08c4ce6ee689ac87040ed7e2a4773fb557b3f09444dabf744e0d1f5ba2b099
MD5 cff9135c6716a11986839c498a916b93
BLAKE2b-256 9fa76c005f9aeb9bb9da95f537ec8c116d34b0a325067f839788432988b575c1

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b05353f5e0cd0b1f974cc0c5e2d3a635504795f8f9e3f1fe89c047cf8537ba80
MD5 6258093e11cf4931bf675dcf4d13058b
BLAKE2b-256 2b20a8969c9914eed7a3deecf440a69b2241e9a399ab2160e7985ee6e8ed5691

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a4b9ba21aeacbeda26a8b0490e693e3c40ec79156da80390fb6f7738ecc65d56
MD5 f487adeb02715f3bb95da02d5e3eef0b
BLAKE2b-256 1980cca51adcdcd50d1921db1cc344296fa9b9b1e014469286ed2dc370937769

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3ca13b9af21562684670cadae5f5cfc39d79a04d0360fe0c8e9ab4dd28bdc60e
MD5 c908e11e23f201d6b2c55808906352e0
BLAKE2b-256 9e26ade745bba1dd1d7a326d2a1ce99890dccbd76e2f96bfb82c13fab3b358e9

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e39ec4fade417ec3b124233c31598cc36e722ced025b03096c5f220b3f412be9
MD5 eb77452a036b8569a000f8a28ec82afc
BLAKE2b-256 2427743aed1681d6dd5f812e8a72bdabac5c32b8d97f3171955fb0a4ecd67a46

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d4c3c0e8d6bb6d74e8287ef138acceb50f0091050f2fa98f27e301da811f96ef
MD5 303c3e3e98adb2acdf1d316940f33084
BLAKE2b-256 89b9251a161b61cbf9b8b83d2659fbb3d402340438975e8bb86f855b7c7f6111

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b3-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b3-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0150e99a7f1d24907b8afa7779fcedce02912a435b4f9b286750fbc3db48090f
MD5 370663b99ba0f98219c610b49bf2bcb8
BLAKE2b-256 1e871033f4b149060e0c15a532c559f94b2e265d01f5da5dd4459a254fda1514

See more details on using hashes here.

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