• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ZJU-SPAIL / pipa / 22699554347

05 Mar 2026 02:33AM UTC coverage: 19.922% (-50.1%) from 70.041%
22699554347

push

github

Rui Hu
Merge github/main, resolve two version conflicts by keeping gitlab local

6 of 2484 new or added lines in 35 files covered. (0.24%)

871 of 4372 relevant lines covered (19.92%)

0.2 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/pipa/analysis/flamegraph/api.py
1
# -*- coding: utf-8 -*-
2
"""
3
Thin facade API to unify parser and analyzer while keeping them decoupled.
4

5
This module depends on both sides and exposes simple high-level entry points.
6
"""
7

NEW
8
from __future__ import annotations
×
9

NEW
10
from typing import Dict, Mapping, Iterable, Sequence
×
11

NEW
12
from pipa.analysis.flamegraph.io import parse_folded_file, parse_folded_lines
×
NEW
13
from pipa.analysis.flamegraph.analyzer import FoldedAnalyzer
×
NEW
14
from pipa.parser.flamegraph.stackcollapse_perf import (
×
15
    CollapseOptions,
16
    collapse,
17
    collapse_file,
18
)
19

20
# --------------- Collapse to mapping ---------------
21

22

NEW
23
def collapse_to_mapping(
×
24
    lines: Iterable[str], options: CollapseOptions
25
) -> Dict[str, int]:
NEW
26
    return collapse(lines, options)
×
27

28

NEW
29
def collapse_file_to_mapping(path: str, options: CollapseOptions) -> Dict[str, int]:
×
NEW
30
    return collapse_file(path, options)
×
31

32

33
# --------------- Analyze from mapping or file ---------------
34

35

NEW
36
def analyze_mapping(stacks: Mapping[str, int]) -> FoldedAnalyzer:
×
NEW
37
    return FoldedAnalyzer.from_collapsed(stacks)
×
38

39

NEW
40
def analyze_file(path: str) -> FoldedAnalyzer:
×
NEW
41
    stacks = parse_folded_file(path)
×
NEW
42
    return FoldedAnalyzer.from_collapsed(stacks)
×
43

44

NEW
45
def analyze_lines(lines: Iterable[str]) -> FoldedAnalyzer:
×
NEW
46
    stacks = parse_folded_lines(lines)
×
NEW
47
    return FoldedAnalyzer.from_collapsed(stacks)
×
48

49

NEW
50
def analyze_collapse_file(path: str, options: CollapseOptions) -> FoldedAnalyzer:
×
NEW
51
    stacks = collapse_file_to_mapping(path, options)
×
NEW
52
    return FoldedAnalyzer.from_collapsed(stacks)
×
53

54

55
# --------------- Subset helpers ---------------
56

57

NEW
58
def subset_mapping_by_symbol(
×
59
    stacks: Mapping[str, int], symbol: str, contains_fallback: bool = True
60
) -> Dict[str, int]:
NEW
61
    subset: Dict[str, int] = {}
×
NEW
62
    for k, w in stacks.items():
×
NEW
63
        parts = k.split(";")
×
NEW
64
        if len(parts) >= 2 and symbol in parts[1:]:
×
NEW
65
            subset[k] = subset.get(k, 0) + w
×
NEW
66
        elif contains_fallback and symbol in k:
×
NEW
67
            subset[k] = subset.get(k, 0) + w
×
NEW
68
    return subset
×
69

70

NEW
71
def analyzer_from_symbol_subset(
×
72
    stacks: Mapping[str, int], symbol: str, contains_fallback: bool = True
73
) -> FoldedAnalyzer:
NEW
74
    return FoldedAnalyzer.from_collapsed(
×
75
        subset_mapping_by_symbol(stacks, symbol, contains_fallback)
76
    )
77

78

NEW
79
def filter_stacks_by_prefixes(
×
80
    analyzer: FoldedAnalyzer, prefixes: Sequence[str], k: int = 1000
81
):
NEW
82
    return analyzer.filter_stacks_by_prefixes(prefixes, k)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc