agentleFS
MicrosoftKnown publishermicrosoft/voxelpic/.github/skills/python-testing/SKILL.md

python-testing

Skill0 starsChanged 8 months agoMITView on GitHub

Write and run Python tests for the VoxelPic library. USE FOR: adding new pytest test cases, understanding the Python API and test patterns, debugging Python test failures, or running the existing Python test suite.

  • Installs packages

53 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use django-verification, python-patterns and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • mstuder-slalomSkill

    django-verification

    Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.

    Also in 9 projects that use this

  • xenitV1Skill

    python-patterns

    Python development principles and decision-making. Framework selection, async patterns, type hints, project structure. Teaches thinking, not copying.

    Also in 22 projects that use this

  • HABUBUSSSkill

    project-guidelines-example

    Also in 8 projects that use this

  • AshfaqbsSkill

    springboot-tdd

    Test-driven development for Spring Boot using JUnit 5, Mockito, MockMvc, Testcontainers, and JaCoCo. Use when adding features, fixing bugs, or refactoring.

    Also in 7 projects that use this

  • mstuder-slalomSkill

    springboot-security

    Spring Security best practices for authn/authz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services.

    Also in 8 projects that use this

  • nek1987Skill

    postgres-patterns

    PostgreSQL patterns for reviewing migrations and writing efficient queries. Use when reviewing Alembic migrations, optimizing queries, or debugging database issues.

    Also in 15 projects that use this

  • +2 more from mstuder-slalom

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 1 is distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 48 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Add tests to test/test_python_api.py (or create a new test/test_*.py file).

    line 68
  2. Very specific:

    Use @pytest.mark.parametrize for depth variation:

    line 90
  3. Distinctive:

    Use NumPy testing assertions for array comparisons:

    line 100
  4. Very specific:

    Use standard assert for scalar values:

    line 107
  5. Very specific:

    Use pytest built-in fixtures.

    line 116
  6. Very specific:

    No custom fixtures or conftest.py exist — tests are self-contained.

    line 126

“Common” is measured: kept by at least 6 in 10 of the 48 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Testing the Python Library

Test Suite Overview

Python tests live in test/test_python_api.py and run with pytest. The test file exercises the public API exposed by the voxelpic package — encode, decode, image_shape, voxel_size, PointCloud, and DecodeResult — which delegate to the _voxelpic C extension module.

Test FunctionParametrizedWhat It Tests
test_transcodedepth 7,8,9Full encode → decode → re-encode round-trip
test_ionoPointCloud.save() / PointCloud.load() binary I/O

Installing and Running

pip install -e .[test]    # editable install with test dependencies
pytest -vv                # run all tests from repo root

The [test] extra installs pytest, pytest-md, pytest-emoji, and pytest-cov.

Useful Commands

pytest test/test_python_api.py -vv                 # run only Python tests
pytest test/test_python_api.py::test_transcode -vv # single test function
pytest test/test_python_api.py::test_transcode[9]  # single parametrized case
pytest --cov=voxelpic --cov-report=term-missing    # with coverage

Python API Surface

The C extension _voxelpic exposes four functions consumed by src/voxelpic.py:

C Extension FunctionPython WrapperPurpose
_voxelpic.encode()voxelpic.encode()Point cloud → RGBA image
_voxelpic.decode()voxelpic.decode()RGBA image → DecodeResult
_voxelpic.image_shape()voxelpic.image_shape()Image (height, width) for a depth
_voxelpic.voxel_size()voxelpic.voxel_size()Voxel side length for a depth

Key Types

  • PointCloud — NamedTuple with positions (Nx4 float32) and colors (Nx4 uint8). Has to3() / to4() conversion methods and save() / load() for binary I/O.
  • DecodeResult — NamedTuple with positions, colors, count, depth. Has a .cloud property that returns a PointCloud.

Array Constraints (validated in the C extension)

  • Positions: Nx4, dtype float32, C-contiguous.
  • Colors: Nx4, dtype uint8, C-contiguous.
  • Images: HxWx4, dtype uint8, C-contiguous.
  • Position and color arrays must have the same N dimension.

Conventions for Writing a New Test

File and Imports

Add tests to test/test_python_api.py (or create a new test/test_*.py file).

import numpy as np
import voxelpic as vp
import pytest

Generating Test Data

Tests generate random data inline rather than reading from files:

positions = np.random.rand(1000, 4).astype(np.float32) * 2 - 1
positions[:, 3] = 1  # homogeneous w coordinate
colors = np.random.randint(0, 255, (1000, 4)).astype(np.uint8)
colors[:, 3] = 255   # alpha channel
cloud = vp.PointCloud(positions, colors)

Parametrization

Use @pytest.mark.parametrize for depth variation:

@pytest.mark.parametrize("depth", [7, 8, 9])
def test_something(depth):
    ...

Assertions

Use NumPy testing assertions for array comparisons:

np.testing.assert_array_equal(actual, expected)          # exact (uint8, int)
np.testing.assert_array_almost_equal(actual, expected)    # float tolerance

Use standard assert for scalar values:

assert result.depth == depth
assert image.shape == (height, width, 4)

Fixtures

Use pytest built-in fixtures. tmp_path provides a temporary directory per test, useful for I/O tests:

def test_io(tmp_path):
    path = str(tmp_path / "cloud.dat")
    cloud.save(path)
    loaded = vp.PointCloud.load(path)

No custom fixtures or conftest.py exist — tests are self-contained.

Round-Trip Testing Pattern

The primary pattern is encode → decode → re-encode, verifying that the second encode produces an identical image:

image = vp.encode(cloud, depth=depth)
result = vp.decode(image)
image2 = vp.encode(result.cloud, depth=depth)
np.testing.assert_array_equal(image, image2)

Testing Preallocated Buffers

Both encode and decode accept optional preallocated output arrays. Test both the default allocation path and the preallocated path:

# Default allocation
image = vp.encode(cloud, depth=depth)

# Preallocated output
h, w = vp.image_shape(depth)
out = np.empty((h, w, 4), dtype=np.uint8)
image2 = vp.encode(cloud, depth=depth, out_image=out)

Configuration

There is no pytest.ini, conftest.py, or [tool.pytest.ini_options] section. Pytest uses default discovery: files matching test_*.py with functions matching test_*.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.