Skip to main content

IBM Netezza python driver - extended fork

Project description

nzpy_extended: High-performance IBM Netezza driver for Python

nzpy_extended is a hard fork of IBM nzpy — enriched with new features, major performance improvements via a C extension, and expanded platform support.

Key differences from upstream nzpy

Feature nzpy (IBM) nzpy_extended
Row parsing performance (mixed types, macOS) ~10 000 rows/s ~63 000 rows/s (no C ext) → ~93 000 rows/s (+ C ext)
Supported Python 3.5+ 3.12, 3.13, 3.14
Platform wheels ❌ None ✅ Linux x64, macOS ARM, Windows x64 (pre-built)
Async support ✅ Fully async API
Streaming bulk loading load_data() accepts sync and async iterables; load_csv() streams local CSV files
Sync API (DB-API 2.0) ✅ Full feature parity with async

Windows 11

Data type official nzpy nzpy_extended (no C ext) nzpy_extended (+ C ext) vs. ODBC
INTEGER ~18 k rows/s ~196 k rows/s ~256 k rows/s ≈ ODBC (~239 k)
NUMERIC ~10 k rows/s ~75 k rows/s ~97 k rows/s ≈ ODBC (~90 k)
STRING ~18 k rows/s ~75 k rows/s ~79 k rows/s ≈ ODBC (~69 k)
DATETIME ~18 k rows/s ~135 k rows/s ~255 k rows/s ≈ ODBC (~249 k)
BOOLEAN ~23 k rows/s ~243 k rows/s ~401 k rows/s ≈ ODBC (~359 k)
Mixed ~4 900 rows/s ~36 k rows/s ~45 k rows/s ≈ ODBC (~44 k)

WSL2 (Linux x86_64)

Data type official nzpy nzpy_extended (no C ext) nzpy_extended (+ C ext) vs. ODBC
INTEGER ~21 k rows/s ~203 k rows/s ~640 k rows/s ~92 k rows/s
NUMERIC ~11 k rows/s ~79 k rows/s ~150 k rows/s ~63 k rows/s
STRING ~22 k rows/s ~71 k rows/s ~160 k rows/s ~80 k rows/s
DATETIME ~21 k rows/s ~126 k rows/s ~407 k rows/s ~111 k rows/s
BOOLEAN ~25 k rows/s ~186 k rows/s ~418 k rows/s ~192 k rows/s
Mixed ~5.4 k rows/s ~33 k rows/s ~49 k rows/s ~20 k rows/s

Note: WSL2 results were obtained on the same Netezza server as Windows 11 (192.168.0.144) — the higher throughput reflects Linux network stack efficiency. ODBC results use a ctypes-based ANSI-ODBC fallback (because pyodbc's Unicode API is incompatible with the Netezza ODBC driver on Linux). This wrapper fetches every cell individually via SQLGetData, so ODBC numbers on WSL2 are understated vs. native pyodbc on Windows (which uses SQLBindCol batch fetching). The real ODBC-vs-native gap on Linux is likely smaller.

macOS ARM64 (Apple M4)

Benchmarks run on a Mac mini (Apple M4, 16 GB RAM) — same Netezza server at 192.168.0.144. 100 k rows per query.

Data type official nzpy nzpy_extended (no C ext) nzpy_extended (+ C ext)
INTEGER ~44 k rows/s ~356 k rows/s ~726 k rows/s
NUMERIC ~22 k rows/s ~122 k rows/s ~195 k rows/s
STRING ~39 k rows/s ~143 k rows/s ~183 k rows/s
DATETIME ~42 k rows/s ~253 k rows/s ~683 k rows/s
BOOLEAN ~53 k rows/s ~449 k rows/s ~786 k rows/s
Mixed ~10 k rows/s ~63 k rows/s ~93 k rows/s

The C extension accelerates integer, decimal, datetime, and boolean parsing by avoiding Python object allocations per field and struct.unpack overhead. String parsing is primarily network-bound, so the C extension offers minimal benefit there.

If the compiled extension is not available (unsupported platform or Python version), the driver gracefully falls back to pure Python with identical semantics.

Installation

The package is available on PyPI:

pip install nzpy-extended

Pre-built wheels are provided for:

Platform Architecture Python
Linux x86_64 (manylinux) 3.12 / 3.13 / 3.14
macOS ARM64 (Apple Silicon) 3.12 / 3.13 / 3.14
Windows x86_64 3.12 / 3.13 / 3.14

For other platforms or Python versions, pip install will compile the C extension from source (requires a C compiler: GCC, Clang, or MSVC). On systems without a compiler the install will fail — use a supported platform or version.

Quick Start

Sync — scripts, ETL, Jupyter, Django

import nzpy_extended.sync as nzpy

conn = nzpy.connect(
    user="admin", password="password",
    host="netezza-host", database="mydb",
)

# --- Basic query ---
with conn.cursor() as cur:
    cur.execute("SELECT 1")
    print(cur.fetchone())  # [1]

# --- One-shot convenience (pyodbc pattern) ---
row = conn.execute("SELECT version()").fetchone()
print(row[0])

# --- Parameter binding ---
cur.execute("SELECT id, name FROM users WHERE active = ?", (1,))
for row in cur:
    print(row)

# --- Cursor iteration (batched, arraysize=100) ---
cur.execute("SELECT * FROM large_table")
for row in cur:            # fetches 100 rows per round-trip
    process(row)

# --- Method chaining (PEP 249) ---
rows = cur.execute("SELECT 1, 2, 3").fetchall()

# --- Explicit transaction control ---
conn.autocommit = False
cur.execute("INSERT INTO users (name) VALUES ('Alice')")
cur.execute("INSERT INTO users (name) VALUES ('Bob')")
conn.commit()               # or conn.rollback()
conn.autocommit = True

# --- Transaction context manager ---
with conn.transaction():
    cur.execute("INSERT INTO users (name) VALUES ('Charlie')")
    # auto-commits on success, auto-rollbacks on exception

# --- Timeout (pyodbc-compatible properties) ---
conn.timeout = 5.0          # default for all new cursors
cur = conn.cursor()         # inherits timeout=5.0
cur.execute("SELECT ...")   # raises OperationalError after 5s

cur.timeout = 10.0          # per-cursor override
cur.execute("SELECT ...", timeout=3.0)  # per-execute override wins

# --- Stored procedures ---
result = cur.callproc("sp_add_numbers", [10, 20])
rows = cur.fetchall()

# --- Server notices (RAISE NOTICE) ---
for msg in cur.messages:
    print("Notice:", msg)

# --- PEP 249 rownumber ---
cur.execute("SELECT * FROM t")
print(cur.rownumber)  # 0
cur.fetchone()
print(cur.rownumber)  # 1

# --- Column metadata ---
desc = cur.description       # 7-tuple after execute()
schema = cur.get_schema_table()  # rich metadata as list[dict]

# --- Cancel / interrupt ---
conn.cancel()                # stops running query, session survives
cur.interrupt()              # alias

# --- Connection state ---
print(conn.closed)           # False
conn.close()
print(conn.closed)           # True

Async — FastAPI, asyncio

import asyncio
import nzpy_extended as nzpy

async def main():
    async with await nzpy.connect(
        user="admin", password="password",
        host="netezza-host", database="mydb",
    ) as conn:
        # --- Basic query ---
        async with conn.cursor() as cur:
            await cur.execute("SELECT id, name FROM users WHERE active = ?", (1,))
            return await cur.fetchall()

        # --- One-shot convenience ---
        row = await (await conn.execute("SELECT version()")).fetchone()

        # --- Async iteration (streaming) ---
        cur = conn.cursor()
        await cur.execute("SELECT * FROM large_table")
        async for row in cur:
            process(row)

        # --- Timeout ---
        await cur.execute("SELECT pg_sleep(999)", timeout=3.0)
        # raises OperationalError after 3s

        # --- Stored procedures ---
        result = await cur.callproc("sp_add_numbers", [10, 20])

        # --- Notices ---
        for msg in cur.messages:
            print("Notice:", msg)

asyncio.run(main())

FastAPI with connection pool

from fastapi import FastAPI, Depends
import nzpy_extended as nzpy
import nzpy_extended.fastapi as nzpy_fastapi

pool = nzpy.NzPool(
    min_size=2, max_size=10,
    host="netezza-host", database="mydb",
    user="admin", password="password",
)

app = FastAPI(lifespan=nzpy_fastapi.lifespan(pool))

@app.get("/users")
async def get_users(conn=Depends(nzpy_fastapi.get_connection)):
    async with conn.cursor() as cur:
        await cur.execute("SELECT * FROM users LIMIT 100")
        return await cur.fetchall()

Sync connection pool

import nzpy_extended.sync as nzpy
from nzpy_extended import SyncPool

pool = SyncPool(
    min_size=2, max_size=10,
    host="netezza-host", database="mydb",
    user="admin", password="password",
)
with pool.connection() as conn:
    conn.execute("SELECT 1").fetchone()
pool.close_all()

Bulk data loading via external table protocol

load_data() inserts rows from a Python iterable or async iterable into a Netezza table using the native external table protocol (REMOTESOURCE 'python'). It supports optional automatic table creation. Lists and tuples are materialized as CSV bytes; generators, async generators, and other iterables are streamed to Netezza in chunks.

# --- Sync ---
import nzpy_extended.sync as nzpy
conn = nzpy.connect(...)
count = conn.load_data("my_table", [(1, "Alice"), (2, "Bob")])

# --- Async ---
import nzpy_extended as nzpy
conn = await nzpy.connect(...)
count = await nzpy.load_data(conn, "my_table", [(1, "Alice"), (2, "Bob")])

# --- Auto-infer types from data ---
rows = [(1, "Alice", 100.50), (2, "Bob", 200.75)]
count = conn.load_data("my_table", rows)
# Creates: col1 SMALLINT, col2 VARCHAR(255), col3 NUMERIC

# --- Explicit columns ---
count = conn.load_data(
    table_name="products",
    rows=[(101, "Widget", 9.99)],
    columns=[("id", "INT"), ("name", "VARCHAR(200)"), ("price", "NUMERIC(10,2)")],
)

# --- Generator for large datasets ---
def generate_rows(n):
    for i in range(n):
        yield (i, f"item_{i}")
count = conn.load_data("my_table", rows=generate_rows(50000))

# --- Async generator for streaming ---
async def generate_rows_async(n):
    for i in range(n):
        yield (i, f"item_{i}")
count = await nzpy.load_data(conn, "my_table", rows=generate_rows_async(50000))

Parameters:

Parameter Default Description
conn / table_name / rows (required) Connection, target table, row iterable
columns None [(name, nz_type), ...] or None for auto-infer from data
delimiter '|' Field delimiter
encoding 'LATIN9' Text encoding ('UTF8' for NVARCHAR)
create_if_missing True Auto-create table if not exists
temporary False Create TEMP TABLE
distribute_on_random True Add DISTRIBUTE ON RANDOM
logdir temp dir Netezza log directory
escape_char '\\' Escape character for delimiter within values

Streaming CSV import via load_csv()

load_csv() streams a local CSV file directly into a Netezza table without loading the whole file into memory. It inspects a sample of rows to infer column types when create_if_missing=True, then uses the external table protocol to load the remaining data.

# --- Sync ---
import nzpy_extended.sync as nzpy
conn = nzpy.connect(...)
count = conn.load_csv("my_table", "C:/data/input.csv",
                      delimiter=',', has_header=True, encoding='UTF8')

# --- Async ---
import nzpy_extended as nzpy
conn = await nzpy.connect(...)
count = await nzpy.load_csv(conn, "my_table", "data/input.csv",
                            delimiter=',', has_header=True, encoding='UTF8')
Parameter Default Description
conn / table_name / csv_path (required) Connection, target table, path to local CSV
delimiter ',' Field delimiter
has_header True Use first row as column names when inferring schema
sample_size 1000 Rows read for type inference
encoding 'UTF8' File encoding
create_if_missing True Auto-create table from inferred types
temporary False Create TEMP TABLE
distribute_on_random True Add DISTRIBUTE ON RANDOM
escape_char '\\' Escape character for delimiter within values
logdir temp dir Netezza log directory

Metadata API (catalog introspection)

The conn.meta object provides async access to Netezza system catalog views — tables, columns, views, procedures, distribution keys, storage stats, sessions, and more. All queries run against the current database; connect to SYSTEM for system-wide objects.

import nzpy_extended as nzpy

async def main():
    conn = await nzpy.connect(user="admin", password="password",
                              host="netezza-host", database="mydb")

    # --- Schemas & databases ---
    schemas = await conn.meta.get_schemas()       # ["ADMIN", "INFORMATION_SCHEMA", ...]
    dbs     = await conn.meta.get_databases()     # ["JUST_DATA", "SYSTEM", ...]
    db_name = await conn.meta.get_current_database()   # "JUST_DATA"

    # --- Tables ---
    tables = await conn.meta.get_tables(schema="ADMIN")
    # [{"schema": "ADMIN", "table_name": "DIMDATE", "owner": "ADMIN",
    #   "objtype": "TABLE", "objid": 123456, "row_count": 500000}, ...]

    tables = await conn.meta.get_tables(
        schema="ADMIN", table_pattern="DIM%", include_system=False,
    )

    # --- Views (includes view definition SQL) ---
    views = await conn.meta.get_views(schema="ADMIN")
    # [{"schema": "ADMIN", "view_name": "V_SALES", "owner": "ADMIN",
    #   "objid": 789012, "definition": "CREATE VIEW V_SALES AS SELECT ..."}, ...]

    # --- Columns ---
    cols = await conn.meta.get_columns("DIMDATE", schema="ADMIN")
    # [{"column_name": "DATEKEY", "ordinal": 1,
    #   "data_type": "DATE", "nullable": "N"}, ...]

    # Dot-notation also works:
    cols = await conn.meta.get_columns("ADMIN.DIMDATE")

    # --- Distribution key ---
    dk = await conn.meta.get_distribution_key("FACT_SALES", schema="ADMIN")
    # ["CUSTOMER_ID"]  or [] for RANDOM distribution

    # --- Table sizes ---
    sizes = await conn.meta.get_table_sizes(schema="ADMIN")
    # [{"schema": "ADMIN", "table_name": "FACT_SALES",
    #   "used_bytes": 500000000, "allocated_bytes": 600000000,
    #   "size_mb": 476, "skew": 1.2}, ...]

    # --- Stored procedures ---
    procs = await conn.meta.get_procedures(schema="ADMIN")
    # [{"schema": "ADMIN", "proc_name": "SP_LOAD_DATA",
    #   "owner": "ADMIN", "signature": "SP_LOAD_DATA(VARCHAR(256))",
    #   "returns": "INTEGER", "source": "CREATE PROCEDURE ..."}, ...]

    # --- Sequences & synonyms ---
    seqs = await conn.meta.get_sequences(schema="ADMIN")
    syns = await conn.meta.get_synonyms(schema="ADMIN")

    # --- Sessions ---
    sessions = await conn.meta.get_sessions()
    # [{"session_id": 123, "username": "ADMIN", "database_name": "JUST_DATA",
    #   "conntime": datetime(...), "priority": 0, "status": "active"}, ...]

    # --- Users & groups ---
    users  = await conn.meta.get_users()
    groups = await conn.meta.get_groups()

    # --- Query history (requires history collection enabled) ---
    history = await conn.meta.get_query_history(limit=50, username="ADMIN")

    # --- Search across tables, views, procedures ---
    results = await conn.meta.search_objects("SALES%", schema="ADMIN")
    # [{"object_type": "TABLE", "schema": "ADMIN",
    #   "object_name": "FACT_SALES", "owner": "ADMIN", "objid": 123}, ...]

asyncio.run(main())
Method Returns Notes
get_schemas() list[str] All schemas in current database
get_databases() list[str] All databases visible to user
get_current_database() str Current database name
get_current_schema() str Current schema (search path)
get_tables(schema, pattern, include_system) list[dict] Tables: schema, table_name, owner, objtype, objid, row_count
get_views(schema, pattern) list[dict] Views: schema, view_name, owner, objid, definition (SQL!)
get_columns(table, schema) list[dict] Columns: column_name, ordinal, data_type, nullable, objid
get_distribution_key(table, schema) list[str] Distribution column names (empty = RANDOM)
get_table_sizes(schema, pattern) list[dict] Sizes: used_bytes, allocated_bytes, size_mb, skew
get_procedures(schema, pattern) list[dict] Procs: schema, proc_name, owner, signature, returns, source
get_sequences(schema) list[dict] Sequences: schema, seq_name, owner, objid
get_synonyms(schema) list[dict] Synonyms: schema, synonym_name, ref_database, ref_schema, referenced_object
get_sessions() list[dict] Active sessions: session_id, username, database_name, conntime, priority
get_users() list[dict] Users: username, objid
get_groups() list[dict] Groups: groupname, objid
get_query_history(limit, user) list[dict] History: session_id, username, query_text, submit_time, result_rows
search_objects(pattern, schema) list[dict] Unified search: object_type (TABLE/VIEW/PROCEDURE), schema, object_name

API Reference

Feature Async Sync Notes
connect() nzpy.connect(...) nzpy.sync.connect(...)
cursor() conn.cursor() conn.cursor() Returns Cursor / SyncCursor
execute(sql, params) await cur.execute(...) cur.execute(...) PEP 249, returns cursor
executemany(sql, seq) await cur.executemany(...) cur.executemany(...) Partial failure preserves rowcount
callproc(name, params) await cur.callproc(...) cur.callproc(...) CALL proc_name(args)
fetchone() await cur.fetchone() cur.fetchone() Returns row or None
fetchmany(n) await cur.fetchmany(n) cur.fetchmany(n) Default arraysize=100
fetchall() await cur.fetchall() cur.fetchall()
nextset() await cur.nextset() cur.nextset()
description cur.description cur.description 7-tuple, available after execute
rowcount cur.rowcount cur.rowcount Rows affected
rownumber cur.rownumber cur.rownumber PEP 249, 0-based index
messages cur.messages cur.messages Server notices
arraysize cur.arraysize cur.arraysize Default 100
get_schema_table() cur.get_schema_table() cur.get_schema_table() Rich metadata
conn.execute(sql) await conn.execute(...) conn.execute(...) One-shot convenience
conn.timeout conn.timeout = N Default timeout for cursors
cur.timeout cur.timeout = N Per-cursor timeout
autocommit conn.autocommit conn.autocommit Get/set, default True
closed conn.closed Read-only
commit() / rollback() await conn.commit() conn.commit()
cancel() await conn.cancel() conn.cancel() Session survives
transaction() conn.transaction() Context manager
load_data() await nzpy.load_data(...) nzpy.sync.load_data(...) Bulk insert via external table
conn.load_data() await conn.load_data(...) conn.load_data(...) Method form
conn.meta.get_tables() await conn.meta.get_tables(...) Catalog metadata (async only)
NzPool / SyncPool nzpy.NzPool(...) nzpy.SyncPool(...) Connection pooling

Documentation

Requirements

  • Python ≥ 3.12
  • CPython (PyPy not supported for C extension, pure-Python fallback only)

Testing

Running the test suite

Tests require a running Netezza instance. Set the connection environment variables:

export NZ_DEV_HOST=your_netezza_host
export NZ_DEV_PORT=5480
export NZ_DEV_DB=JUST_DATA
export NZ_DEV_USER=admin
export NZ_DEV_PASSWORD=password

Run all tests:

pytest tests/ -v

C Extension / Pure Python parity

The C extension and pure-Python fallback must produce identical results for all data types. Parity tests verify this in two ways:

Unit tests (tests/test_c_python_parity_unit.py) — compare individual C parser functions against Python reference implementations byte-by-byte. No database required.

pytest tests/test_c_python_parity_unit.py -v

Integration tests (tests/test_c_python_parity_integration.py) — run real SQL queries through both code paths and verify results match. Requires a database.

pytest tests/test_c_python_parity_integration.py -v

Verification script — runs both test suites in C-extension and pure-Python modes side-by-side:

python tools/verify_c_python_parity.py

Disabling C extension at runtime:

Set the environment variable NZPY_EXTENDED_NO_CEXT=1 to force pure-Python mode even when the compiled extension is available. Useful for debugging or verifying fallback correctness.

NZPY_EXTENDED_NO_CEXT=1 pip install nzpy_extended
# or at runtime:
NZPY_EXTENDED_NO_CEXT=1 python -c "import nzpy_extended.core; print(nzpy_extended.core._HAVE_C_EXT)"  # False

Reproducing benchmark results

The per-type benchmark table above is generated by tools/examples/performance_test.py.

Prerequisites

  • A running Netezza instance with a table named JUST_DATA..FACTPRODUCTINVENTORY (or adjust SOURCE_TABLE in the script)
  • Python ≥ 3.12
  • Install the required packages:
pip install nzpy_extended

The official IBM driver is also tested for comparison (pip install nzpy).

Optional (for ODBC comparison):

  • pip install pyodbc — with NetezzaSQL ODBC driver installed (rows labeled pyodbc)
  • Set NZ_ODBC_DRIVER if your ODBC driver uses a different name (default: NetezzaSQL). On Linux/WSL2 the name is defined in /etc/odbcinst.ini, e.g.:
    export NZ_ODBC_DRIVER=NetezzaSQL  # Linux/WSL2
    
  • Linux/WSL2: pyodbc's Unicode API is incompatible with the Netezza ODBC driver. The benchmark auto-detects this and falls back to a ctypes-based ANSI-ODBC wrapper. No additional configuration needed.

Steps

  1. Set connection environment variables:
set NZ_HOST=your_netezza_host     # Windows
set NZ_PORT=5480
set NZ_USER=admin
set NZ_PASSWORD=password
set NZ_DATABASE=JUST_DATA

# or on Linux/macOS:
export NZ_HOST=your_netezza_host
export NZ_PORT=5480
export NZ_USER=admin
export NZ_PASSWORD=password
export NZ_DATABASE=JUST_DATA

All variables have defaults — only NZ_HOST is required if your setup differs from the defaults.

ODBC driver name can be set separately:

export NZ_ODBC_DRIVER=NetezzaSQL  # Linux/macOS — defaults to "NetezzaSQL"
  1. Run the benchmark:
python tools/examples/performance_test.py
  1. Adjust row count (default: 100 000):
set NZ_ROWS=100000     # Windows
export NZ_ROWS=100000  # Linux/macOS

What the script does

  1. Connects using each driver: official_nzpy (always), pyodbc (via ANSI-ODBC ctypes fallback on Linux), nzpy_extended (async + sync, with and without C extension).
  2. Runs six query categories: integer_types, numeric_types, string_types, datetime_types, boolean_types, and all_types (mixed).
  3. Prints per-query timing, a compact DRIVER × TYPE comparison table (matching the README layout), and visual bar charts.

Saving results to a TXT file

Use the --output / -o flag or the NZ_OUTPUT environment variable:

python tools/examples/performance_test.py -o benchmark_results.txt

# or via env var:
set NZ_OUTPUT=benchmark_results.txt
python tools/examples/performance_test.py

Force pure-Python mode

set NZPY_EXTENDED_NO_CEXT=1
python tools/examples/performance_test.py

Pytest benchmark (alternative)

A simpler pytest-based benchmark is also available (10 k rows, nzpy_extended only):

pytest tests/test_benchmark.py -v -m benchmark

License

Apache License 2.0 — see LICENSE.

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

nzpy_extended-0.3.4.tar.gz (146.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nzpy_extended-0.3.4-cp313-cp313-win_arm64.whl (101.9 kB view details)

Uploaded CPython 3.13Windows ARM64

nzpy_extended-0.3.4-cp313-cp313-win_amd64.whl (102.2 kB view details)

Uploaded CPython 3.13Windows x86-64

nzpy_extended-0.3.4-cp313-cp313-musllinux_1_2_x86_64.whl (143.8 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

nzpy_extended-0.3.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (147.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

nzpy_extended-0.3.4-cp313-cp313-macosx_11_0_arm64.whl (100.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

nzpy_extended-0.3.4-cp313-cp313-macosx_10_13_universal2.whl (112.2 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

nzpy_extended-0.3.4-cp312-cp312-win_arm64.whl (101.9 kB view details)

Uploaded CPython 3.12Windows ARM64

nzpy_extended-0.3.4-cp312-cp312-win_amd64.whl (102.2 kB view details)

Uploaded CPython 3.12Windows x86-64

nzpy_extended-0.3.4-cp312-cp312-musllinux_1_2_x86_64.whl (143.8 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

nzpy_extended-0.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (147.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

nzpy_extended-0.3.4-cp312-cp312-macosx_11_0_arm64.whl (100.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

nzpy_extended-0.3.4-cp312-cp312-macosx_10_13_universal2.whl (112.2 kB view details)

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

File details

Details for the file nzpy_extended-0.3.4.tar.gz.

File metadata

  • Download URL: nzpy_extended-0.3.4.tar.gz
  • Upload date:
  • Size: 146.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nzpy_extended-0.3.4.tar.gz
Algorithm Hash digest
SHA256 27302f8ce3b8ec51f4b6087436edca53a5f568a67c6c62622afd6207412941f1
MD5 f1348f4e77c0558b101161131878f977
BLAKE2b-256 aafb27299f3d617f5f567555255d8736b5555b8c9a62b64ffb30bc8dbf453fb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4.tar.gz:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 2a1a7c922d8fd22ae0d5f4f90857af08b88525b1111a8eba0972092f7e87721d
MD5 aebb934770b1ff1ff443afcafbd44f83
BLAKE2b-256 1bd648497288ac608adce9ab7955315f296058fd9da134f201091fee871df010

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-win_arm64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 903754996148d5bca866a9af66493484514ec67920152662ddc58c99e61ec02a
MD5 8ed9dfa384db85c2fb10ce056a872fbf
BLAKE2b-256 6fc6656d2f8ff454a87fe11544128ba0bf98a5c7f3bd36239efddbd89dae3efc

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-win_amd64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b203e7914991de6e5a7a7f30b2d6fdf85516daf5c1ce8c8df68169fc2e424ab1
MD5 ab2db0238f251c1ef1935305418d2732
BLAKE2b-256 fcc9a283cdca5bbc985723feb2e885e3e2e29ae926b64fe729c076d6b86960c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 82dc1c2f08f931aac74d2b47b9c98ac9126cea52a8543bf1ce1e63cc04321825
MD5 a783a7c5ae762897c8261858c1f89b5b
BLAKE2b-256 4a3fa0c4ccbb17417b4edad501d4fedeb585685f0a73bade473dc60259ad06fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cb10ae4dbd77d15b1f802b380054efe2d6ce02c31a1aceba7d4406fe9c5d664
MD5 02b29c597ae92d2b85b2fe7286b86a5f
BLAKE2b-256 674ff74679b0365f8c5b17767c15647b4015069a6242878c8e62f9c3597966a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4f37b1a50364acaa590b76f324cad8c64b553a08e06b28809dfc81875b45e3cc
MD5 428d7b4600b168df127403a6d9fc436f
BLAKE2b-256 0d979fdf58394b9d5c55e5262f8bea5e3d8eaa62defa3de5ec51498dfd914650

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 692c8a47d5bc57f6cee12e72eb457900dcf37e6ecd2e80a67e16f5991eed71eb
MD5 a58d281745139249a22459a39aaa899f
BLAKE2b-256 5c2ac89f7b0b11ec78899acc60ff491280cd7b04137e54af6e2ba2ccd49221f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-win_arm64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 edb7487dd7222da18a125a8da08ec2be684fc667917c2d88b4cf92a2a32ed1a4
MD5 e054ef1aeaf1e993b81fcd8d30cfb908
BLAKE2b-256 5db68d6a9bdb09cd9abea29a2cca13955284bc13ac6c955e6b6de673a24c6dfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-win_amd64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 24307c7a44d32361194bcbfa2c4f556123bbd92b21df4a05a5c70fddaa4b5937
MD5 593a9b13f1c34313d6c5e070ad5588df
BLAKE2b-256 77304c75b4ef48c028fbce57541c084dd7bf6d8d5e550c465b957ed3dcc42c5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1fff597428b04e1a339f3eb679f1a6eb1c802ee93785efdce3fdf317b735d096
MD5 e1fe1f1a01a32dd3c411c123c6967f59
BLAKE2b-256 dec60d9ffd8abdaf4f071bee03b7f43a08a507f1b85209738e28f7124e3eb5b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 82e40b09fdca121b9d74ba8678ad24e4c686d2e384532670f7c7011ff35dd8ba
MD5 c072364c64c4088e1de8aa2df93974f1
BLAKE2b-256 7594bc1f3e033c7e74da1730bfd854f7422cf41ccbfa05c097f433a1b98542cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nzpy_extended-0.3.4-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for nzpy_extended-0.3.4-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e79b48f83d313194242e5a04503a18b607d62b080ddf536662baadf085cf8d58
MD5 ed1914b77bf787b330e2bf674a2c6e38
BLAKE2b-256 1ab017b6bc87d4bf5fe1e76fb23f6cc572303bdfd64313ee7707b9600b0c6f28

See more details on using hashes here.

Provenance

The following attestation bundles were made for nzpy_extended-0.3.4-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: publish.yaml on KrzysztofDusko/nzpy_extended

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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