Skip to main content

PyBallistics

Python-библиотека для решения ОЗВБ в термодинамической и газодинамической постановках.

Установка

Установить библиотеку можно через менеджер пакетов pip. Для этого достаточно выполнить в консоли команду

pip install --upgrade pyballistics

Краткая инструкция по использованию

Пример расчета ОЗВБ в термодинамической постановке задачи AGARD:

from pyballistics import ozvb_termo, get_options_agard

opts = get_options_agard() # получить словарь с начальными данными задачи AGARD
result = ozvb_termo(opts)  # произвести расчет и получить результат

Переменная result является словарем, в котором находятся результаты расчета. Для визуализации части результатов можно воспользоваться следующим кодом:

import matplotlib.pyplot as plt # если нет библиотеки matplotlib, то установить ее можно при помощи команды pip install matplotlib

plt.plot(result['t'], result['p_m']) # среднебаллистическое давление от времени
plt.grid()  # сетка на графике
plt.show()  # показать график

В результате будет получен следующий график зависимости среднебаллистического давления (Па) от времени (с):

В словаре result есть все необходимые данные для дальнейшего анализа:

import numpy as np 

# максимальное давление
print(np.max(result['p_m']))
>>> 319103989.57

# дульная скорость
print(result['v_p'][-1])
>>> 671.16

# доля сгоревшего пороха
print(result['psi_1'][-1])
>>> 0.932

Более подробная инструкция

За сами расчеты ОЗВБ отвечают две функции: ozvb_termo и ozvb_lagrange. Они могут быть импортированы непосредственно из библиотеки:

from pyballistics import ozvb_termo, ozvb_lagrange

Функция ozvb_termo производит термодинамический расчет, а ozvb_lagrange - газодинамический в Лагранжевых координатах.

Обе эти функции на вход принимают словари, в которых хранятся все необходимые для расчета начальные данные. Примеры таких словарей можно получить из функций get_options_agard и get_options_sample:

from pyballistics import get_options_agard, get_options_sample

opts1 = get_options_agard()
opts2 = get_options_sample()

print(opts2)
# {
#   'powders': [
#       {'omega': 7, 'dbname': 'ДГ-4 15/1'},
#       {'omega': 6, 'dbname': '22/7'}],
#  'init_conditions': {
#       'q': 51.76,
#       'd': 0.122,
#       'W_0': 0.0325,
#       'phi_1': 1.02,
#       'p_0': 30000000.0 },
#  'igniter': {
#       'p_ign_0': 1000000.0},
#  'meta_termo': {
#       'dt': 5e-06, 
#       'method': 'rk2'},
#  'meta_lagrange': {
#       'CFL': 0.9, 
#       'n_cells': 150},
#  'stop_conditions': {
#       'v_p': 690, 
#       'p_max': 600000000.0, 
#       'x_p': 9}
# }

Словарь со входными данными является иерархической структурой данных (словарь словарей, списков и т.д.). Для указания всех данных, однозначно описывающих задачу ОЗВБ, словарь должен быть довольно громоздким и неудобным для формирования. Для упрощения формирования словаря многие входящие в него элементы имеют значения по умолчанию и их, в случае необходимости, можно не указывать. Однако есть ряд элементов и значений, которые указывать обязательно. Словарь со входными данными состоит из следующих элементов "верхнего уровня":

  • 'init_conditions' - обязательный раздел. В данном разделе хранится словарь с начальными данными:

    • 'q' - масса снаряда в кг.
    • 'd' - калибр, м.
    • 'W_0' - начальный объем каморы, м^3.
    • 'phi_1' - коэффициент, учитывающий силу трения в нарезах (участвует в формуле расчета коэффициента фиктивности массы снаряда).
    • 'p_0' - давление форсирования, Па.
    • 'T_0'(опционально) - начальная температура, К (значение по умолчанию 293.15 К).
    • 'n_S'(опционально) - коэффициент учета площади нарезов (*значение по умолчанию 1). Площадь поперечного сечения высчитывается по формуле S = n_S pi d^2 / 4 .
  • 'powders' - обязательный раздел. В данном разделе хранится список с данными по пороховым навескам, из которых состоит метательный заряд. Обязательно должен иметь хотя бы один элемент. Каждый элемент списка отвечает за свою навеску и тоже является словарем со следующими элементами:

    • 'omega' - масса навески заряда, кг.
    • 'dbname'(опционально) - имя пороха в БД. Если указать, то для остальных элементов будут определены значения по умолчанию. Если не указать, то все остальные элементы будет необходимо инициализировать (список доступных имен можно получить из функции get_powder_names). Т.е. при желании можно корректировать часть характеристик табличных порохов и брать у них остальные значения стандартными.
    • 'I_e'(опционально, если указан 'dbname') - импульс конца горения, Па с.
    • 'nu' (опционально, если указан 'dbname') - показатель в степенном законе горения (по умолчанию 1).
    • 'b'(опционально, если указан 'dbname') - коволюм пороховых газов, м^3/кг.
    • 'delta'(опционально, если указан 'dbname') - плотность пороха, кг/м^3.
    • 'f'(опционально, если указан 'dbname') - сила пороха, Дж/кг.
    • 'k'(опционально, если указан 'dbname') - коэффициент адиабаты пороховых газов.
    • 'T_p'(опционально, если указан 'dbname') - темп. горения пороха, К.
    • 'z_e'(опционально, если указан 'dbname') - относительная толщина сгоревшего слоя конца горения.
    • 'kappa_1'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'lambda_1'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'mu_1'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'kappa_2'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'lambda_2'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'mu_2'(опционально, если указан 'dbname') - коэффициент в геометрическом законе горения.
    • 'k_I'(опционально, если указан 'dbname') - коэффициент для пересчета импульса конца горения для других начальных температур, 1/K.
    • 'k_f'(опционально, если указан 'dbname') - коэффициент для пересчета силы пороха для других начальных температур, 1/K.
  • 'igniter' - обязательный раздел. В данном разделе хранится словарь с начальными данными, которые относятся к воспламенителю. Словарь имеет следующие элементы:

    • 'p_ign_0' - давление вспышки, Па.
    • 'k_ign'(опционально) - коэффициент адиабаты газов воспламенителя (значение по умолчанию 1.22).
    • 'T_ign'(опционально) - температура горения воспламенителя, К (значение по умолчанию 2427).
    • 'f_ign'(опционально) - сила воспламенителя, Дж/кг (значение по умолчанию 260 000 Дж/кг).
    • 'b_ign'(опционально) - коволюм газов воспламенителя, м^3/кг (значение по умолчанию 0.0006).
  • 'windage' - опциональный раздел. В данном разделе хранится словарь с начальными данными, которые относятся к силе сопротивления воздуха перед снарядом. Если не указывать этот элемент, то будут использованы значения по умолчанию. Словарь имеет следующие элементы:

    • 'shock_wave'(опционально) - флаг True/False, показывающий нужно ли рассчитывать давление ударной волны по формуле, или использовать просто статичное давление 'p_0a' (значение по умолчанию True).
    • 'p_0a'(опционально) - давление воздуха перед снарядом, Па (значение по умолчанию 100 000).
    • 'k_air'(опционально) - показатель адиабаты воздуха (значение по умолчанию 1.4).
    • 'c_0a'(опционально) - скорость звука в воздухе, м/с (значение по умолчанию 340).
  • 'heat' - опциональный раздел. В данном разделе хранится словарь с начальными данными, которые относятся к теплообмену ГПС со стволом. Если не указывать этот элемент, то будут использованы все значения по умолчанию. Словарь имеет следующие элементы:

    • 'enabled'(опционально) - флаг True/False, показывающий нужно ли учитывать теплообмен со стволом (значение по умолчанию True).
    • 'heat_barrel'(опционально) - флаг True/False, показывающий нужно ли учитывать рассчитвать динамически температуру стенки ствола, или температура стенок ствола не меняется (значение по умолчанию True).
    • 'F_0'(опционально) - начальная площадь теплоотдачи, м^2 (значение по умолчанию 4W_0/d).
    • 'Pr'(опционально) - число Прандля (значение по умолчанию 0.74).
    • 'T_w0'(опционально) - начальная температура стенки, К. Если не указывать - то будет взята начальная температура.
    • 'mu_0'(опционально) - коэффициент динамической вязкости пороховых газов для формулы Сазерленда, Па*с (значение по умолчанию 0.175e-4).
    • 'T_cs'(опционально) - тоже для формулы Сазерленда, К (значение по умолчанию 628).
    • 'T_0s'(опционально) - тоже для формулы Сазерленда, К (значение по умолчанию 273).
    • 'c_b'(опционально) - теплоемкость материала ствола, Дж/(кг * град) (значение по умолчанию 500).
    • 'rho_b'(опционально) - плотность материала ствола, кг/м^3 (значение по умолчанию 7900).
    • 'lambda_b'(опционально) - теплопроводность материала ствола, Вт/(м·град) (значение по умолчанию 40).
    • 'lambda_g'(опционально) - теплопроводность пороховых газов, Вт/(м·К) (значение по умолчанию 0.2218).
  • 'stop_conditions' - обязательный раздел. В данном разделе хранится словарь с начальными данными, которые относятся к условиям конца расчета. Должен иметь хотя бы один элемент (любой из нижеперечисленных). Если указано несколько условий, то расчет будет остановлен из-за условия, которое сработало раньше всего. Словарь имеет следующие элементы:

    • 't_max'(опционально) - с, прервать расчет при t > t_max.
    • 'steps_max'(опционально) - сделать максимум steps_max шагов интегрирования.
    • 'v_p'(опционально) - м/с, прервать расчет, когда скорость снаряда достигнет v_p.
    • 'x_p'(опционально) - м, прервать расчет, когда снаряд пройдет x_p метров (в начальный момент снаряд прошел 0 м).
    • 'p_max'(опционально) - Па, прервать расчет, если давление превысит p_max.
  • 'meta_termo' - обязательный раздел для термодинамического расчета. В данном разделе хранится словарь с начальными данными, которые относятся к мета-параметрам термодинамического расчета. Словарь имеет следующие элементы:

    • 'dt' - с, шаг по времени.
    • 'method'(опционально) - метод интегрирования. Возможные варианты: Эйлер - 'euler'; Рунге-Кутты 2 порядка -'rk2'; - Рунге-Кутты 4 порядка - 'rk4' (значение по умолчанию 'rk2').
  • 'meta_lagrange' - обязательный раздел для газодинамического расчета. В данном разделе хранится словарь с начальными данными, которые относятся к мета-параметрам газодинамического расчета. Словарь имеет следующие элементы:

    • 'n_cells' - количество ячеек сетки.
    • 'CFL' - число Куранта (0 < CFL < 1).
    • 'W'(опционально) - дополнительное требование для повышения устойчивости: последующий шаг по времени не может быть больше текущего в W раз.

Структура результатов термодинамической модели

В зависимости от результатов расчета, словарь может быть двух видов. Если в результате расчета произошла ошибка, то будет сформирован следующий словарь:

{
    'stop_reason': 'error',   # показывает, что в процессе расчета произошла ошибка
    'error_message': '...',   # описание ошибки
    'exception': Error('...'),# ссылка на саму ошибку (ее можно вызвать при помощи raise для трассировки) 
    'execution_time': float   # время выполнения функции в секундах
}

Пример:

result = ozvb_termo({})  # передаем пустой словарь
print(result)
>>> {
    'stop_reason': 'error',
    'error_message': 'В словаре opts обязательно должно быть поле "powders", в котором указываются параметры заряда. Пример правильного словаря opts можно получить из функции get_termo_options_sample()',
    'exception': ValueError('В словаре opts обязательно должно быть поле "powders", в котором указываются параметры заряда. Пример правильного словаря opts можно получить из функции get_termo_options_sample()'),
    'execution_time': 1.7400000047018693e-05
}

Если расчет прошел без ошибок, то словарь с результатами будет следующий:

{
    't': np.array([...]),     # numpy-массив с точками по времени в секундах, в которых были рассчитаны остальные значения 
    'p_m': np.array([...]),   # numpy-массив со среднебаллистическим давлением в Па
    'T': np.array([...]),     # numpy-массив с температурой ГПС в Кельвинах
    'x_p':np.array([...]),    # numpy-массив с положением снаряда в метрах (в начальный момент x_p==0)
    'v_p': np.array([...]),   # numpy-массив со скоростью снаряда в м/c (в начальный момент v_p==0)
    'Q_pa': np.array([...]),  # numpy-массив с суммарной энергией в Дж, потраченной на преодоление сил сопротивления атмосферному давлению перед снарядом
    'Q_w': np.array([...]),   # numpy-массив с суммарной энергией в Дж, отданной  ГПС на нагрев ствола
    'W_p': np.array([...]),   # numpy-массив с заснарядным объемом в м^3
    'W_c': np.array([...]),   # numpy-массив с объемом в м^3, занятым коволюмом ГПС и конденсированной фазой ГПС
    'T_w': np.array([...]),   # numpy-массив со средней температурой ствола в К
    'k': np.array([...]),     # numpy-массив с показателями адиабаты ГПС
    'z_1': np.array([...]),   # numpy-массив с относительной толщиной сгоревшего свода пороха навески №1
    'psi_1': np.array([...]), # numpy-массив с относительной массой сгоревшего пороха навески №1
    'z_2': np.array([...]),   # numpy-массив с относительной толщиной сгоревшего свода пороха навески №2
    'psi_2': np.array([...]), # numpy-массив с относительной массой сгоревшего пороха навески №2
        ...                   # и так N раз
    'stop_reason': str,       # причина остановки расчета ('t_max', 'steps_max', 'v_p', 'x_p', 'p_max')
    'execution_time': float   # время, потраченное на расчет, в секундах
}

Пример:

opts = get_options_sample()
result = ozvb_termo(opts)
print(result)
>>> {
    't':    array([0.   , 0.   , ..., 0.027, 0.027]),
    'p_m':  array([ 1000000.   ,  1002189.433, ..., 90680294.893, 90629603.46 ]),
    'T':    array([2427.   , 2427.487, ..., 1824.249, 1823.988]),
    'x_p':  array([0.   , 0.   , ..., 6.394, 6.398]),
    'v_p':  array([  0.   ,   0.   , ..., 689.994, 690.085]),
    'Q_pa': array([    0.   ,     0.   , ..., 45159.509, 45195.554]),
    'Q_w':  array([      0.   ,       0.   , ..., 3447622.549, 3449318.738]),
    'W_p':  array([0.033, 0.033, ..., 0.107, 0.107]),
    'W_c':  array([0.008, 0.008, ..., 0.014, 0.014]),
    'T_w':  array([293.15 , 293.15 , ..., 315.661, 315.661]),
    'k':    array([1.22 , 1.22 , ..., 1.238, 1.238]),
    'z_1':  array([0.   , 0.   , ..., 0.954, 0.954]),
    'psi_1':array([0.   , 0.   , ..., 0.954, 0.954]),
    'z_2':  array([0.   , 0.   , ..., 1.343, 1.343]),
    'psi_2':array([0.   , 0.   , ..., 0.987, 0.987]),
    'stop_reason': 'v_p',
    'execution_time': 0.21484209999971426
}

Структура результатов газодинамической модели

В зависимости от результатов расчета, словарь может быть двух видов. Если в результате расчета произошла ошибка, то будет сформирован следующий словарь:

{
    'stop_reason': 'error',   # показывает, что в процессе расчета произошла ошибка
    'error_message': '...',   # описание ошибки
    'exception': Error('...'),# ссылка на саму ошибку (ее можно вызвать при помощи raise для трассировки) 
    'execution_time': float   # время выполнения функции в секундах
}

Пример:

result = ozvb_lagrange({})  # передаем пустой словарь
print(result)
>>> {
    'stop_reason': 'error',
    'error_message': 'В словаре opts обязательно должно быть поле "powders", в котором указываются параметры заряда. Пример правильного словаря opts можно получить из функции get_termo_options_sample()',
    'exception': ValueError('В словаре opts обязательно должно быть поле "powders", в котором указываются параметры заряда. Пример правильного словаря opts можно получить из функции get_termo_options_sample()'),
    'execution_time': 1.7400000047018693e-05
}

Если расчет прошел без ошибок, то словарь с результатами будет следующий:

{
    'stop_reason': str,     # причина остановки расчета ('t_max', 'steps_max', 'v_p', 'x_p', 'p_max')
    'execution_time': float,# время выполнения расчета в секундах
    'layers': [             # список со словарями. В каждом словаре хранятся данные одного временного слоя
        {                       # Словарь первого временного слоя. Слой состоит из N ячеек
            't': 0.0,               # время временного слоя в секундах
            'step_count': 0,         # номер шага по времени
            'x': np.array([...]),    # numpy-массив координатами по длине узлов сетки в метрах, длина массива N+1
            'u': np.array([...]),    # numpy-массив со скоростями узлов сетки в м/с, длина массива N+1
            'T': np.array([...]),    # numpy-массив с температурами ГПС в ячейках в Кельвинах. Длина массива N
            'rho': np.array([...]),  # numpy-массив с плотностями ГПС в ячейках в кг/м^3. Длина массива N
            'p': np.array([...]),    # numpy-массив с давлениями ГПС в ячейках в Па. Длина массива N
            'T_w':np.array([...]),   # numpy-массив с температурами стенок ствола в ячейках в Кельвинах. Длина массива N
            'k':  np.array([...]),   # numpy-массив с показателями адиабаты ГПС в ячейках. Длина массива N
            'z_1': np.array([...]),  # numpy-массив с относительными толщинами сгоревшего свода пороха навески №1 по ячейкам. Длина массива N 
            'psi_1': np.array([...]),# numpy-массив с относительными массами сгоревшего пороха навески №1 по ячейкам. Длина массива N 
            'z_2':np.array([...]),   # numpy-массив с относительными толщинами сгоревшего свода пороха навески №2 по ячейкам. Длина массива N 
            'psi_2': np.array([...]),# numpy-массив с относительными массами сгоревшего пороха навески №2 по ячейкам. Длина массива N 
            ... # и так по всем навескам
        },
        {...},                 # Словарь второго временного слоя. Слой состоит из N ячеек
        {...},                 # Словарь третьего временного слоя. Слой состоит из N ячеек
        ...,                   № и т.д.
    ]     # конец списка 'layers'
}

Пример:

opts = get_options_sample()
result = ozvb_lagrange(opts)
print(result)
>>> {
    'stop_reason': 'v_p',
    'execution_time': 0.167843300000186, 
    'layers': [
        {
            't': 0.0,
            'step_count': 0,
            'x': array([-2.78 , -2.762, ..., -0.019,  0.   ]),
            'u': array([0., 0., ..., 0., 0.]),
            'T': array([2427., 2427., ..., 2427., 2427.]),
            'rho': array([402.851, 402.851, ..., 402.851, 402.851]),
            'p': array([1000000., 1000000., ..., 1000000., 1000000.]),
            'T_w': array([293.15, 293.15, ..., 293.15, 293.15]),
            'k': array([1.22, 1.22, ..., 1.22, 1.22]),
            'z_1': array([0., 0., ..., 0., 0.]),
            'psi_1': array([0., 0., ..., 0., 0.]),
            'z_2': array([0., 0., ..., 0., 0.]),
            'psi_2': array([0., 0., ..., 0., 0.])
        },
        {
            't': 0.00026096741712768897,
            'step_count': 1,
            'x': array([-2.78 , -2.762, ..., -0.019,  0.   ]),
            'u': array([0., 0., ..., 0., 0.]),
            'T': array([2450.216, 2450.216, ..., 2450.216, 2450.216]),
            'rho': array([402.851, 402.851, ..., 402.851, 402.851]),
            'p': array([1114231.986, 1114231.986, ..., 1114231.986, 1114231.986]),
            'T_w': array([293.15, 293.15, ..., 293.15, 293.15]),
            'k': array([1.222, 1.222, ..., 1.222, 1.222]),
            'z_1': array([0., 0., ..., 0., 0.]),
            'psi_1': array([0., 0., ..., 0., 0.]),
            'z_2': array([0., 0., ..., 0., 0.]),
            'psi_2': array([0., 0., ..., 0., 0.])
        },
        ...
    ]
}

Дополнительные функции

В библиотеке также есть несколько дополнительных функций, описание к которым есть в их документации:

from pyballistics import get_full_options, get_db_powder, get_powder_names

print(get_full_options.__doc__)
print(get_db_powder.__doc__)
print(get_powder_names.__doc__)

Metadata

Release files for pyballistics 1.2.1

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

Source distribution (sdist)

Source distribution for pyballistics 1.2.1
File Size Uploaded
pyballistics-1.2.1.tar.gz 625.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pyballistics 1.2.1
File
pyballistics-1.2.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pyballistics-1.2.1-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
pyballistics-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
pyballistics-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pyballistics-1.2.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
pyballistics-1.2.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pyballistics-1.2.1-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
pyballistics-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
pyballistics-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pyballistics-1.2.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
pyballistics-1.2.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
pyballistics-1.2.1-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
pyballistics-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
pyballistics-1.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pyballistics-1.2.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
pyballistics-1.2.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
pyballistics-1.2.1-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
pyballistics-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ x86-64 Details
pyballistics-1.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pyballistics-1.2.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 33.3 MB

Release files / pyballistics-1.2.1.tar.gz

Download URL pyballistics-1.2.1.tar.gz
Size 625.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7ecb2da04c59a69f1e538e9b1ae9fb05b8ad42da74c77edb17cbc577bef7a1c2
BLAKE2b-256 checksum
How to use checksums
89cb024b9786bfe349352cc544b408d06b063cd8a4cad3f5081210bc0c1ecd77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp312-cp312-win_amd64.whl

Download URL pyballistics-1.2.1-cp312-cp312-win_amd64.whl
Size 926.2 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f87b6565f8b4d1b99a9308f4d34c9dca248fcf99c809a8b5c9b1d703f9bef2be
BLAKE2b-256 checksum
How to use checksums
cb8f81900cc893e0c9eddda44b41c601dc07df8f0d64c2d1bd847de37776b4c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp312-cp312-win32.whl

Download URL pyballistics-1.2.1-cp312-cp312-win32.whl
Size 869.0 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
370f611148f45dca968c9a83dd540d0e01ca1866ae993ecaecc5d90c0cae2bff
BLAKE2b-256 checksum
How to use checksums
6ccbd9f80d5d53377c960fa6ac1475d16551f6336242f8f566ddaa32cc08fa24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL pyballistics-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl
Size 2.7 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
04059e865a3701c24193db884ebfd40a3094cd606fcb9918ff3cd65bf20ceaa4
BLAKE2b-256 checksum
How to use checksums
b75b7d1c0397bcf4616be152abb0f7b1c577677ea6ecd67a8fc89b9d05a51299
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pyballistics-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.8 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a21a1ef4dcd161b8bdbf7d295368c058129e7549b633896e6d7d50203b61d30c
BLAKE2b-256 checksum
How to use checksums
56b075ea9f22378435f4089b1b1738dca28d375617ace3de7abc6aadbc683247
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL pyballistics-1.2.1-cp312-cp312-macosx_11_0_arm64.whl
Size 959.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
04d37a2b58b78d9461dd08ea000109ff4ab9501018d4edcddee2b3df8e2bdff7
BLAKE2b-256 checksum
How to use checksums
d4d835e8eb1bfa0a595d6708b974945c32e1690f9262849bbe70a3c18094db15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp311-cp311-win_amd64.whl

Download URL pyballistics-1.2.1-cp311-cp311-win_amd64.whl
Size 929.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
b1b2d9534d1239c280ef5587469104be45f82c21fabb7a9c18647e4e3d90ed02
BLAKE2b-256 checksum
How to use checksums
2744dd918b05a379e5952633a809d967773c85deca1f840567b0ebd148223d7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp311-cp311-win32.whl

Download URL pyballistics-1.2.1-cp311-cp311-win32.whl
Size 873.6 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
888168f5e93df43a04d5cf8c5a4bdb2066bcc68363d2b5b52df986c687dd17c4
BLAKE2b-256 checksum
How to use checksums
2d9b9b8c512ea475aefdda916e81e1d70d8909cbcba98b528860fb42fcfdad14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL pyballistics-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl
Size 2.8 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
e441c1197fc6b01236834a741c42f6fd4ec01ca0ff79144829cbb228f755c2c2
BLAKE2b-256 checksum
How to use checksums
82924366ddb153c0ab9a15d328ec1079c0fae9133ad7f6bdda7bcec7530c953a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pyballistics-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.8 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4a4ab14f24a6d764ebab01a0dc29b8ba321a09cb56ad7c0b34685f9d33bb07cd
BLAKE2b-256 checksum
How to use checksums
1b8d01caf3ee8b2bfe73290e6616a1fa5a1c040f6012ef16f7c17cc4ee43bb00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL pyballistics-1.2.1-cp311-cp311-macosx_11_0_arm64.whl
Size 958.3 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4919c81cf44c11de3ee72601a2e10e2137f300a0cd8716d27bd1878201f3603b
BLAKE2b-256 checksum
How to use checksums
d939eb21d726fe7c9ac22467cd811a94b81b111ddb2e85f89a678254461ace15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp310-cp310-win_amd64.whl

Download URL pyballistics-1.2.1-cp310-cp310-win_amd64.whl
Size 929.9 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
048d8a15d49ec20b9647de52603075c9280aa066194e1580f62dab2a26ebbebe
BLAKE2b-256 checksum
How to use checksums
8eb9e958554dc2f1f1dc71977f326c1b2df6c0f50d499843737cb138610be9cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp310-cp310-win32.whl

Download URL pyballistics-1.2.1-cp310-cp310-win32.whl
Size 875.2 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
2a72f540a5c298d8a50dffd77e587f8788eff40c93dfee0744e9789d9930d734
BLAKE2b-256 checksum
How to use checksums
ba2ac114b8a83a200e3739de75a75b6ca2c7134001583c46caab59dbb580567a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL pyballistics-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl
Size 2.7 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
3793bcad52e6fb071c8f2fc63e6b5eba1fe7703a6ce108df5a85cbe83a75fc1f
BLAKE2b-256 checksum
How to use checksums
63a3f830ecabb260a9e746f5d8b1b64f2a98b418c530c2befebdd2771db2288c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pyballistics-1.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.7 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
199c4960878e19037302c14c31523ebf1109d4a4b6d369d71046d05902008db2
BLAKE2b-256 checksum
How to use checksums
9b1b0da89ae86d538cb8de11ce0b97230298194e5003108f579752aec733de3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL pyballistics-1.2.1-cp310-cp310-macosx_11_0_arm64.whl
Size 959.7 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
95baa4c0eaf224445864eeb1ab1b7b21a745986b6dc45155659bc759c7a2e6e4
BLAKE2b-256 checksum
How to use checksums
817975c5780395dc68abe9283eb13982e53c53da38a26062884f7e2f822a737a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp39-cp39-win_amd64.whl

Download URL pyballistics-1.2.1-cp39-cp39-win_amd64.whl
Size 930.7 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
61446eaa49565916c6de67b0cde12d3c8706d1d9a194b80448111c56cc64d14b
BLAKE2b-256 checksum
How to use checksums
db5ec102f3a155cdb63de1b097dd559a866a0fc4fa7ed454b5f1e4ef0e5cc4a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp39-cp39-win32.whl

Download URL pyballistics-1.2.1-cp39-cp39-win32.whl
Size 875.9 kB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
d78f99dcb5ee8118d073ee1da33fe0b90d7e2950f2cb53b1bf50b3bea8ffe129
BLAKE2b-256 checksum
How to use checksums
fdda1adb27cd37a0ada7758f69a4155a0cadf6d78e8d10bcf60f2c55f25f86dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl

Download URL pyballistics-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl
Size 2.7 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
a7541df76e5199cbf5c98269e445bdad9cbaae9664bba92ca648d470b7a30ade
BLAKE2b-256 checksum
How to use checksums
005e449d45c464d155e65bda851b5ffda02686413a03313679b94deacf0612d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pyballistics-1.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1b5fcceaf5874d77e93999f6128a39ef7dfe3d0e1d0d8daa7a6d4d40e53cb17e
BLAKE2b-256 checksum
How to use checksums
44465ea1b899368cc1fff85f46e93d643d7df1c6ca0373bb5350d4870f37aab0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release files / pyballistics-1.2.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL pyballistics-1.2.1-cp39-cp39-macosx_11_0_arm64.whl
Size 961.2 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
facd61564310d34f0124992d437f6c0c6d295d56eb745df98ad8245968bb4e04
BLAKE2b-256 checksum
How to use checksums
269e3d93a35db2c1fbcce3a0c8db14d569d99bbbee965fadebd9486b51251038
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.1 This release

21 release files

1.1.3

2 release files

1.1.2

3 release files

1.1.0

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

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