Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ probe export --help
- `probe_py/probe_py`: Main package to be imported or run.
- `probe_py/pyproject.toml`: Definition of main package and dependencies.
- `probe_py/tests`: Python unittests, i.e., `from probe_py import foobar; test_foobar()`; Run `just test-py`.
- `probe_py/mypy_stubs`: "Stub" files that tell Mypy how to check untyped library code. Should be added to `$MYPYPATH` by `nix develop`.
- `tests`: End-to-end opaque-box tests. They will be run with Pytest, but they will not test Python directly; they should always `subprocess.run(["probe", ...])`. Additionally, some tests have to be manually invoked.
- `docs`: Documentation and papers.
- `benchmark`: Programs and infrastructure for benchmarking.
Expand Down
71 changes: 40 additions & 31 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,18 @@
old-stdenv = pkgs.overrideCC pkgs.stdenv new-clang-old-glibc;
in rec {
packages = rec {
types-networkx = python.pkgs.buildPythonPackage rec {
pname = "types-networkx";
version = "3.5.0.20251001";
src = pkgs.fetchPypi {
pname = "types_networkx";
inherit version;
sha256 = "8e3c5c491ba5870d75e175751d70ddeac81df43caf2a64bae161e181f5e8ea7a";
};
pyproject = true;
nativeBuildInputs = [python.pkgs.setuptools];
propagatedBuildInputs = [python.pkgs.numpy];
};
inherit (cli-wrapper-pkgs) cargoArtifacts probe-cli;
libprobe = old-stdenv.mkDerivation rec {
pname = "libprobe";
Expand Down Expand Up @@ -83,13 +95,13 @@
doCheck = true;
nativeCheckInputs = [
old-pkgs.criterion
pkgs.include-what-you-use
pkgs.clang
pkgs.clang-analyzer
pkgs.clang-tools
pkgs.clang
pkgs.compiledb
pkgs.cppcheck
pkgs.cppclean
pkgs.include-what-you-use
];
checkPhase = ''
# When a user buidls this WITHOUT build sandbox isolation, the libc files appear to come from somewhere different.
Expand Down Expand Up @@ -151,28 +163,26 @@
};
propagatedBuildInputs = [
python.pkgs.networkx
python.pkgs.pygraphviz
python.pkgs.numpy
python.pkgs.pydot
python.pkgs.pygraphviz
python.pkgs.rich
python.pkgs.typer
python.pkgs.xdg-base-dirs
python.pkgs.sqlalchemy
python.pkgs.pyyaml
python.pkgs.numpy
python.pkgs.tqdm
python.pkgs.typer
python.pkgs.xdg-base-dirs
];
nativeCheckInputs = [
packages.types-networkx
pkgs.ruff
python.pkgs.mypy
python.pkgs.types-pyyaml
python.pkgs.types-tqdm
pkgs.ruff
];
checkPhase = ''
runHook preCheck
#ruff format --check probe_src # TODO: uncomment
ruff check .
python -c 'import probe_py'
MYPYPATH=$src/mypy_stubs:$MYPYPATH mypy --strict --package probe_py
mypy --strict --package probe_py
runHook postCheck
'';
};
Expand All @@ -190,11 +200,11 @@
checks = {
inherit
(cli-wrapper.checks."${system}")
probe-workspace-audit
probe-workspace-clippy
probe-workspace-deny
probe-workspace-doc
probe-workspace-fmt
probe-workspace-audit
probe-workspace-deny
probe-workspace-nextest
;
fmt-nix = pkgs.stdenv.mkDerivation {
Expand All @@ -213,18 +223,18 @@
packages.probe
(python.withPackages (ps:
with ps; [
packages.probe-py
pytest
pytest-timeout
pytest-asyncio
packages.probe-py
pytest-timeout
]))
pkgs.buildah
pkgs.podman
pkgs.docker
pkgs.clang
pkgs.coreutils # so we can `probe record head ...`, etc.
pkgs.docker
pkgs.gnumake
pkgs.clang
pkgs.nix
pkgs.podman
]
++ pkgs.lib.lists.optional (system != "i686-linux" && system != "armv7l-linux") pkgs.jdk23_headless;
buildPhase = ''
Expand All @@ -244,23 +254,22 @@
probe-python = python.withPackages (pypkgs: [
# probe_py.manual runtime requirements
pypkgs.networkx
pypkgs.numpy
pypkgs.pydot
pypkgs.rich
pypkgs.typer
pypkgs.sqlalchemy
pypkgs.xdg-base-dirs
pypkgs.pyyaml
pypkgs.numpy
pypkgs.tqdm
pypkgs.typer
pypkgs.xdg-base-dirs

# probe_py.manual "dev time" requirements
pypkgs.types-tqdm
pypkgs.types-pyyaml
pypkgs.pytest
pypkgs.pytest-timeout
pypkgs.mypy
packages.types-networkx
pypkgs.ipython
pypkgs.mypy
pypkgs.pytest
pypkgs.pytest-asyncio
pypkgs.pytest-timeout
pypkgs.types-tqdm

# libprobe build time requirement
pypkgs.pycparser
Expand All @@ -276,10 +285,10 @@
shellPackages =
[
# Rust tools
pkgs.cargo-deny
pkgs.cargo-audit
pkgs.cargo-machete
pkgs.cargo-deny
pkgs.cargo-hakari
pkgs.cargo-machete

# Replay tools
pkgs.buildah
Expand All @@ -292,14 +301,14 @@
pkgs.clang-analyzer
pkgs.clang-tools # must go after clang-analyzer
pkgs.cppcheck
pkgs.gnumake
pkgs.git
pkgs.gnumake
pkgs.include-what-you-use
old-pkgs.criterion # unit testing framework

# Programs for testing
pkgs.nix
pkgs.coreutils
pkgs.nix

# For other lints
pkgs.alejandra
Expand Down
2 changes: 2 additions & 0 deletions libprobe/src/env.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,10 @@ char* const* arena_copy_cmdline(struct ArenaDir* arena_dir, result_sized_mem cmd
ptr += length + 1;
}

#ifndef NDEBUG
ptr -= 1;
ASSERTF(!*ptr, "'%s'", ptr);
#endif
argv_copy[argc] = NULL;

return argv_copy;
Expand Down
122 changes: 0 additions & 122 deletions probe_py/mypy_stubs/networkx/__init__.pyi

This file was deleted.

1 change: 0 additions & 1 deletion probe_py/mypy_stubs/networkx/drawing/__init__.pyi

This file was deleted.

9 changes: 0 additions & 9 deletions probe_py/mypy_stubs/networkx/drawing/nx_pydot.pyi

This file was deleted.

1 change: 0 additions & 1 deletion probe_py/mypy_stubs/scipy/__init__.pyi

This file was deleted.

1 change: 0 additions & 1 deletion probe_py/mypy_stubs/scipy/cluster/__init__.pyi

This file was deleted.

10 changes: 0 additions & 10 deletions probe_py/mypy_stubs/scipy/cluster/hierarchy.pyi

This file was deleted.

2 changes: 1 addition & 1 deletion probe_py/probe_py/dataflow_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,4 +301,4 @@ def shorten_path(input: pathlib.Path) -> str:
data["shape"] = "rectangle"
data["id"] = str(hash(node))
for a, b in cycle:
dataflow_graph.edges[a, b]["color"] = "red" # type: ignore
dataflow_graph.edges[a, b]["color"] = "red"
10 changes: 4 additions & 6 deletions probe_py/probe_py/graph_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def map_nodes(
) -> networkx.DiGraph[_Node2]:
dct = {node: function(node) for node in graph.nodes()}
assert util.all_unique(dct.values()), util.duplicates(dct.values())
return networkx.relabel_nodes(graph, dct)
return networkx.relabel_nodes(graph, dct) # type: ignore


def serialize_graph(
Expand All @@ -96,10 +96,8 @@ def serialize_graph(
cluster_labels: collections.abc.Mapping[str, str] = {},
) -> None:
if name_mapper is None:
name_mapper = typing.cast(
typing.Callable[[_Node], str],
lambda node: graph.nodes(data=True)[node].get("id", str(node)),
)
def name_mapper(node: _Node) -> str:
return str(graph.nodes(data=True)[node].get("id", node))
graph2 = map_nodes(name_mapper, graph)
pydot_graph = networkx.drawing.nx_pydot.to_pydot(graph2)

Expand Down Expand Up @@ -376,7 +374,7 @@ def add_edge(self, source: _Node, target: _Node) -> None:


def get_faces(
planar_graph: networkx.PlanarEmbedding[_Node], # type: ignore
planar_graph: networkx.PlanarEmbedding[_Node],
) -> frozenset[tuple[_Node, ...]]:
faces = set()
covered_half_edges = set()
Expand Down
Loading