Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removing unused and unnecessary code #5309

Merged
merged 5 commits into from
Mar 18, 2022
Merged
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
61 changes: 13 additions & 48 deletions src/poetry/puzzle/solver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations

import enum
import time

from collections import defaultdict
Expand Down Expand Up @@ -140,11 +139,9 @@ def _solve(self, use_latest: list[str] = None) -> tuple[list[Package], list[int]
except SolveFailure as e:
raise SolverProblemError(e)

# NOTE passing explicit empty array for seen to reset between invocations during
# update + install cycle
results = dict(
depth_first_search(
PackageNode(self._package, packages, seen=[]), aggregate_package_nodes
PackageNode(self._package, packages), aggregate_package_nodes
)
)

Expand Down Expand Up @@ -194,27 +191,19 @@ def __str__(self) -> str:
return str(self.id)


class VisitedState(enum.Enum):
Unvisited = 0
PartiallyVisited = 1
Visited = 2


def depth_first_search(
source: PackageNode, aggregator: Callable
) -> list[tuple[Package, int]]:
back_edges: dict[DFSNodeID, list[PackageNode]] = defaultdict(list)
visited: dict[DFSNodeID, VisitedState] = {}
visited: set[DFSNodeID] = set()
topo_sorted_nodes: list[PackageNode] = []

dfs_visit(source, back_edges, visited, topo_sorted_nodes)

# Combine the nodes by name
combined_nodes = defaultdict(list)
name_children = defaultdict(list)
for node in topo_sorted_nodes:
node.visit(back_edges[node.id])
name_children[node.name].extend(node.reachable())
combined_nodes[node.name].append(node)

combined_topo_sorted_nodes = [
Expand All @@ -223,42 +212,30 @@ def depth_first_search(
if node.name in combined_nodes
]

return [
aggregator(nodes, name_children[nodes[0].name])
for nodes in combined_topo_sorted_nodes
]
return [aggregator(nodes) for nodes in combined_topo_sorted_nodes]


def dfs_visit(
node: PackageNode,
back_edges: dict[DFSNodeID, list[PackageNode]],
visited: dict[DFSNodeID, VisitedState],
visited: set[DFSNodeID],
sorted_nodes: list[PackageNode],
) -> bool:
if visited.get(node.id, VisitedState.Unvisited) == VisitedState.Visited:
return True
if visited.get(node.id, VisitedState.Unvisited) == VisitedState.PartiallyVisited:
# We have a circular dependency.
# Since the dependencies are resolved we can
# simply skip it because we already have it
return True

visited[node.id] = VisitedState.PartiallyVisited
) -> None:
if node.id in visited:
return
visited.add(node.id)

for neighbor in node.reachable():
back_edges[neighbor.id].append(node)
if not dfs_visit(neighbor, back_edges, visited, sorted_nodes):
return False
visited[node.id] = VisitedState.Visited
dfs_visit(neighbor, back_edges, visited, sorted_nodes)
sorted_nodes.insert(0, node)
return True


class PackageNode(DFSNode):
def __init__(
self,
package: Package,
packages: list[Package],
seen: list[Package],
previous: PackageNode | None = None,
previous_dep: None
| (
Expand All @@ -279,7 +256,6 @@ def __init__(
) -> None:
self.package = package
self.packages = packages
self.seen = seen

self.previous = previous
self.previous_dep = previous_dep
Expand All @@ -306,12 +282,6 @@ def __init__(
def reachable(self) -> list[PackageNode]:
children: list[PackageNode] = []

# skip already traversed packages
if self.package in self.seen:
return []
else:
self.seen.append(self.package)

if (
self.dep
and self.previous_dep
Expand Down Expand Up @@ -348,7 +318,6 @@ def reachable(self) -> list[PackageNode]:
PackageNode(
pkg,
self.packages,
self.seen,
self,
dependency,
self.dep or dependency,
Expand All @@ -369,19 +338,15 @@ def visit(self, parents: list[PackageNode]) -> None:
)


def aggregate_package_nodes(
nodes: list[PackageNode], children: list[PackageNode]
) -> tuple[Package, int]:
def aggregate_package_nodes(nodes: list[PackageNode]) -> tuple[Package, int]:
package = nodes[0].package
depth = max(node.depth for node in nodes)
groups: list[str] = []
for node in nodes:
groups.extend(node.groups)

category = (
"main" if any("default" in node.groups for node in children + nodes) else "dev"
)
optional = all(node.optional for node in children + nodes)
category = "main" if any("default" in node.groups for node in nodes) else "dev"
optional = all(node.optional for node in nodes)
for node in nodes:
node.depth = depth
node.category = category
Expand Down