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

pantsbuild / pants / 23716347183

29 Mar 2026 06:45PM UTC coverage: 92.911% (-0.006%) from 92.917%
23716347183

Pull #23200

github

web-flow
Merge 0bf4cba1f into da60c6486
Pull Request #23200: perf: Port FrozenOrderedSet to rust

22 of 26 new or added lines in 6 files covered. (84.62%)

2 existing lines in 1 file now uncovered.

91461 of 98439 relevant lines covered (92.91%)

4.05 hits per line

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

84.0
/src/python/pants/util/frozendict.py
1
# Copyright 2020 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
12✔
5

6
from collections.abc import Callable, ItemsView, Iterable, Mapping, ValuesView
12✔
7
from typing import TypeVar, cast, overload
12✔
8

9
from pants.engine.internals.native_engine import FrozenDict as FrozenDict
12✔
10
from pants.util.memo import memoized_method
12✔
11

12
K = TypeVar("K")
12✔
13
V = TypeVar("V")
12✔
14
T = TypeVar("T")
12✔
15

16

17
class LazyFrozenDict(FrozenDict[K, V]):
12✔
18
    """A lazy version of `FrozenDict` where the values are not loaded until referenced."""
19

20
    @overload
21
    def __new__(
22
        cls, __items: Iterable[tuple[K, Callable[[], V]]], **kwargs: Callable[[], V]
23
    ) -> LazyFrozenDict[K, V]: ...
24

25
    @overload
26
    def __new__(
27
        cls, __other: Mapping[K, Callable[[], V]], **kwargs: Callable[[], V]
28
    ) -> LazyFrozenDict[K, V]: ...
29

30
    @overload
31
    def __new__(cls, **kwargs: Callable[[], V]) -> LazyFrozenDict[K, V]: ...
32

33
    def __new__(
12✔
34
        cls,
35
        *item: Mapping[K, Callable[[], V]] | Iterable[tuple[K, Callable[[], V]]],
36
        **kwargs: Callable[[], V],
37
    ) -> LazyFrozenDict[K, V]:
38
        return super().__new__(cls, *item, **kwargs)  # type: ignore[arg-type]
3✔
39

40
    def __getitem__(self, k: K) -> V:
12✔
41
        return self._get_value(k)
3✔
42

43
    @overload
44
    def get(self, key: K, /) -> V | None: ...
45
    @overload
46
    def get(self, key: K, /, default: T = ...) -> V | T: ...
47

48
    def get(self, key: K, /, default: T | None = None) -> V | T | None:
12✔
NEW
49
        try:
×
NEW
50
            return self._get_value(key)
×
NEW
51
        except KeyError:
×
NEW
52
            return default
×
53

54
    @memoized_method
12✔
55
    def _get_value(self, k: K) -> V:
12✔
56
        return cast("Callable[[], V]", super().__getitem__(k))()
3✔
57

58
    def items(self) -> ItemsView[K, V]:
12✔
59
        return ItemsView(self)
1✔
60

61
    def values(self) -> ValuesView[V]:
12✔
62
        return ValuesView(self)
3✔
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