Solve day 4

This commit is contained in:
Gabriel Augendre 2021-12-04 10:55:01 +01:00
parent 4109a72a98
commit 9202b7d49b
6 changed files with 889 additions and 135 deletions

96
2021/day04_bingo.py Normal file
View file

@ -0,0 +1,96 @@
import itertools
from typing import List, Set, TypeAlias
Numbers: TypeAlias = List[int]
Grid: TypeAlias = List[Numbers]
def main(filename: str, expected_part_1: int = None, expected_part_2: int = None):
print(f"\n+ Running on {filename}")
with open(filename) as f:
data = f.read().strip().split("\n\n")
numbers, grids = parse_data(data)
solution_part_1 = solve_part_1(numbers, grids)
print(f"1. Found {solution_part_1}")
if expected_part_1:
assert expected_part_1 == solution_part_1
solution_part_2 = solve_part_2(numbers, grids)
print(f"2. Found {solution_part_2}")
if expected_part_2:
assert expected_part_2 == solution_part_2
def parse_data(data: List[str]) -> (Numbers, List[Grid]):
numbers: Numbers = list(map(int, data[0].split(",")))
data = data[1:]
grids: List[Grid] = []
for grid in data:
parsed_grid: Grid = []
grid_lines = grid.split("\n")
for line in grid_lines:
line = list(map(int, line.split()))
parsed_grid.append(line)
grids.append(parsed_grid)
return numbers, grids
def solve_part_1(numbers: Numbers, grids: List[Grid]) -> int:
seen: Set[int] = set()
for number in numbers:
seen.add(number)
for grid in grids:
if check_bingo(grid, seen):
return sum(unseen(grid, seen)) * number
def check_bingo(grid: Grid, seen: Set[int]) -> bool:
return check_row(grid, seen) or check_column(grid, seen)
def check_row(grid: Grid, seen: Set[int]) -> bool:
for row in grid:
if check_line(row, seen):
return True
return False
def check_column(grid: Grid, seen: Set[int]) -> bool:
for i in range(len(grid[0])):
column = [row[i] for row in grid]
if check_line(column, seen):
return True
return False
def check_line(line: Numbers, seen: Set[int]) -> bool:
for number in line:
if number not in seen:
return False
return True
def unseen(grid: Grid, seen: Set[int]) -> Numbers:
return [n for n in itertools.chain.from_iterable(grid) if n not in seen]
def solve_part_2(numbers: Numbers, grids: List[Grid]) -> int:
seen: Set[int] = set()
score = 0
winners: Set[int] = set()
for number in numbers:
seen.add(number)
for index, grid in enumerate(grids):
if index in winners:
continue
if check_bingo(grid, seen):
score = sum(unseen(grid, seen)) * number
winners.add(index)
return score
if __name__ == "__main__":
main("inputs/day04-test1", expected_part_1=4512, expected_part_2=1924)
main("inputs/day04", expected_part_1=23177)

601
2021/inputs/day04 Normal file
View file

@ -0,0 +1,601 @@
42,32,13,22,91,2,88,85,53,87,37,33,76,98,89,19,69,9,62,21,38,49,54,81,0,26,79,36,57,18,4,40,31,80,24,64,77,97,70,6,73,23,20,47,45,51,74,25,95,96,58,92,94,11,39,63,65,99,48,83,29,34,44,75,55,17,14,56,8,82,59,52,46,90,5,41,60,67,16,1,15,61,71,66,72,30,28,3,43,27,78,10,86,7,50,35,84,12,93,68
90 8 2 34 41
11 67 74 71 62
47 42 44 1 17
21 55 12 91 6
60 69 75 92 56
49 29 60 45 31
94 51 73 33 67
21 92 53 95 96
2 55 52 8 87
4 36 76 83 42
23 66 50 84 58
62 98 81 76 57
24 2 56 79 6
55 0 16 64 38
12 67 5 97 60
46 64 5 39 62
16 82 13 77 52
18 26 44 0 61
25 7 43 42 50
11 85 30 28 76
51 28 70 65 78
62 88 30 36 96
80 87 4 1 24
63 22 41 79 34
18 15 47 26 67
48 68 92 67 36
54 50 71 98 21
20 91 70 78 76
87 97 44 3 93
84 12 39 96 57
86 12 38 44 1
10 87 74 53 66
14 99 85 48 88
59 33 76 71 31
83 39 2 67 35
62 67 27 96 8
81 23 78 33 48
80 16 0 86 85
26 54 29 32 89
88 77 43 18 46
87 88 13 49 80
78 19 81 56 11
18 55 70 44 48
31 37 24 95 28
20 79 89 94 14
10 31 52 49 79
8 72 61 27 42
73 4 11 43 91
37 44 58 19 97
96 63 90 13 74
71 27 87 40 99
69 29 79 64 67
85 66 4 28 30
23 51 16 49 45
92 12 74 1 75
46 52 40 12 44
0 73 20 86 1
85 32 4 42 2
21 33 56 39 9
49 69 76 98 22
42 81 5 11 2
57 50 77 8 24
85 92 15 39 52
37 70 36 79 67
34 20 16 93 22
49 68 25 4 46
17 57 77 59 54
65 83 18 84 63
36 74 61 22 71
14 0 26 3 98
1 80 93 66 58
38 9 18 60 2
70 46 35 88 11
95 89 85 29 26
82 68 25 15 53
97 80 28 17 7
67 46 54 95 98
38 74 42 57 79
63 29 36 78 6
90 60 84 10 14
18 88 8 96 0
66 56 43 47 11
69 73 14 71 25
27 63 31 44 94
75 95 84 74 13
92 9 98 17 74
46 7 2 51 52
21 60 5 87 15
86 91 65 69 54
61 85 1 62 53
89 80 4 0 68
17 87 52 86 48
3 34 16 25 35
13 38 49 66 50
36 43 65 84 56
9 93 54 92 55
32 2 39 96 98
58 72 52 83 97
12 44 27 24 20
0 3 28 56 69
66 56 37 36 72
35 49 40 43 44
54 21 59 12 65
74 25 22 80 98
27 81 69 97 62
72 81 27 61 74
26 50 79 13 53
49 78 76 70 43
51 64 99 46 67
68 59 71 17 41
97 22 73 30 98
8 54 68 47 23
70 89 41 52 61
81 28 58 90 3
88 40 86 46 43
94 6 46 43 59
41 28 87 31 45
83 26 66 81 1
76 86 15 42 8
67 47 54 4 77
96 56 22 67 2
95 47 90 54 51
78 79 29 82 48
61 81 77 6 24
71 93 98 26 75
95 7 77 94 64
19 79 14 24 5
50 48 4 71 22
35 69 89 54 2
6 51 8 82 58
87 6 85 53 64
50 43 80 61 15
69 41 51 76 0
78 26 37 62 16
12 33 75 58 52
67 18 68 52 42
37 30 49 31 69
93 90 76 9 32
60 84 73 94 17
21 27 66 43 44
89 69 24 14 1
88 33 50 2 63
12 34 6 97 53
28 26 55 8 32
49 19 17 64 86
31 37 81 65 38
96 18 45 19 58
35 43 1 49 41
46 85 92 53 15
3 34 8 14 21
35 68 61 45 39
46 99 52 55 15
74 14 10 62 17
8 66 98 89 91
58 24 44 27 29
28 48 52 18 13
17 35 20 11 49
93 50 31 95 83
27 33 79 44 80
4 96 23 65 68
70 78 31 86 36
99 38 62 95 27
52 74 25 80 41
30 15 47 19 21
77 23 53 9 7
0 83 11 25 42
50 64 76 67 72
75 30 82 15 84
58 17 87 61 33
98 74 44 3 93
5 40 78 24 11
57 17 67 60 25
37 76 28 56 35
66 94 2 90 47
86 10 85 46 45
63 12 7 74 14
21 31 84 51 36
66 20 25 46 41
15 3 18 62 45
35 78 93 2 9
90 9 33 63 41
25 73 35 97 19
99 96 45 71 22
84 43 29 14 88
42 8 1 78 68
98 84 38 95 27
18 32 54 12 96
56 50 2 45 53
14 83 59 72 70
22 41 28 9 78
89 94 50 33 73
31 47 8 35 34
43 92 95 21 51
68 13 53 24 38
80 69 44 87 83
32 82 75 73 91
99 10 22 58 23
86 9 42 81 40
71 25 3 78 54
80 15 83 5 4
58 1 3 11 24
66 51 84 44 25
37 54 12 27 97
38 2 39 85 83
89 91 33 79 59
49 22 12 84 60
34 29 11 92 19
97 41 88 53 38
26 37 8 36 67
91 3 90 52 46
77 35 76 56 20
39 94 37 3 83
78 81 66 29 4
82 41 38 0 73
59 16 88 15 30
34 69 74 90 33
9 47 71 94 10
76 50 15 19 32
49 89 31 21 92
80 12 13 97 93
45 94 35 59 20
18 46 14 36 30
6 78 84 38 99
5 4 90 92 63
34 24 26 75 3
80 39 1 93 55
67 71 30 44 76
38 13 73 21 8
11 47 46 69 29
15 57 95 52 34
45 86 88 80 19
3 5 55 36 90
54 85 44 18 39
57 92 42 25 77
43 0 12 1 24
74 71 83 29 25
56 12 52 33 64
68 94 97 14 15
7 48 24 80 5
54 87 35 1 66
55 50 73 72 36
17 80 87 68 90
8 33 81 1 51
67 61 71 54 95
93 98 27 56 0
19 32 63 6 98
13 38 23 28 8
5 31 66 72 39
99 46 2 64 14
91 83 35 85 10
67 85 49 68 37
8 36 31 81 18
74 61 20 80 50
34 23 42 52 39
21 14 22 58 54
16 14 69 13 81
21 96 62 7 5
95 52 0 67 24
6 30 65 66 86
28 25 85 56 15
4 41 21 86 32
95 23 63 28 2
9 16 37 84 14
92 22 71 42 5
46 65 69 81 57
45 20 46 44 22
62 93 78 58 25
91 38 29 68 24
21 55 71 43 26
64 76 84 80 99
92 67 43 5 12
2 64 46 15 96
95 75 73 38 30
10 65 20 39 26
36 16 25 27 88
9 62 18 58 34
85 80 36 2 48
16 60 75 72 51
39 22 32 61 54
40 44 23 87 53
93 69 56 4 22
73 51 24 53 19
83 98 77 94 59
52 70 15 40 48
60 89 67 92 85
48 72 42 80 22
99 49 11 77 4
28 24 1 63 51
85 93 62 7 78
35 32 3 21 86
36 75 67 79 34
20 8 71 6 5
50 61 14 52 81
26 37 0 80 77
93 47 86 54 94
50 19 68 54 80
81 12 33 87 24
28 40 37 30 31
41 51 15 27 97
67 70 14 77 86
89 57 48 37 27
44 46 29 63 20
74 88 25 68 76
18 28 91 59 58
99 77 62 64 83
22 5 86 37 42
47 69 87 34 89
64 33 18 56 51
30 49 11 79 17
61 80 0 29 57
7 82 87 15 83
76 43 92 1 97
0 46 2 86 6
48 27 29 61 67
53 10 64 93 77
65 16 23 26 87
58 5 25 97 94
43 7 39 69 35
62 81 56 13 28
76 12 37 14 93
90 81 15 55 23
58 40 8 56 76
83 7 78 89 47
65 70 13 48 42
16 69 66 52 46
30 38 20 32 94
91 96 34 23 90
16 24 49 50 86
65 19 56 7 66
80 60 74 71 11
60 77 54 25 22
9 61 68 6 89
15 71 10 84 41
1 47 8 43 63
69 57 85 24 81
54 83 73 52 49
69 96 31 57 44
19 66 24 6 55
91 84 20 3 27
7 9 71 43 75
90 72 15 99 2
73 56 48 28 62
40 75 0 59 31
43 67 44 24 77
98 35 4 3 37
2 85 72 39 49
58 25 91 69 19
34 8 57 42 55
80 21 51 64 30
28 32 82 84 6
33 77 39 13 12
86 21 96 82 94
78 92 42 45 70
31 22 60 80 67
79 27 93 55 65
49 90 73 72 10
98 89 77 88 12
83 3 31 47 21
65 26 93 55 53
5 95 22 8 63
79 88 11 62 25
85 14 77 4 19
41 31 83 26 67
46 98 74 99 2
44 53 70 36 52
21 33 15 57 53
56 91 25 69 10
52 59 73 96 87
65 71 14 37 2
39 89 29 83 64
88 38 45 39 20
99 72 61 96 4
23 24 67 49 80
77 6 65 76 18
59 51 78 33 46
44 22 9 90 83
93 50 2 54 26
68 71 43 85 41
38 20 6 64 24
81 39 33 56 27
98 1 69 30 38
67 52 79 31 0
24 41 82 55 73
33 66 64 20 7
65 9 14 70 94
59 63 65 25 1
36 85 61 82 50
52 3 70 30 43
79 57 31 71 76
19 97 93 77 49
60 45 90 32 74
77 64 58 44 43
71 49 37 21 46
50 67 1 24 15
14 22 0 40 23
65 87 81 64 28
53 80 23 76 77
49 14 50 2 35
85 26 88 94 30
79 18 68 15 45
6 48 38 63 92
51 45 58 4 76
78 40 22 17 55
79 12 66 61 5
68 74 0 93 89
66 4 65 71 77
47 35 38 83 64
53 16 9 56 25
92 81 55 60 33
80 24 73 0 26
26 29 55 76 38
79 52 91 84 39
50 57 37 34 71
33 31 68 92 24
81 95 5 70 8
83 64 11 67 42
97 29 27 4 78
23 10 48 71 81
80 74 86 17 36
61 14 85 21 96
18 8 7 88 25
59 5 28 57 69
64 54 16 70 72
13 75 71 33 2
60 55 46 51 32
23 89 63 96 88
71 66 9 53 65
56 46 29 95 80
44 94 90 3 5
11 99 59 60 78
42 33 81 25 0
46 66 63 82 94
52 73 92 30 24
59 26 50 87 45
79 55 74 17 64
95 43 13 98 18
62 12 24 88 28
23 11 93 51 67
71 0 44 64 96
66 17 84 90 19
38 6 12 75 27
28 73 62 50 51
63 86 29 98 15
46 90 4 58 96
20 78 64 56 82
19 91 23 40 1
78 57 75 43 2
35 60 85 74 30
80 3 63 54 32
82 99 89 25 88
88 13 92 11 72
56 6 35 55 21
8 20 36 60 99
1 96 57 45 12
41 73 50 83 69
42 69 53 76 11
38 74 13 14 86
18 49 51 67 61
26 80 47 16 78
66 46 12 68 79
22 90 72 93 24
55 29 43 28 5
99 47 87 40 51
81 18 70 20 36
0 48 23 46 82
91 74 83 95 54
60 56 38 37 89
87 96 71 50 35
5 11 42 72 3
77 81 36 49 97
71 72 17 34 93
45 81 22 67 23
61 20 94 14 1
85 40 15 36 88
54 91 62 73 9
66 36 39 58 60
96 8 22 49 77
76 64 47 78 30
50 41 12 69 15
7 1 29 72 27
90 12 65 13 39
75 70 47 36 79
31 54 17 10 32
76 92 55 83 40
49 5 20 44 37
16 78 65 5 70
63 72 89 93 66
21 90 46 54 81
7 48 88 60 11
95 0 38 3 26
19 65 66 41 27
7 18 91 52 48
87 55 49 68 71
85 12 4 40 1
57 67 6 11 58
91 85 38 14 21
63 93 37 76 25
68 36 4 24 71
43 31 60 19 95
52 55 13 83 78

19
2021/inputs/day04-test1 Normal file
View file

@ -0,0 +1,19 @@
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7

View file

@ -1,25 +1,33 @@
from typing import List
def main(filename: str, expected_part_1: int = None, expected_part_2: int = None):
print(f"\n+ Running on {filename}")
with open(filename) as f:
data = f.read().strip().split("\n")
counter_part_1 = solve_part_1(data)
data = parse_data(data)
solution_part_1 = solve_part_1(data)
print(f"1. Found {counter_part_1}")
print(f"1. Found {solution_part_1}")
if expected_part_1:
assert expected_part_1 == counter_part_1
assert expected_part_1 == solution_part_1
counter_part_2 = solve_part_2(data)
print(f"2. Found {counter_part_2}")
solution_part_2 = solve_part_2(data)
print(f"2. Found {solution_part_2}")
if expected_part_2:
assert expected_part_2 == counter_part_2
assert expected_part_2 == solution_part_2
def solve_part_1(data):
def parse_data(data: List[str]):
return data
def solve_part_1(data) -> int:
return 0
def solve_part_2(data):
def solve_part_2(data) -> int:
return 0

282
poetry.lock generated
View file

@ -1,11 +1,3 @@
[[package]]
name = "appdirs"
version = "1.4.4"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "atomicwrites"
version = "1.4.0"
@ -16,21 +8,33 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
version = "20.3.0"
version = "21.2.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
[[package]]
name = "backports.entry-points-selectable"
version = "1.1.1"
description = "Compatibility shim providing selectable entry points for older implementations"
category = "dev"
optional = false
python-versions = ">=2.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"]
[[package]]
name = "cfgv"
version = "3.2.0"
version = "3.3.1"
description = "Validate configuration and produce human readable error messages."
category = "dev"
optional = false
@ -44,17 +48,9 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "decorator"
version = "4.4.2"
description = "Decorators for Humans"
category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*"
[[package]]
name = "distlib"
version = "0.3.1"
version = "0.3.3"
description = "Distribution utilities"
category = "dev"
optional = false
@ -74,22 +70,26 @@ pyrepl = ">=0.8.2"
[[package]]
name = "filelock"
version = "3.0.12"
version = "3.4.0"
description = "A platform independent file lock."
category = "dev"
optional = false
python-versions = "*"
python-versions = ">=3.6"
[package.extras]
docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"]
testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"]
[[package]]
name = "identify"
version = "1.5.10"
version = "2.4.0"
description = "File identification library for Python"
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
python-versions = ">=3.6.1"
[package.extras]
license = ["editdistance"]
license = ["ukkonen"]
[[package]]
name = "iniconfig"
@ -101,31 +101,22 @@ python-versions = "*"
[[package]]
name = "networkx"
version = "2.5"
version = "2.6.3"
description = "Python package for creating and manipulating graphs and networks"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
decorator = ">=4.3.0"
python-versions = ">=3.7"
[package.extras]
all = ["numpy", "scipy", "pandas", "matplotlib", "pygraphviz", "pydot", "pyyaml", "lxml", "pytest"]
gdal = ["gdal"]
lxml = ["lxml"]
matplotlib = ["matplotlib"]
numpy = ["numpy"]
pandas = ["pandas"]
pydot = ["pydot"]
pygraphviz = ["pygraphviz"]
pytest = ["pytest"]
pyyaml = ["pyyaml"]
scipy = ["scipy"]
default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"]
developer = ["black (==21.5b1)", "pre-commit (>=2.12)"]
doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"]
extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"]
test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"]
[[package]]
name = "nodeenv"
version = "1.5.0"
version = "1.6.0"
description = "Node.js virtual environment builder"
category = "dev"
optional = false
@ -133,18 +124,18 @@ python-versions = "*"
[[package]]
name = "packaging"
version = "20.7"
version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
python-versions = ">=3.6"
[package.dependencies]
pyparsing = ">=2.0.2"
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pdbpp"
version = "0.10.2"
version = "0.10.3"
description = "pdb++, a drop-in replacement for pdb"
category = "main"
optional = false
@ -159,20 +150,33 @@ wmctrl = "*"
funcsigs = ["funcsigs"]
testing = ["funcsigs", "pytest"]
[[package]]
name = "platformdirs"
version = "2.4.0"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
python-versions = ">=3.6"
[package.extras]
docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"]
test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"]
[[package]]
name = "pluggy"
version = "0.13.1"
version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
python-versions = ">=3.6"
[package.extras]
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pre-commit"
version = "2.9.2"
version = "2.16.0"
description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false
@ -188,15 +192,15 @@ virtualenv = ">=20.0.8"
[[package]]
name = "py"
version = "1.9.0"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pygments"
version = "2.7.3"
version = "2.10.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@ -204,11 +208,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
version = "2.4.7"
version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
python-versions = ">=3.6"
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyreadline"
@ -228,37 +235,36 @@ python-versions = "*"
[[package]]
name = "pytest"
version = "6.1.2"
version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
python-versions = ">=3.5"
python-versions = ">=3.6"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=17.4.0"
attrs = ">=19.2.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<1.0"
pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
[package.extras]
checkqa_mypy = ["mypy (==0.780)"]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "pyyaml"
version = "5.3.1"
version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
python-versions = ">=3.6"
[[package]]
name = "six"
version = "1.15.0"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
category = "dev"
optional = false
@ -274,25 +280,26 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "virtualenv"
version = "20.2.1"
version = "20.10.0"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[package.dependencies]
appdirs = ">=1.4.3,<2"
"backports.entry-points-selectable" = ">=1.0.4"
distlib = ">=0.3.1,<1"
filelock = ">=3.0.0,<4"
filelock = ">=3.2,<4"
platformdirs = ">=2,<3"
six = ">=1.9.0,<2"
[package.extras]
docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"]
testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "pytest-xdist (>=1.31.0)", "packaging (>=20.0)", "xonsh (>=0.9.16)"]
docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"]
testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"]
[[package]]
name = "wmctrl"
version = "0.3"
version = "0.4"
description = "A tool to programmatically control windows inside X"
category = "main"
optional = false
@ -304,84 +311,85 @@ python-versions = "3.8"
content-hash = "d3492eb0a2265986bb41e5d19316233006e02e29c8fd44e45535b7e2b9a52658"
[metadata.files]
appdirs = [
{file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
{file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"},
{file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"},
{file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
"backports.entry-points-selectable" = [
{file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"},
{file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"},
]
cfgv = [
{file = "cfgv-3.2.0-py2.py3-none-any.whl", hash = "sha256:32e43d604bbe7896fe7c248a9c2276447dbef840feb28fe20494f62af110211d"},
{file = "cfgv-3.2.0.tar.gz", hash = "sha256:cf22deb93d4bcf92f345a5c3cd39d3d41d6340adc60c78bbbd6588c384fda6a1"},
{file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
{file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
decorator = [
{file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"},
{file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"},
]
distlib = [
{file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"},
{file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"},
{file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"},
{file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"},
]
fancycompleter = [
{file = "fancycompleter-0.9.1-py3-none-any.whl", hash = "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080"},
{file = "fancycompleter-0.9.1.tar.gz", hash = "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272"},
]
filelock = [
{file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"},
{file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"},
{file = "filelock-3.4.0-py3-none-any.whl", hash = "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8"},
{file = "filelock-3.4.0.tar.gz", hash = "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"},
]
identify = [
{file = "identify-1.5.10-py2.py3-none-any.whl", hash = "sha256:cc86e6a9a390879dcc2976cef169dd9cc48843ed70b7380f321d1b118163c60e"},
{file = "identify-1.5.10.tar.gz", hash = "sha256:943cd299ac7f5715fcb3f684e2fc1594c1e0f22a90d15398e5888143bd4144b5"},
{file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"},
{file = "identify-2.4.0.tar.gz", hash = "sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
networkx = [
{file = "networkx-2.5-py3-none-any.whl", hash = "sha256:8c5812e9f798d37c50570d15c4a69d5710a18d77bafc903ee9c5fba7454c616c"},
{file = "networkx-2.5.tar.gz", hash = "sha256:7978955423fbc9639c10498878be59caf99b44dc304c2286162fd24b458c1602"},
{file = "networkx-2.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"},
{file = "networkx-2.6.3.tar.gz", hash = "sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51"},
]
nodeenv = [
{file = "nodeenv-1.5.0-py2.py3-none-any.whl", hash = "sha256:5304d424c529c997bc888453aeaa6362d242b6b4631e90f3d4bf1b290f1c84a9"},
{file = "nodeenv-1.5.0.tar.gz", hash = "sha256:ab45090ae383b716c4ef89e690c41ff8c2b257b85b309f01f3654df3d084bd7c"},
{file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"},
{file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
]
packaging = [
{file = "packaging-20.7-py2.py3-none-any.whl", hash = "sha256:eb41423378682dadb7166144a4926e443093863024de508ca5c9737d6bc08376"},
{file = "packaging-20.7.tar.gz", hash = "sha256:05af3bb85d320377db281cf254ab050e1a7ebcbf5410685a9a407e18a1f81236"},
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pdbpp = [
{file = "pdbpp-0.10.2.tar.gz", hash = "sha256:73ff220d5006e0ecdc3e2705d8328d8aa5ac27fef95cc06f6e42cd7d22d55eb8"},
{file = "pdbpp-0.10.3-py2.py3-none-any.whl", hash = "sha256:79580568e33eb3d6f6b462b1187f53e10cd8e4538f7d31495c9181e2cf9665d1"},
{file = "pdbpp-0.10.3.tar.gz", hash = "sha256:d9e43f4fda388eeb365f2887f4e7b66ac09dce9b6236b76f63616530e2f669f5"},
]
platformdirs = [
{file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"},
{file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"},
]
pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
pre-commit = [
{file = "pre_commit-2.9.2-py2.py3-none-any.whl", hash = "sha256:949b13efb7467ae27e2c8f9e83434dacf2682595124d8902554a4e18351e5781"},
{file = "pre_commit-2.9.2.tar.gz", hash = "sha256:e31c04bc23741194a7c0b983fe512801e151a0638c6001c49f2bd034f8a664a1"},
{file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
{file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"},
]
py = [
{file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"},
{file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"},
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pygments = [
{file = "Pygments-2.7.3-py3-none-any.whl", hash = "sha256:f275b6c0909e5dafd2d6269a656aa90fa58ebf4a74f8fcf9053195d226b24a08"},
{file = "Pygments-2.7.3.tar.gz", hash = "sha256:ccf3acacf3782cbed4a989426012f1c535c9a90d3a7fc3f16d231b9372d2b716"},
{file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
{file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyreadline = [
{file = "pyreadline-2.1.win-amd64.exe", hash = "sha256:9ce5fa65b8992dfa373bddc5b6e0864ead8f291c94fbfec05fbd5c836162e67b"},
@ -392,34 +400,56 @@ pyrepl = [
{file = "pyrepl-0.9.0.tar.gz", hash = "sha256:292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775"},
]
pytest = [
{file = "pytest-6.1.2-py3-none-any.whl", hash = "sha256:4288fed0d9153d9646bfcdf0c0428197dba1ecb27a33bb6e031d002fa88653fe"},
{file = "pytest-6.1.2.tar.gz", hash = "sha256:c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e"},
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
{file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
pyyaml = [
{file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"},
{file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"},
{file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"},
{file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"},
{file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"},
{file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"},
{file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"},
{file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"},
{file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"},
{file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"},
{file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"},
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
{file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
{file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
{file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
{file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
{file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
{file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
{file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
{file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
{file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
{file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
{file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
{file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
{file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
{file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
{file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
{file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
six = [
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
virtualenv = [
{file = "virtualenv-20.2.1-py2.py3-none-any.whl", hash = "sha256:07cff122e9d343140366055f31be4dcd61fd598c69d11cd33a9d9c8df4546dd7"},
{file = "virtualenv-20.2.1.tar.gz", hash = "sha256:e0aac7525e880a429764cefd3aaaff54afb5d9f25c82627563603f5d7de5a6e5"},
{file = "virtualenv-20.10.0-py2.py3-none-any.whl", hash = "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814"},
{file = "virtualenv-20.10.0.tar.gz", hash = "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"},
]
wmctrl = [
{file = "wmctrl-0.3.tar.gz", hash = "sha256:d806f65ac1554366b6e31d29d7be2e8893996c0acbb2824bbf2b1f49cf628a13"},
{file = "wmctrl-0.4.tar.gz", hash = "sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0"},
]

View file

@ -6,7 +6,7 @@ authors = ["Gabriel Augendre <gabriel@augendre.info>"]
license = "MIT"
[tool.poetry.dependencies]
python = "3.8"
python = "^3.10"
networkx = "^2.5"
pdbpp = "^0.10.2"