From a5639aaa464799a5aa3441ea730a13e27f525b0b Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Tue, 15 Sep 2026 17:33:16 +0200 Subject: [PATCH 01/12] Issue #34 - WIP - Importing layout computation in project --- src/ewoksdraw/layout/_compute_layout.py | 107 ++++++ src/ewoksdraw/layout/_layered_graph_model.py | 54 +++ src/ewoksdraw/layout/_layout_graph_model.py | 70 ++++ src/ewoksdraw/layout/_position_nodes.py | 256 ++++++++++++++ src/ewoksdraw/layout/_route_links.py | 338 +++++++++++++++++++ 5 files changed, 825 insertions(+) create mode 100644 src/ewoksdraw/layout/_compute_layout.py create mode 100644 src/ewoksdraw/layout/_layered_graph_model.py create mode 100644 src/ewoksdraw/layout/_layout_graph_model.py create mode 100644 src/ewoksdraw/layout/_position_nodes.py create mode 100644 src/ewoksdraw/layout/_route_links.py diff --git a/src/ewoksdraw/layout/_compute_layout.py b/src/ewoksdraw/layout/_compute_layout.py new file mode 100644 index 0000000..ae3c677 --- /dev/null +++ b/src/ewoksdraw/layout/_compute_layout.py @@ -0,0 +1,107 @@ +"""Build and run the native layered graph layout.""" + +from ._layered_graph_model import LayeredGraph +from ._layered_graph_model import LayeredLink +from ._layered_graph_model import LayeredNode +from ._layered_graph_model import LayeredPort +from ._layout_graph_model import LayoutGraph +from ._layout_graph_model import LayoutOptions +from ._layout_graph_model import LayoutResult +from ._layout_graph_model import Point +from ._layout_graph_model import PortRef +from ._layout_graph_model import Size +from ._position_nodes import position_nodes +from ._route_links import route_links + + +def compute_layout(graph: LayoutGraph, options: LayoutOptions) -> LayoutResult: + if not graph.nodes: + size = Size(options.padding * 2, options.padding * 2) + return LayoutResult(size=size, node_positions={}, link_routes={}) + + layered_graph = _build_layered_graph(graph) + layers = position_nodes(layered_graph, options) + link_routes = route_links( + layered_graph, + layers, + max(1.0, options.link_spacing), + ) + return _build_result(layered_graph, link_routes, options.padding) + + +def _build_layered_graph(graph: LayoutGraph) -> LayeredGraph: + nodes: list[LayeredNode] = [] + node_by_id: dict[str, LayeredNode] = {} + port_by_ref: dict[PortRef, tuple[LayeredNode, LayeredPort]] = {} + + for node in graph.nodes: + if node.id in node_by_id: + raise ValueError(f"Duplicate node id: {node.id!r}") + + layered_node = LayeredNode( + input_id=node.id, + width=node.size.width, + height=node.size.height, + ) + nodes.append(layered_node) + node_by_id[node.id] = layered_node + + for port in node.ports: + ref = PortRef(node.id, port.id) + if ref in port_by_ref: + raise ValueError(f"Duplicate port id: {port.id!r} on {node.id!r}") + port_by_ref[ref] = ( + layered_node, + LayeredPort(offset=port.offset, side=port.side), + ) + + links: list[LayeredLink] = [] + link_ids: set[str] = set() + for link in graph.links: + if link.id in link_ids: + raise ValueError(f"Duplicate link id: {link.id!r}") + link_ids.add(link.id) + + try: + source, source_port = port_by_ref[link.source] + target, target_port = port_by_ref[link.target] + except KeyError as error: + raise ValueError(f"Unknown port reference: {error.args[0]!r}") from None + + links.append( + LayeredLink( + input_id=link.id, + source=source, + target=target, + source_port=source_port, + target_port=target_port, + ) + ) + + return LayeredGraph(nodes=nodes, links=links) + + +def _build_result( + graph: LayeredGraph, + link_routes: dict[str, tuple[Point, ...]], + padding: float, +) -> LayoutResult: + real_nodes = [node for node in graph.nodes if not node.is_dummy] + node_positions = { + node.input_id: Point(node.x, node.y) + for node in real_nodes + if node.input_id is not None + } + + max_x = max(node.x + node.width for node in real_nodes) + max_y = max(node.y + node.height for node in real_nodes) + for route in link_routes.values(): + for point in route: + max_x = max(max_x, point.x) + max_y = max(max_y, point.y) + + return LayoutResult( + size=Size(max_x + padding, max_y + padding), + node_positions=node_positions, + link_routes=link_routes, + ) diff --git a/src/ewoksdraw/layout/_layered_graph_model.py b/src/ewoksdraw/layout/_layered_graph_model.py new file mode 100644 index 0000000..e1c3bc3 --- /dev/null +++ b/src/ewoksdraw/layout/_layered_graph_model.py @@ -0,0 +1,54 @@ +"""Mutable working data used by the layered layout algorithm.""" + +from dataclasses import dataclass +from dataclasses import field + +from ._layout_graph_model import Point +from ._layout_graph_model import PortSide + + +@dataclass(frozen=True) +class LayeredPort: + offset: Point + side: PortSide + + +@dataclass(eq=False) +class LayeredNode: + input_id: str | None + width: float + height: float + layer: int = -1 + x: float = 0.0 + y: float = 0.0 + + @property + def is_dummy(self) -> bool: + return self.input_id is None + + +@dataclass(eq=False) +class LayeredLink: + input_id: str + source: LayeredNode + target: LayeredNode + source_port: LayeredPort + target_port: LayeredPort + path: list[LayeredNode] = field(init=False) + + def __post_init__(self) -> None: + self.path = [self.source, self.target] + + @property + def is_self_loop(self) -> bool: + return self.source is self.target + + @property + def is_reversed(self) -> bool: + return not self.is_self_loop and self.path[0] is self.target + + +@dataclass +class LayeredGraph: + nodes: list[LayeredNode] + links: list[LayeredLink] diff --git a/src/ewoksdraw/layout/_layout_graph_model.py b/src/ewoksdraw/layout/_layout_graph_model.py new file mode 100644 index 0000000..2d21a20 --- /dev/null +++ b/src/ewoksdraw/layout/_layout_graph_model.py @@ -0,0 +1,70 @@ +"""Input and output data for the native graph layout.""" + +from collections.abc import Mapping +from dataclasses import dataclass +from enum import Enum + + +class PortSide(Enum): + WEST = "WEST" + EAST = "EAST" + + +@dataclass(frozen=True) +class Point: + x: float + y: float + + +@dataclass(frozen=True) +class Size: + width: float + height: float + + +@dataclass(frozen=True) +class LayoutPort: + id: str + offset: Point + side: PortSide + + +@dataclass(frozen=True) +class PortRef: + node_id: str + port_id: str + + +@dataclass(frozen=True) +class LayoutNode: + id: str + size: Size + ports: tuple[LayoutPort, ...] = () + + +@dataclass(frozen=True) +class LayoutLink: + id: str + source: PortRef + target: PortRef + + +@dataclass(frozen=True) +class LayoutGraph: + nodes: tuple[LayoutNode, ...] = () + links: tuple[LayoutLink, ...] = () + + +@dataclass(frozen=True) +class LayoutResult: + size: Size + node_positions: Mapping[str, Point] + link_routes: Mapping[str, tuple[Point, ...]] + + +@dataclass(frozen=True) +class LayoutOptions: + node_spacing: float = 20.0 + layer_spacing: float = 20.0 + link_spacing: float = 10.0 + padding: float = 12.0 diff --git a/src/ewoksdraw/layout/_position_nodes.py b/src/ewoksdraw/layout/_position_nodes.py new file mode 100644 index 0000000..14759a7 --- /dev/null +++ b/src/ewoksdraw/layout/_position_nodes.py @@ -0,0 +1,256 @@ +"""Node placement: layer assignment, crossing minimization, coordinates.""" + +from collections import defaultdict + +from ._layered_graph_model import LayeredGraph +from ._layered_graph_model import LayeredLink +from ._layered_graph_model import LayeredNode +from ._layout_graph_model import LayoutOptions + + +def position_nodes( + graph: LayeredGraph, options: LayoutOptions +) -> list[list[LayeredNode]]: + + _break_cycles(graph) + _rank_nodes_by_longest_path(graph) + _insert_dummy_nodes(graph) + + layers = group_by_layer(graph.nodes) + _minimize_crossings(graph, layers) + + dummy_spacing = max(1.0, options.link_spacing) + _place_rank_columns_left_to_right( + layers, + options.node_spacing, + options.layer_spacing, + dummy_spacing, + options.padding, + ) + return layers + + +def _break_cycles(graph: LayeredGraph) -> None: + nodes, links = graph.nodes, graph.links + white, gray, black = 0, 1, 2 + color = {node: white for node in nodes} + adjacency: dict[LayeredNode, list[LayeredLink]] = defaultdict(list) + for link in links: + if not link.is_self_loop: + adjacency[link.source].append(link) + + reversed_links: list[LayeredLink] = [] + + def visit(node: LayeredNode) -> None: + color[node] = gray + for link in adjacency[node]: + if color[link.target] == gray: + reversed_links.append(link) + elif color[link.target] == white: + visit(link.target) + color[node] = black + + for node in nodes: + if color[node] == white: + visit(node) + + for link in reversed_links: + link.path.reverse() + + +def _rank_nodes_by_longest_path(graph: LayeredGraph) -> None: + """Assign each node the longest distance from a graph source.""" + incoming, outgoing = _node_neighbors(graph) + nodes = graph.nodes + in_degree = {node: len(incoming[node]) for node in nodes} + + queue = [node for node in nodes if in_degree[node] == 0] + order: list[LayeredNode] = [] + while queue: + node = queue.pop(0) + order.append(node) + for target in outgoing[node]: + in_degree[target] -= 1 + if in_degree[target] == 0: + queue.append(target) + + remaining = set(nodes) - set(order) + order.extend(node for node in nodes if node in remaining) + + layer_of: dict[LayeredNode, int] = {} + for node in order: + max_source_layer = max( + (layer_of[source] for source in incoming[node] if source in layer_of), + default=-1, + ) + layer_of[node] = max_source_layer + 1 + + for node in nodes: + node.layer = layer_of[node] + + +def _insert_dummy_nodes(graph: LayeredGraph) -> None: + for link in graph.links: + if link.is_self_loop: + continue + source, target = link.path + span = target.layer - source.layer + dummy_nodes = [] + for offset in range(1, span): + dummy = LayeredNode( + input_id=None, + width=0.0, + height=0.0, + layer=source.layer + offset, + ) + graph.nodes.append(dummy) + dummy_nodes.append(dummy) + link.path[1:1] = dummy_nodes + + +def _node_neighbors( + graph: LayeredGraph, +) -> tuple[ + dict[LayeredNode, list[LayeredNode]], + dict[LayeredNode, list[LayeredNode]], +]: + incoming: dict[LayeredNode, list[LayeredNode]] = {node: [] for node in graph.nodes} + outgoing: dict[LayeredNode, list[LayeredNode]] = {node: [] for node in graph.nodes} + for link in graph.links: + if link.is_self_loop: + continue + for source, target in zip(link.path, link.path[1:]): + outgoing[source].append(target) + incoming[target].append(source) + return incoming, outgoing + + +def group_by_layer(nodes: list[LayeredNode]) -> list[list[LayeredNode]]: + max_layer = max(node.layer for node in nodes) + layers: list[list[LayeredNode]] = [[] for _ in range(max_layer + 1)] + for node in nodes: + layers[node.layer].append(node) + return layers + + +def _minimize_crossings(graph: LayeredGraph, layers: list[list[LayeredNode]]) -> None: + """Reorder nodes within each layer using the barycenter heuristic.""" + incoming, outgoing = _node_neighbors(graph) + for index in range(1, len(layers)): + _sort_layer_by_barycenter(layers[index], layers[index - 1], incoming) + for index in range(len(layers) - 2, -1, -1): + _sort_layer_by_barycenter(layers[index], layers[index + 1], outgoing) + + +def _sort_layer_by_barycenter( + layer: list[LayeredNode], + reference: list[LayeredNode], + neighbors: dict[LayeredNode, list[LayeredNode]], +) -> None: + reference_position = {node: index for index, node in enumerate(reference)} + + barycenters: dict[LayeredNode, float] = {} + for node in layer: + positions = [ + reference_position[neighbor] + for neighbor in neighbors[node] + if neighbor in reference_position + ] + if positions: + barycenters[node] = sum(positions) / len(positions) + else: + barycenters[node] = float("inf") + + layer.sort(key=lambda node: barycenters[node]) + + +def _place_rank_columns_left_to_right( + layers: list[list[LayeredNode]], + node_spacing: float, + layer_spacing: float, + dummy_spacing: float, + padding: float, +) -> None: + layer_heights = [ + _layer_extent(layer, node_spacing, dummy_spacing) for layer in layers + ] + max_height = max(layer_heights) + + x = padding + for layer, height in zip(layers, layer_heights): + y = padding + (max_height - height) / 2 + _place_layer(layer, x, y, node_spacing, dummy_spacing) + x += max(node.width for node in layer) + layer_spacing + + +def _layer_extent( + layer: list[LayeredNode], node_spacing: float, dummy_spacing: float +) -> float: + real_nodes = [node for node in layer if not node.is_dummy] + if not real_nodes: + return dummy_spacing * max(len(layer) - 1, 0) + + extent = 0.0 + pending_dummies = 0 + seen_real = False + for node in layer: + if node.is_dummy: + pending_dummies += 1 + continue + if seen_real: + extent += max(node_spacing, (pending_dummies + 1) * dummy_spacing) + else: + extent += pending_dummies * dummy_spacing + extent += node.height + pending_dummies = 0 + seen_real = True + + return extent + pending_dummies * dummy_spacing + + +def _place_layer( + layer: list[LayeredNode], + x: float, + y: float, + node_spacing: float, + dummy_spacing: float, +) -> None: + real_nodes = [node for node in layer if not node.is_dummy] + if not real_nodes: + for index, node in enumerate(layer): + node.x, node.y = x, y + index * dummy_spacing + return + + pending_dummies: list[LayeredNode] = [] + previous_real: LayeredNode | None = None + current_y = y + + for node in layer: + if node.is_dummy: + pending_dummies.append(node) + continue + + if previous_real is None: + _place_dummy_run(pending_dummies, x, current_y, dummy_spacing) + current_y += len(pending_dummies) * dummy_spacing + else: + gap = max(node_spacing, (len(pending_dummies) + 1) * dummy_spacing) + gap_start = previous_real.y + previous_real.height + slot = gap / (len(pending_dummies) + 1) + _place_dummy_run(pending_dummies, x, gap_start + slot, slot) + current_y = gap_start + gap + + node.x, node.y = x, current_y + current_y += node.height + previous_real = node + pending_dummies = [] + + if pending_dummies: + _place_dummy_run(pending_dummies, x, current_y + dummy_spacing, dummy_spacing) + + +def _place_dummy_run( + dummies: list[LayeredNode], x: float, first_y: float, spacing: float +) -> None: + for index, dummy in enumerate(dummies): + dummy.x, dummy.y = x, first_y + index * spacing diff --git a/src/ewoksdraw/layout/_route_links.py b/src/ewoksdraw/layout/_route_links.py new file mode 100644 index 0000000..ecadce2 --- /dev/null +++ b/src/ewoksdraw/layout/_route_links.py @@ -0,0 +1,338 @@ +"""Link routing for the layered algorithm — kept in its own file.""" + +from collections import defaultdict + +from ._layered_graph_model import LayeredGraph +from ._layered_graph_model import LayeredLink +from ._layered_graph_model import LayeredNode +from ._layered_graph_model import LayeredPort +from ._layout_graph_model import Point +from ._layout_graph_model import PortSide + +_STUB_LENGTH = 10.0 + + +def route_links( + graph: LayeredGraph, + layers: list[list[LayeredNode]], + dummy_spacing: float, +) -> dict[str, tuple[Point, ...]]: + links = graph.links + lane_offsets = _compute_route_lane_offsets(links, layers, dummy_spacing) + routes = {} + + for link in links: + if link.is_self_loop: + routes[link.input_id] = tuple(_self_loop_points(link.source)) + continue + + source, source_port, target, target_port = _logical_endpoints(link) + start = _port_position(source, source_port) + end = _port_position(target, target_port) + + # A link reversed by cycle breaking runs against the flow + # direction; route it outside the normal layer channels instead. + if end[0] < start[0]: + bend_points = _route_loopback_link( + start, end, source_port, target_port, layers + ) + else: + bend_points = _route_orthogonal_link( + link, start, end, source, target, layers, lane_offsets + ) + + routes[link.input_id] = tuple( + Point(x, y) for x, y in [start, *bend_points, end] + ) + + return routes + + +def _self_loop_points(node: LayeredNode) -> list[Point]: + x, y = node.x + node.width, node.y + stub = _STUB_LENGTH * 2 + return [ + Point(x, y), + Point(x + stub, y), + Point(x + stub, y + node.height), + Point(x, y + node.height), + ] + + +def _logical_endpoints( + link: LayeredLink, +) -> tuple[LayeredNode, LayeredPort, LayeredNode, LayeredPort]: + return link.source, link.source_port, link.target, link.target_port + + +def _port_position(node: LayeredNode, port: LayeredPort) -> tuple[float, float]: + return node.x + port.offset.x, node.y + port.offset.y + + +def _stub_direction(side: PortSide) -> float: + return 1.0 if side is PortSide.EAST else -1.0 + + +def _compute_route_lane_offsets( + links: list[LayeredLink], + layers: list[list[LayeredNode]], + dummy_spacing: float, +) -> dict[tuple[LayeredLink, tuple[int, int]], float]: + """Spread parallel links crossing the same layer gap into lanes.""" + segments_by_gap: dict[tuple[int, int], list[LayeredLink]] = defaultdict(list) + for link in links: + if link.is_self_loop: + continue + source, _, target, _ = _logical_endpoints(link) + layer_sequence = [ + source.layer, + *(dummy.layer for dummy in _ordered_dummy_nodes(link)), + target.layer, + ] + for first, second in zip(layer_sequence, layer_sequence[1:]): + if first != second: + gap = (min(first, second), max(first, second)) + segments_by_gap[gap].append(link) + + offsets: dict[tuple[LayeredLink, tuple[int, int]], float] = {} + for gap, gap_links in segments_by_gap.items(): + gap_links = _sort_links_for_gap(gap_links) + count = len(gap_links) + if count <= 1: + offsets[(gap_links[0], gap)] = 0.0 + continue + + max_offset = _max_lane_offset(layers, gap) + if max_offset <= 0: + spacing = 0.0 + else: + spacing = min(dummy_spacing, (max_offset * 2) / (count - 1)) + for index, link in enumerate(gap_links): + offsets[(link, gap)] = (index - (count - 1) / 2) * spacing + + return offsets + + +def _sort_links_for_gap(links: list[LayeredLink]) -> list[LayeredLink]: + def cross_axis_midpoint(link: LayeredLink) -> float: + source, source_port, target, target_port = _logical_endpoints(link) + start = _port_position(source, source_port) + end = _port_position(target, target_port) + return (start[1] + end[1]) / 2 + + return sorted(links, key=cross_axis_midpoint) + + +def _max_lane_offset(layers: list[list[LayeredNode]], gap: tuple[int, int]) -> float: + first_layer, second_layer = gap + if first_layer < 0 or second_layer >= len(layers): + return 0.0 + first_nodes, second_nodes = layers[first_layer], layers[second_layer] + if not first_nodes or not second_nodes: + return 0.0 + + first_end = max(node.x + node.width for node in first_nodes) + second_start = min(node.x for node in second_nodes) + return max(0.0, (second_start - first_end) / 2 - _STUB_LENGTH) + + +def _ordered_dummy_nodes(link: LayeredLink) -> list[LayeredNode]: + path = link.path if not link.is_reversed else reversed(link.path) + return list(path)[1:-1] + + +def _route_orthogonal_link( + link: LayeredLink, + start: tuple[float, float], + end: tuple[float, float], + source: LayeredNode, + target: LayeredNode, + layers: list[list[LayeredNode]], + lane_offsets: dict[tuple[LayeredLink, tuple[int, int]], float], +) -> list[tuple[float, float]]: + _, source_port, _, target_port = _logical_endpoints(link) + start_out = (start[0] + _stub_direction(source_port.side) * _STUB_LENGTH, start[1]) + end_out = (end[0] + _stub_direction(target_port.side) * _STUB_LENGTH, end[1]) + + if len(link.path) > 2: + return _route_long_link( + link, start, end, start_out, end_out, source, target, layers, lane_offsets + ) + + bend_points = [start_out] + channel = _layer_channel_between(layers, source.layer, target.layer) + gap = (min(source.layer, target.layer), max(source.layer, target.layer)) + channel += lane_offsets.get((link, gap), 0.0) + bend_points.append((channel, start_out[1])) + bend_points.append((channel, end_out[1])) + + bend_points.append(end_out) + return _clean_bend_points(bend_points, start, end) + + +def _route_long_link( + link: LayeredLink, + start: tuple[float, float], + end: tuple[float, float], + start_out: tuple[float, float], + end_out: tuple[float, float], + source: LayeredNode, + target: LayeredNode, + layers: list[list[LayeredNode]], + lane_offsets: dict[tuple[LayeredLink, tuple[int, int]], float], +) -> list[tuple[float, float]]: + """Route a multi-layer link without following dummy-node y slots.""" + layer_sequence = [ + source.layer, + *(dummy.layer for dummy in _ordered_dummy_nodes(link)), + target.layer, + ] + + channels = [] + for first, second in zip(layer_sequence, layer_sequence[1:]): + channel = _layer_channel_between(layers, first, second) + gap = (min(first, second), max(first, second)) + channels.append(channel + lane_offsets.get((link, gap), 0.0)) + + track_y = _long_link_track_y( + start_out[1], end_out[1], layers, source.layer, target.layer + ) + + bend_points = [start_out, (channels[0], start_out[1]), (channels[0], track_y)] + bend_points.extend((channel, track_y) for channel in channels[1:]) + bend_points.append((channels[-1], end_out[1])) + bend_points.append(end_out) + return _clean_bend_points(bend_points, start, end) + + +def _long_link_track_y( + start_y: float, + end_y: float, + layers: list[list[LayeredNode]], + source_layer: int, + target_layer: int, +) -> float: + """Choose a compact y-track that avoids real nodes in spanned layers.""" + lower = min(source_layer, target_layer) + 1 + upper = max(source_layer, target_layer) + obstacles = [ + node for layer in layers[lower:upper] for node in layer if not node.is_dummy + ] + if not obstacles: + return end_y + + for candidate in (end_y, start_y, (start_y + end_y) / 2): + if _track_y_is_clear(candidate, obstacles): + return candidate + + intervals = sorted((node.y, node.y + node.height) for node in obstacles) + merged: list[list[float]] = [] + for low, high in intervals: + if not merged or low > merged[-1][1]: + merged.append([low, high]) + else: + merged[-1][1] = max(merged[-1][1], high) + + candidates = [] + for index, (low, high) in enumerate(merged): + if low - _STUB_LENGTH >= 0: + candidates.append(low - _STUB_LENGTH) + candidates.append(high + _STUB_LENGTH) + if index + 1 < len(merged): + next_low = merged[index + 1][0] + if next_low - high > _STUB_LENGTH * 2: + candidates.append((high + next_low) / 2) + + clear = [c for c in candidates if c >= 0 and _track_y_is_clear(c, obstacles)] + if not clear: + return max(node.y + node.height for node in obstacles) + _STUB_LENGTH + + return min(clear, key=lambda c: (abs(c - end_y), abs(c - start_y))) + + +def _track_y_is_clear(y: float, obstacles: list[LayeredNode]) -> bool: + eps = 1e-9 + return all( + not (node.y + eps < y < node.y + node.height - eps) for node in obstacles + ) + + +def _layer_channel_between( + layers: list[list[LayeredNode]], first_layer: int, second_layer: int +) -> float: + left, right = min(first_layer, second_layer), max(first_layer, second_layer) + lower, upper = layers[left], layers[right] + lower_end = max(node.x + node.width for node in lower) + upper_start = min(node.x for node in upper) + return (lower_end + upper_start) / 2 + + +def _route_loopback_link( + start: tuple[float, float], + end: tuple[float, float], + source_port: LayeredPort, + target_port: LayeredPort, + layers: list[list[LayeredNode]], +) -> list[tuple[float, float]]: + start_out = (start[0] + _stub_direction(source_port.side) * _STUB_LENGTH, start[1]) + end_out = (end[0] + _stub_direction(target_port.side) * _STUB_LENGTH, end[1]) + + minimum, maximum = _loopback_obstacle_bounds(layers, start_out, end_out) + loop_y = _loopback_axis_position( + start_out[1], end_out[1], minimum, maximum, _STUB_LENGTH + ) + + bend_points = [start_out, (start_out[0], loop_y), (end_out[0], loop_y), end_out] + return _clean_bend_points(bend_points, start, end) + + +def _loopback_axis_position( + start: float, end: float, minimum: float, maximum: float, margin: float +) -> float: + """Choose the nearer outside lane, keeping the coordinate non-negative.""" + before = minimum - margin + after = maximum + margin + before_detour = abs(start - before) + abs(end - before) + after_detour = abs(start - after) + abs(end - after) + if before >= 0 and before_detour < after_detour: + return before + return after + + +def _loopback_obstacle_bounds( + layers: list[list[LayeredNode]], + start: tuple[float, float], + end: tuple[float, float], +) -> tuple[float, float]: + real_nodes = [node for layer in layers for node in layer if not node.is_dummy] + start_x, end_x = sorted((start[0], end[0])) + obstacles = [ + node + for node in real_nodes + if node.x <= end_x and node.x + node.width >= start_x + ] + if not obstacles: + obstacles = real_nodes + return ( + min(node.y for node in obstacles), + max(node.y + node.height for node in obstacles), + ) + + +def _clean_bend_points( + points: list[tuple[float, float]], + start: tuple[float, float], + end: tuple[float, float], +) -> list[tuple[float, float]]: + cleaned: list[tuple[float, float]] = [] + for point in points: + if _same_point(point, start) or _same_point(point, end): + continue + if cleaned and _same_point(cleaned[-1], point): + continue + cleaned.append(point) + return cleaned + + +def _same_point(first: tuple[float, float], second: tuple[float, float]) -> bool: + return abs(first[0] - second[0]) < 1e-9 and abs(first[1] - second[1]) < 1e-9 From ebfe164e3b2a8a585bdad0d937a3c780663deef9 Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 18 Sep 2026 17:34:28 +0200 Subject: [PATCH 02/12] Issue #34 - Test with rustelk wrapper --- .gitignore | 3 +- pixi.lock | 2849 ++++++++++++----------- pyproject.toml | 37 +- rust/Cargo.lock | 470 ++++ rust/Cargo.toml | 18 + rust/src/lib.rs | 16 + src/ewoksdraw/_elk_rs.pyi | 1 + src/ewoksdraw/layout/elk_backend.py | 11 + src/ewoksdraw/tests/test_elk_backend.py | 29 + 9 files changed, 2112 insertions(+), 1322 deletions(-) create mode 100644 rust/Cargo.lock create mode 100644 rust/Cargo.toml create mode 100644 rust/src/lib.rs create mode 100644 src/ewoksdraw/_elk_rs.pyi create mode 100644 src/ewoksdraw/layout/elk_backend.py create mode 100644 src/ewoksdraw/tests/test_elk_backend.py diff --git a/.gitignore b/.gitignore index fe84dfe..8bbae86 100644 --- a/.gitignore +++ b/.gitignore @@ -12,9 +12,10 @@ __pycache__/ # Distribution / packaging /build/ /dist/ +/rust/target/ *.egg-info/ .eggs/ /doc/_generated .svg # pixi environments -.pixi/* \ No newline at end of file +.pixi/* diff --git a/pixi.lock b/pixi.lock index 2ae0b47..72cd186 100644 --- a/pixi.lock +++ b/pixi.lock @@ -26,459 +26,472 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: allow packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.1.0-ha9f2e26_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.1.0-he0feb66_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.1.0-h934c35e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.7-hdc7f604_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/56/3f788afb8d7fc451d20a66a64ea58bbe189f6f11780b28ba09148974fb33/hdf5plugin-7.1.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/30/14/4d0204867623df3f33f86efd3d3692ba5e01321443f4d6eab35a22697618/librt-0.13.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/3d/ef4dcfffd22d27a61805d8ed9f7fb888495bc6aa88648fa07c1eaa5586b6/lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/49/49/f0dd91ff7d95dd4be65c754fd926cf914bb201eb0ba63c4055755fddeb97/silx-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/34/9bd9745a46eb95255a02998207213306c03d3babf0e58d87b74d40f4bb04/silx-3.1.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/76/68cf7ca0985fa41231c17f5515df4e16204649d9916c126f08c84dd64802/lxml-7.0.0b1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8f/44/aa8bc0a660581663fb957d9005851d23736757cae3e58231a8a1030c9f9e/fabio-2026.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/77/70d7a10732063beb74ad713682cf871e88f5c5fa39bfc8beff8a524bf9cb/mypy-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/87/b4d6c38e0ccd5e85dc54cecdf933a152c60b28fe5d993a6d8a72fa6d5896/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/0b/855e50e27eab8338c71c3157672c065cd2a2ab38887b3ea4bf128cbd89a1/hdf5plugin-7.0.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/dc/263439af9455b0f6843f31ab5426fb5f6c52d1597fe11409b93897513c08/pydantic_core-2.49.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.1-h19cb2f5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-h77d7759_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-ha1e9b39_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.7-hfe304d0_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.6-h7c6738f_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hb794df6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/03/5a/00d0f491d420d491b5134ee044cd8ead5103382d88f4c8aee623258a6348/hdf5plugin-7.0.0-py3-none-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/bd/9b43ef1abfc9481bfa1ceb8dd550a2e9231723d4eae7e29212f2dffe7a15/fabio-2026.6.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/9e/62a7ad88c863c740705c47723839762e3dae8498f58e37233c5307f2454c/silx-3.1.2-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/19/ac8348ae8711c9b5ae834634f635780cab62a0f5e6f988882e048b89c2ae/ast_serialize-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/78/cf416f15dc29375a229d9dfebf8db6e313f291580b39fa1a568b6052bb07/numpy-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/66/f49ae0d592bd45b6941e9a8bafcb6a87cddcd501ee7874707e767f01b585/librt-0.13.0-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/93/cf/5630b5e4be7d2e6bee8efe83865c925221103cf0221303b104ce134b01e2/lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/5a/7863a34c277a238d64049e3c9f51e9fc4cc012fec63ac64ac9ab4114701b/silx-3.0.1-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/58/fa0ae047da911f540284009b4f44b96fe09d83c076d7c103e9d645f46303/mypy-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/54/f67120006fc73a55b6d057d4662d061fbb4eceafce3047c76ca8b382eb11/ast_serialize-0.11.2-cp39-abi3-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/ea/a6/597c0c0e949000c4e107640b015458f2896903e0b42b00aa0f27a97f479b/lxml-7.0.0b1-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ed/7d/fb75c77d6bddc8a32eddcc0b8385de1202418cd5a5f4f4da69fc66ada8d1/pydantic_core-2.49.0-cp314-cp314-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hc7cc350_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.1-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.7-h4311e70_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hd3d0363_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/15/14/2ba1d61452d7c2a7fe12741e8d374e52b183476b07aa7f9e2a0d02b0720a/mypy-2.3.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/1b/f55794f02fb4dc8a26aeb2b9ea56a4966f17c1963fd5e7ffbbe70b620fd9/silx-3.1.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/50/51c76d74014d04fb95b6506d286808984b78a2f7a41039094e6b2194ac48/librt-0.13.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/38/e9/d4cfe8b88e7617d734ad481e4ddca09d32eb7272cc751f65bd9435379186/pydantic_core-2.49.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/a4/369f31daf13c58683698c03f7e05528cd2710994ba7dbed5ea843db4ab20/fabio-2026.6.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/ad/b28f4102e619c262b29bfcd13ccf6799e26f9ff113d2fdce19050ae29448/hdf5plugin-7.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9a/7e/8f2ab68bddbe58a66fbbaad87beeae3e7d7edddb17263d1fc423936cf34d/ast_serialize-0.11.2-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9e/59/abcc2d8def4fd60eec7d87f92d27c13448ffd9ab14339bcc63a0d7a2fdea/numpy-2.5.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/12/dc9d37010e7141ce929f1faf0d1cbebed4c0cb3e616fbed3af3f8e4e1391/lxml-7.0.0b1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/01/39d6dc9bcd6872f4132366597acd0294496db843243d18ab26ee9e5da044/silx-3.0.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/f6/ec7ec652c51db77c2f61d8573338e13e4704303265ccc658cb4031d9f354/ast_serialize-0.6.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.7-h4f90d01_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/12/baf0b62b4064d36684f776e5f8648995e8b14e68a619e48bb7668ee5715d/silx-3.0.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/23/bf/b419c3205ce1143ba7c69baef4f0ba43c14d8712113bf34f9e0d27d609be/ast_serialize-0.11.2-cp39-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/1d/28fc740abdad57e052600a508def01d21be767200d23ba489cfcb95c668a/silx-3.1.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/ae/6710c14ecb276031cf10249f6adf5a59e2d3fdb3b5183bd59f70524067ee/ast_serialize-0.6.0-cp39-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/4e/14/32cf2aae083c74b95678875e11d25d0cb9e51a33d27f4218eb9aeacfcd70/hdf5plugin-7.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/ce/0cb99efe6086b46cd985dc26672166fae312a239690e75871f7fafbd3fc5/librt-0.13.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/4c/c3f8bfd6ed0e5e38b5a244403b27f821d433443df5a15a278417c10a3a3c/mypy-2.3.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/f3/c20ea92e062444088edec728a7b8137ac40cd1b47815e8b4ee2537a7263d/pydantic_core-2.49.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b8/ce/3cf9a827342269f54d405a6202397de63f07c69cbd6ce7d183a3f0cba1e9/lxml-6.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/1b/3d85ec02e3712058197fdeee9db41ad18e8a3baeb8cfd9bc1be74e8218c0/fabio-2026.6.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/50/bb5cde8460d5ac1650fac61d3b58e59546e712e5c5683cf6859a823b0534/lxml-7.0.0b1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl test-lowest: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: allow packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.1.0-ha9f2e26_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.1.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.1.0-he0feb66_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.1.0-h934c35e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.20-h267e890_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.21-h267e890_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/56/3f788afb8d7fc451d20a66a64ea58bbe189f6f11780b28ba09148974fb33/hdf5plugin-7.1.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/cd/4f564b8f132de25db594efc706897069f016790cea63a5669c9df2675f64/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/12/b7424f96a1c35311f801ee5c87b7703dfa49d067a3c9cf5513bfaabb78f7/silx-3.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7a/16/cb391ee4b90186fa16d9ebcbe3ea96c71b8da3b0686386c8dcbcc3c67d44/lxml-6.1.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/d8/56af48cd6a2963db92f015a89e2c0a9f75f51dbd22d605ff689ce07395dc/lxml-7.0.0b1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/0b/855e50e27eab8338c71c3157672c065cd2a2ab38887b3ea4bf128cbd89a1/hdf5plugin-7.0.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/6c/0cd8b1a0e0c74d55a6adcca6fbba5bde42ad97d6c4eb1d974c27bc33f790/silx-3.1.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f9/92/28311d9350451aab67eff29763638a37a64a22ad572f4df3f9654554fb60/pydantic_core-2.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fd/15/a70400eeea394dbcf34f926713499c3f7334b2ee0ec3639b794491ffc9c0/fabio-2025.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h8c408c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-h77d7759_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.20-hea035f4_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hb794df6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.21-hea035f4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/03/5a/00d0f491d420d491b5134ee044cd8ead5103382d88f4c8aee623258a6348/hdf5plugin-7.0.0-py3-none-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/d1/c9f42e6cf899957ef6e95c18143a1d00bdbe30969cf33aaddbd0b385e135/silx-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/78/f8643e5afbd6c7e8830a660231bbb711125c1c6849e774e4aa917ce43f37/lxml-7.0.0b1-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/88/f6b7bf70cff75c5a9c856ca5dfde0f46290f85760ceb079f5d5362b50f41/silx-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/20/f7095ed9fc2c025f9cfe71cc6ec9f1feb05624edc1812423b5f1aecf3d4b/lxml-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/d4/23cdb18ad1d919ac59d1155698453f66c0a3719b9dc5862f3a3672cb1d08/fabio-2025.10.0-cp310-cp310-macosx_11_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/da/27fbb6465bedc6283b27773402930164b1d1014601d9267dc41ebee25dff/pydantic_core-2.49.0-cp310-cp310-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hc7cc350_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.20-hac0b6dc_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hd3d0363_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.21-hac0b6dc_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/da/dbe4dfc01ac226fb0504fad035f4d69f3202f3502e20e68537631daddd96/lxml-6.1.1-cp310-cp310-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/87/2d08d302f9f445c79bb0c06e8eb0ca26e5b69539aacfa530dd33f7c7146f/pydantic_core-2.49.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/e1/6c54b834bfd96f14221631d6161c41c68fe34bcb204e299339fd70b9c60a/lxml-7.0.0b1-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/ad/b28f4102e619c262b29bfcd13ccf6799e26f9ff113d2fdce19050ae29448/hdf5plugin-7.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/e0/7c5c2c0c93b80d5f07101ef7cc0ed9f27e860f01c8e68dc2553d00a67442/silx-3.0.1-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/d1/5ddb92494517fa5453c46872a87fd0d0e4a497543b353ce0aad6466f406a/fabio-2025.10.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/a9/f9cf335fe5f0c70a2f7122af6dd4d2c7ac9b380484a8687f98cead4183b4/silx-3.1.2-cp310-cp310-macosx_11_0_arm64.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.20-hc20f281_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.21-hc20f281_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - pypi: ./ - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - - pypi: https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/37/93/a5795be591f057c8e6c955add526ebb872e03150e1b50a90832e1e7c01af/fabio-2025.10.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/f4/38bf6ec867995074b6b4efd2c87cc34540510984a1d5154cdca9cddaba3a/lxml-7.0.0b1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/78/2d3b77ea511ad3732fbcd8d968c4cb2bdc269d9ef259745b4d466e4e724f/silx-3.0.1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/14/32cf2aae083c74b95678875e11d25d0cb9e51a33d27f4218eb9aeacfcd70/hdf5plugin-7.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/40/4f8513d4ead3c06ae00278a8abb76065da642bdf10095e6872ecd1f7a12e/silx-3.1.2-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/97/33691c66a4d7ec1a5a98e7c909a5b83ee45c7f7ba4cf92b1c4cf26e98079/lxml-6.1.1-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/21/83fffb77864408b8bf0fe1ca603926401d6f8775a8e150b39aacc9958f8a/charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/60/89b710602f263db5efcf4d9957e0fe8a2389339596e906190673a379ea56/pydantic_core-2.49.0-cp310-cp310-win_amd64.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -492,31 +505,40 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 size: 28948 timestamp: 1770939786096 -- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 - md5: d2ffd7602c02f2b316fd921d39876885 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + sha256: 1a0d382c515ebf55f8ee1f38c8b81bc95af5c2acc42ad53b66bc5df932032f96 + md5: e675fabcf81499adc7edf58124fb1e01 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 260182 - timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h54a6638_2.conda - sha256: d7c260b7e1cf22ce04d6ba8a86eabf4e6c50bc96a5c27fe2ecb32298af3e88eb - md5: 4ef4b977bb216a3001a3334696a80850 + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 257808 + timestamp: 1785906269155 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + sha256: 9f07834f0c546ab14d885ce0366285f61f44e326c0edd1fc63b8294e113ae432 + md5: 72a381cbad04f24b1c2a43ef707f45b4 depends: + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 - - __glibc >=2.17,<3.0.a0 license: MIT license_family: MIT purls: [] - size: 14455340 - timestamp: 1784916378180 + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 14459115 + timestamp: 1786545741408 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda sha256: 27d83f1188cd19bcb7754a078b3fa7f4cfb8527f8eb2fde54dd01fc529d1adec md5: 449500f2c089da11c40f5c21312e3e07 @@ -528,6 +550,7 @@ packages: license: GPL-3.0-only license_family: GPL purls: [] + run_exports: {} size: 745303 timestamp: 1784214507189 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda @@ -541,64 +564,54 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: {} size: 77856 timestamp: 1781203599810 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 - md5: a360c33a5abe61c07959e449fa1453eb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 58592 - timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h3435931_0.conda - sha256: ac38603008bf1e99b8ed379b1a656a67a70e2841f2b6a069c630cdf6316012d2 - md5: 0abe40a9880086ca4d2e5daf09dceff9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + sha256: c8c7583ef063bc3c430f1d48298e5ad24f796a35c22ed5b14183325825a61106 + md5: 6525a0b06aa4fd390795f0740636a9dd depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - libgcc >=15 license: MIT license_family: MIT purls: [] - size: 67576 - timestamp: 1783520858222 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.1.0-ha9f2e26_1.conda - sha256: d5cb8475131c31680f8fd30512c418f373064e272e452063276a8fb14c9fa42f - md5: 5a7d954665c707c93311657cd779c705 + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 68004 + timestamp: 1787753412298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + sha256: 33d1b5d57c5a55a474330c5ec41fe7001a5aa600d9639389e8ce5edafae216a4 + md5: 3b62b92f0f082b67c59618ebf07617a7 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgomp 16.1.0 he0feb66_1 - - libgcc-ng ==16.1.0=*_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - purls: [] - size: 1057877 - timestamp: 1785375436766 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.1.0-h69a702a_1.conda - sha256: 225275c562337a1cd61705da0ee4235dde7bba7504de1c34b74c894adb2b0eee - md5: 7ed870c014a6f23c7dfafda53d2763a9 - depends: - - libgcc 16.1.0 ha9f2e26_1 + - libgcc-ng ==16.2.0=*_5 + - libgomp 16.2.0 he0feb66_5 license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 28210 - timestamp: 1785375440733 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.1.0-he0feb66_1.conda - sha256: 62cb599ad0539d99386515326d9d5e8f51f75a60c69c2131b21df76edf35bd89 - md5: 88f2d91cb1533194c323534253094d23 + run_exports: {} + size: 1057064 + timestamp: 1789485807107 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + sha256: 224a5a09e258a1a257089a9af310e9336e1d36834959718a9fab8679742dd822 + md5: af44890f8a2beefd3a83805a59a65014 depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 640415 - timestamp: 1785375373755 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d - md5: b88d90cad08e6bc8ad540cb310a761fb + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 641644 + timestamp: 1789485759120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab + md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -606,19 +619,23 @@ packages: - xz 5.8.3.* license: 0BSD purls: [] - size: 113478 - timestamp: 1775825492909 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 - md5: 2c21e66f50753a083cbe6b80f38268fa + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 112995 + timestamp: 1786348617826 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda + sha256: 46820b4a835e175940ae20bec00fdddaff804cda27a1408ab1b95e77a2196437 + md5: fcfed1dc5053eb1901b66e7b1fc32588 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: BSD-2-Clause license_family: BSD purls: [] - size: 92400 - timestamp: 1769482286018 + run_exports: {} + size: 92759 + timestamp: 1786650399772 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 md5: d864d34357c3b65a4b731f78c0801dc4 @@ -628,52 +645,80 @@ packages: license: LGPL-2.1-only license_family: GPL purls: [] + run_exports: + weak: + - libnsl >=2.0.1,<2.1.0a0 size: 33731 timestamp: 1750274110928 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-hf4e2dac_0.conda - sha256: 72023efc207fe681e26b65fc9d668062cf0b4f0eacf3431e6eb099b95c1f2efd - md5: df088a279cd5e6fd2790b4c196434da1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.7-hdc7f604_106_cp314.conda + build_number: 106 + sha256: 5f879892bd439c3d94f4a97b06c214b9a19c4b92f74d84f0305c6ca1b2b239b2 + md5: 28af2158bb8dbb62e55b0af3b44f9d4a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: Python-2.0 + purls: [] + run_exports: {} + size: 10520530 + timestamp: 1788383918299 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda + sha256: f20d70da54e5b31dd4a51fb1efeaafafd5ab6dd8d7ac9d1438eaa2526ac4ed3d + md5: e72bbec309c2b0f37823ee7d4fabfcd3 depends: - __glibc >=2.17,<3.0.a0 - icu >=78.3,<79.0a0 - - libgcc >=14 + - libgcc >=15 - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 964200 - timestamp: 1785016112246 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.1.0-h934c35e_1.conda - sha256: 79721dd08aeb0ab9e773f1f9ef41cf4e6c17477e3d72319147619045bce05a09 - md5: aed6cf89adc1e9b846e4367ac538e434 + run_exports: + weak: + - libsqlite >=3.53.4,<4.0a0 + size: 974348 + timestamp: 1787051145557 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + sha256: 38cadde30fad8f7c101f9eec79f60bf03fc99310c7195d23f8b30832516d666f + md5: 75b43a2912a0354204696708e4f34b8d depends: - __glibc >=2.17,<3.0.a0 - - libgcc 16.1.0 ha9f2e26_1 + - libgcc 16.2.0 ha9f2e26_5 constrains: - - libstdcxx-ng ==16.1.0=*_1 + - libstdcxx-ng ==16.2.0=*_5 license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 6631744 - timestamp: 1785375462643 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f - md5: 01bb81d12c957de066ea7362007df642 + run_exports: {} + size: 6618916 + timestamp: 1789485826390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda + sha256: aa58bbba56644ffd062a4a9b358782c5eb7560ccead2ab8f7c5c6ede0a7d33a6 + md5: 74a0a409d9f4561265d36b789d3f398a depends: - - libgcc >=14 - __glibc >=2.17,<3.0.a0 + - libgcc >=15 license: BSD-3-Clause license_family: BSD purls: [] - size: 40017 - timestamp: 1781625522462 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc + run_exports: + weak: + - libuuid >=2.42.3,<3.0a0 + size: 39998 + timestamp: 1788347719520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + sha256: f7e9292dd219a6435bbb1223da9586c3e70d66d169c5a92f08db3f2127df04e9 + md5: f7a7ff5a6ab331e037abd34f379a631d depends: - - libgcc-ng >=12 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 license: LGPL-2.1-or-later purls: [] - size: 100393 - timestamp: 1702724383534 + run_exports: + weak: + - libxcrypt >=4.4.38 + size: 101957 + timestamp: 1785887123445 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 md5: 0de0122d9570a8ab637c6b73db268389 @@ -684,34 +729,42 @@ packages: license: Zlib license_family: Other purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 size: 63713 timestamp: 1785362952714 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 - md5: fc21868a1a5aacc937e7a18747acb8a5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + sha256: 5d46557214ed184381dafe835b7c94a474a1c3b307a08a250b1ea4779b44ffb3 + md5: ee6c0cd80a60961a1f48aa3e0b91f986 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: X11 AND BSD-3-Clause purls: [] - size: 918956 - timestamp: 1777422145199 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b - md5: 79dd2074b5cd5c5c6b2930514a11e22d + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 911196 + timestamp: 1786355078102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + sha256: 4747b2d6a8336f52343bceb8a1ebf41a9e6e665b9d2e3f989972de53a310599e + md5: 16e3034a330cc625f2c685edec60cf4e depends: - __glibc >=2.17,<3.0.a0 - ca-certificates - - libgcc >=14 + - libgcc >=15 license: Apache-2.0 license_family: Apache purls: [] - size: 3159683 - timestamp: 1781069855778 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.20-h267e890_1_cpython.conda - build_number: 1 - sha256: c15d8585b7a52fdb734bd16dbdcae4b81ed59268862d3a2588eb8ed69c8cbc52 - md5: c5eace1c2d8dae0bb08c094617ea8cc7 + run_exports: + weak: + - openssl >=3.6.4,<4.0a0 + size: 3202955 + timestamp: 1787698780103 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.21-h267e890_0_cpython.conda + sha256: a0dbc57fe7f0ffaace6708cdb813b1c0d06b9e52dd796780e0ff989f1befa86d + md5: dcc0756cfcab6dd08cbdbda60a0bd390 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -721,9 +774,9 @@ packages: - libgcc >=14 - liblzma >=5.8.3,<6.0a0 - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.53.2,<4.0a0 - - libuuid >=2.42.1,<3.0a0 - - libxcrypt >=4.4.36 + - libsqlite >=3.53.4,<4.0a0 + - libuuid >=2.42.2,<3.0a0 + - libxcrypt >=4.4.38 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - openssl >=3.5.7,<4.0a0 @@ -734,26 +787,32 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 25403213 - timestamp: 1781149348162 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_101_cp314.conda - build_number: 101 - sha256: ee8f2006e1724b1f2e9e0ccc5a7cfdcab973460faa2f63ac1f6e44fdad4c0344 - md5: 78975a41cf3c525da654f17e35bfca9e + run_exports: + weak: + - python_abi 3.10.* *_cp310 + noarch: + - python + size: 25369143 + timestamp: 1787352774260 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda + build_number: 106 + sha256: 4cd05407d6b07d00fd5b6cc78bd2f60ae5e21f777eb26ead82be2e3751c610a1 + md5: 56ee91e118243e46bfc0c41e4030d354 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.3,<4.0a0 - - libuuid >=2.42.2,<3.0a0 + - libpython 3.14.7 hdc7f604_106_cp314 + - libsqlite >=3.53.4,<4.0a0 + - libuuid >=2.42.3,<3.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.8,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -761,46 +820,60 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 36869055 - timestamp: 1784910110714 + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 26484459 + timestamp: 1788383955577 python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 - md5: d7d95fc8287ea7bf33e0e7116d2b95ec +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + sha256: 01b3fe073a66e321970d09e04b388708f8cbdca5cdfbfcb7c9eeb470ad10383d + md5: 69c01c781e7c8190bbdaf79e3848c5ca depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - ncurses >=6.5,<7.0a0 + - libgcc >=15 + - ncurses >=6.6,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 345073 - timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda - build_number: 103 - sha256: 43624eab22f5f29df7d6ffe914cf442f28fd559b55b290906255492826e636e8 - md5: 48a1049e710857572fc2a832aa394d9f - depends: + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 348899 + timestamp: 1787033801506 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + build_number: 104 + sha256: a1a241d172c1ccab067ba245206dd048bc3c2d1b84504b53c9468e99adfc16a1 + md5: 676a2f9b1c4fcf57b70aa5c65f6c60d0 + depends: + - libgcc >=15 - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - libzlib >=1.3.2,<2.0a0 constrains: - xorg-libx11 >=1.8.13,<2.0a0 license: TCL purls: [] - size: 3550916 - timestamp: 1784229071544 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 - md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3566806 + timestamp: 1787272857910 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda + sha256: 47d682b9f6d6ec9eb1a6e6c3e75ea6273e899e78fb7fc59f81d39745009fbc60 + md5: aa459086047c0e5e27023ab19f8cb86a depends: - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 601375 - timestamp: 1764777111296 + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 601301 + timestamp: 1786599621503 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda sha256: 95e8e74062a5fe5f870ac8c90302b6e89945165fdaed7810606e84ddee6aac12 md5: e27d2ac27b096dc51fedfcf775a53f9b @@ -808,6 +881,7 @@ packages: - __win license: ISC purls: [] + run_exports: {} size: 132136 timestamp: 1784754918886 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda @@ -817,36 +891,53 @@ packages: - __unix license: ISC purls: [] + run_exports: {} size: 131780 timestamp: 1784754889428 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - build_number: 8 - sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 - md5: 0539938c55b6b1a59b560e843ad864a4 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda + build_number: 9 + sha256: e7f8e965bbfb98e08feb2365cacdad8bb218fa5b5a0a2752f747287f425f213c + md5: 350d89b50d7de805abf2e63e29dee451 constrains: - python 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD purls: [] - size: 6989 - timestamp: 1752805904792 + run_exports: {} + size: 6791 + timestamp: 1788302824440 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda sha256: b928c30ddcb0e3f544c6eade8352737e6e610e263276b90232db6a578ef899d8 md5: fcb489df604d100968b737f2cb6076c6 license: LicenseRef-Public-Domain purls: [] + run_exports: {} size: 118849 timestamp: 1784250406640 -- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 - md5: 4173ac3b19ec0a4f400b4f782910368b +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda + sha256: 4ed83961876dc8844a6f0df49c07b408efbaea275ffb0b37133e24c006990b3a + md5: 9d9a39212a876e4bb751c1cc3927b678 depends: - - __osx >=10.13 + - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 133427 - timestamp: 1771350680709 + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 133271 + timestamp: 1785906721507 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.1-h19cb2f5_0.conda + sha256: b702c638bb8f0c6f0a5dd6941e77ca2309b73cd4e575d34b4c5b8e4d01996ccc + md5: 23a540fb2961933d47ad411c9a679385 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 572932 + timestamp: 1788869719775 - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda sha256: 9c96cc05e056e1bba5b545cbbd57b6e01db622dc2c82934caaaa25cfb22fe666 md5: dcfdea7b7013beef0a4d744d776ea38f @@ -857,59 +948,72 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: {} size: 76020 timestamp: 1781204303305 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6 - md5: 66a0dc7464927d0853b590b6f53ba3ea - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 53583 - timestamp: 1769456300951 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h8c408c4_0.conda - sha256: 525e9b574d6a62b73ccd4cb616495fccd11e80c7e6f4fd7e97a9dd5804bf4c0e - md5: b85d1868b8d9af5306443978da2961d6 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda + sha256: c4793041226c87f987b9903e6503b76f02f52855cc193be2729ac127e600529b + md5: e077b71ae65754eda067e4125364b905 depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 61307 - timestamp: 1783521470318 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - sha256: d9e2006051529aec5578c6efeb13bb6a7200a014b2d5a77a579e83a8049d5f3c - md5: becdfbfe7049fa248e52aa37a9df09e2 + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 60786 + timestamp: 1787754056669 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda + sha256: 7915dac7c71c208e40e716e2f6d3eff41a8d5584e0e7c2d46f9bf9bd5f9aa739 + md5: daf49067580fbfeae3ac7f9535400494 depends: - __osx >=11.0 constrains: - xz 5.8.3.* license: 0BSD purls: [] - size: 105724 - timestamp: 1775826029494 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - sha256: 1096c740109386607938ab9f09a7e9bca06d86770a284777586d6c378b8fb3fd - md5: ec88ba8a245855935b871a7324373105 + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 104919 + timestamp: 1786349094608 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-ha1e9b39_2.conda + sha256: 6438d0ef76e81f2b75ad7599685a525407c1d9fb2d6a7c18f360614ae6807970 + md5: b10a43915a31193e06b2781b9d11aec3 depends: - - __osx >=10.13 + - __osx >=11.0 license: BSD-2-Clause license_family: BSD purls: [] - size: 79899 - timestamp: 1769482558610 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-h77d7759_0.conda - sha256: 5725d44a17d196adba9798a5fd9f692b7039a827cd6145556a072a80e1931c49 - md5: 993009426e1d3aa90eed155171bd59d8 + run_exports: {} + size: 79639 + timestamp: 1786651070313 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.7-hfe304d0_106_cp314.conda + build_number: 106 + sha256: ddd0f95c3a5da64b9b37b925309f74d9078376f7f0e52f1f32b8b9209d020d6d + md5: 186a99fb514373907206c453031c3938 + depends: + - __osx >=11.0 + - libcxx >=20 + license: Python-2.0 + purls: [] + run_exports: {} + size: 2112028 + timestamp: 1788385157401 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda + sha256: 78afe0bf88da66d7df62d39632aa69cb73eb32d923cd1175230ce2978618d9c8 + md5: 254c302876eacc77a4682b3fa6f72385 depends: - __osx >=11.0 - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 1008531 - timestamp: 1785016345740 + run_exports: + weak: + - libsqlite >=3.53.4,<4.0a0 + size: 1008994 + timestamp: 1787051932723 - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda sha256: b2dba286dd6632292b12296e761193b5ef9fb0eaeecaa481f5ba9af72c0c18e1 md5: 7d3fa28263bb7f8ea32db11f570a5bb6 @@ -920,39 +1024,47 @@ packages: license: Zlib license_family: Other purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 size: 58993 timestamp: 1785276808631 -- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda - sha256: f5f7e006ff4271305ab4cc08eedd855c67a571793c3d18aff73f645f088a8cae - md5: 31b8740cf1b2588d4e61c81191004061 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda + sha256: 12c1d676b9a0e8109b576672519312c5428308f3f3d7706f8717e2f536d5d9e7 + md5: 88a79390f87c8f3334b9999a892e78d4 depends: - __osx >=11.0 license: X11 AND BSD-3-Clause purls: [] - size: 831711 - timestamp: 1777423052277 -- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda - sha256: 819d4368d6b5b298fa40d4bc836c1250842489002cacf3fb918a13ee2033b7c6 - md5: 46be42ab403712fd349d007d763bf767 + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 834865 + timestamp: 1786356957789 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda + sha256: 73d648d24f0994fd8641972848d74bd57b8d80888a64600643e3fe88a1b50545 + md5: 7a1b628e987d25df3ac6986d45bb0979 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 2775300 - timestamp: 1781071391999 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.20-hea035f4_1_cpython.conda - build_number: 1 - sha256: 9bc83a907d13a532f3a38ddc666a58d612cf548347d5e8eec2ce1ad1dacbe420 - md5: b0564ca60a54a4087fcd11326e1169e2 + run_exports: + weak: + - openssl >=3.6.4,<4.0a0 + size: 2780873 + timestamp: 1787700098779 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.21-hea035f4_0_cpython.conda + sha256: 07fb1ddf805f26944cd7198920ae9290b8734618413c37af609452a8ba6015e9 + md5: f97b88f1e696e83b9a649d690e098dc0 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - - libsqlite >=3.53.2,<4.0a0 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - openssl >=3.5.7,<4.0a0 @@ -963,23 +1075,29 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 13071051 - timestamp: 1781151393975 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.6-h7c6738f_101_cp314.conda - build_number: 101 - sha256: 08c788453bdf61071e075a97684291286877536ee92f23a73b4127f1b85bdbcd - md5: c773b2aa854bf3d37e26aeb677c0e732 + run_exports: + weak: + - python_abi 3.10.* *_cp310 + noarch: + - python + size: 13117625 + timestamp: 1787353466177 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda + build_number: 106 + sha256: 74e72b101d4985b9919fcf01fec55ff9c82e862377d6be23b99bfe5562ffc207 + md5: 148a7a307869b0f1e4560ec5400d29bb depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 + - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.3,<4.0a0 + - libpython 3.14.7 hfe304d0_106_cp314 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.8,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -987,61 +1105,92 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 14497574 - timestamp: 1784958042787 + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 12612709 + timestamp: 1788385311014 python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5 - md5: eefd65452dfe7cce476a519bece46704 +- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda + sha256: feb9248a062b7a0738e56339d8c9e87bc9adf8e8c76549fb55b0b2456bec3a57 + md5: 434eb49340f57827ef7ca3bb21f77c32 depends: - - __osx >=10.13 - - ncurses >=6.5,<7.0a0 + - __osx >=11.0 + - ncurses >=6.6,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 317819 - timestamp: 1765813692798 -- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hb794df6_3.conda - sha256: 670a364b8285887e5738880bb026f721af2662cfefe9ef64aa9e93eff1981535 - md5: bc699b366e49399bf8e5c6de99bb8cfb + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 319279 + timestamp: 1787034454836 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda + sha256: 74e5fabcaf6ca0db052c645646ea04ded98a5eb7540483217f8101a819eb3107 + md5: 71c9f1f0267f2639523e898c6b50a4dc depends: - __osx >=11.0 - libzlib >=1.3.2,<2.0a0 license: TCL purls: [] - size: 3516600 - timestamp: 1784229134070 -- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f - md5: 727109b184d680772e3122f40136d5ca + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3512384 + timestamp: 1787272935349 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda + sha256: 5277886d9704a624dc9b79ac985861e1e431bdb39a57c082507ab577a138ec6c + md5: c1d11f04327e40537ffe6cad5b131019 depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 528148 - timestamp: 1764777156963 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df - md5: 620b85a3f45526a8bc4d23fd78fc22f0 + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 528228 + timestamp: 1786599702092 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda + sha256: 8ec22f0ba25cbfc2e64d70cf29459eccd7ffdf6436f6a6ff15bbfef799f7d4f6 + md5: b50612e7d190b8061ab4e7dc119cf4d5 depends: - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 124834 - timestamp: 1771350416561 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hc7cc350_2.conda - sha256: f0b22bc30e4cc29e29ba3234cb38497fe8def2c2aae4b775d42fe5b378a018c9 - md5: 6133ddbb17ba2b50700dd88e9303ce27 + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 124965 + timestamp: 1785906749812 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda + sha256: 6cdb5dee54c72e56ab189fb3ad33cb28533553d42590e7e831160248f4416a43 + md5: a5efc0b42bb8b42e97d0a29ae3e3c187 depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 14070698 - timestamp: 1784916459058 + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 14070242 + timestamp: 1786545847761 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.1-h55c6f16_0.conda + sha256: 3f902803f0fc2643a4f82ff15a06811d974ff5fb6fa8f957720a7ef84e13ad98 + md5: b61106a0b5ac7cfe874f8b2e4f067dfa + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 578565 + timestamp: 1788869180613 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda sha256: 5af74261101e3c777399c6294b2b5d290e508153268eb2e9ff99c4d69834612f md5: a915151d5d3c5bf039f5ccc8402a436f @@ -1052,60 +1201,73 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: {} size: 69362 timestamp: 1781203631990 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 - md5: 43c04d9cb46ef176bb2a4c77e324d599 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + sha256: 2783389a7b9dda04c62cc54c6bbeb03dd3cef24b3fc642715d02a3fa19464a9a + md5: 216bbcc23c11e9695b3db4a8771d76eb depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 40979 - timestamp: 1769456747661 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-hcf2aa1b_0.conda - sha256: 2c6ac9a6cd65af89b2bd448518bb1e13b44a2e48c0d469398e37bcfc0092e832 - md5: 92e8690d170d46d768c32553458c0105 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 43734 - timestamp: 1783521647536 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e - md5: b1fd823b5ae54fbec272cea0811bd8a9 + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 43637 + timestamp: 1787753403688 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda + sha256: 23d0630046a3e8b164d8f80f2b74ed2605af2e7050ab9913018056402fae4311 + md5: 8ab10323068b107661a4b9a4af84f3b5 depends: - __osx >=11.0 constrains: - xz 5.8.3.* license: 0BSD purls: [] - size: 92472 - timestamp: 1775825802659 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 - md5: 57c4be259f5e0b99a5983799a228ae55 + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 91720 + timestamp: 1786348695846 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_2.conda + sha256: 04cc136c5a956a73aa14e0a160b5822b0b29714e67b299fa1b1fd16dbcba5366 + md5: ff33a4dbd93abc8a798cc4e0e7c8136d depends: - __osx >=11.0 license: BSD-2-Clause license_family: BSD purls: [] - size: 73690 - timestamp: 1769482560514 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h1ae2325_0.conda - sha256: 745662565e103f290e9dc4263bbd88285082f8cf699854fe2d5f1e35a4a0d326 - md5: 0e3477c0c3e718dcf2eb74ccc8f68570 + run_exports: {} + size: 73289 + timestamp: 1786651074391 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.7-h4311e70_106_cp314.conda + build_number: 106 + sha256: b239028180e1ba2f7daff4053c89e41f7c0f1a3c21bb82f6dcb09384d123ec1f + md5: 4d7a303343eff82e8b92d52c5fd3991a + depends: + - __osx >=11.0 + - libcxx >=20 + license: Python-2.0 + purls: [] + run_exports: {} + size: 1875368 + timestamp: 1788383432953 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda + sha256: 839b31d4830e896b4d315b551d27f2bb08026bc946df04bcc360d8627c3ba2cd + md5: fde96d40ebe9a9cb34e4122380189ddb depends: - __osx >=11.0 - icu >=78.3,<79.0a0 - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 929203 - timestamp: 1785016131414 + run_exports: + weak: + - libsqlite >=3.53.4,<4.0a0 + size: 942754 + timestamp: 1787051243846 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda sha256: a18fa5d5bac452401459f966cf0d872224e8080c4ff93c77e168d43ab42ef9d7 md5: f39288f0ea63ae962e1a2e4f355a0d75 @@ -1116,39 +1278,47 @@ packages: license: Zlib license_family: Other purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 size: 47822 timestamp: 1785277049190 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda - sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d - md5: 343d10ed5b44030a2f67193905aea159 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + sha256: 7024a48c8c0d0114ed4ab53c76bf9275d50e91ba7cea367a9aead638d3c29c68 + md5: 3dfa0d0316dc246cd44937a557de4501 depends: - __osx >=11.0 license: X11 AND BSD-3-Clause purls: [] - size: 805509 - timestamp: 1777423252320 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda - sha256: b3e3ca895c336d4eb91c5d2f244a312bdb59a0de8cfa0cc4c179225ab2f6bbfb - md5: 8187a86242741725bfa74785fe812979 + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 804298 + timestamp: 1786355189145 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda + sha256: f23239eacd75c4c50705e68fae1aa3292da473e6a3a4abe2330f1e6afa680704 + md5: ae71ab40048c19a389a7dcccb86c2481 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 3102584 - timestamp: 1781069820667 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.20-hac0b6dc_1_cpython.conda - build_number: 1 - sha256: 3c9e084162759c4029212b96147a179b0ad8076abfca85f00984d2aaa10c70f9 - md5: 7f498ade7b9aa9e327ad23931e6c6d4a + run_exports: + weak: + - openssl >=3.6.4,<4.0a0 + size: 3110142 + timestamp: 1787698648639 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.21-hac0b6dc_0_cpython.conda + sha256: ba61f76dd32c4c0991eec0ead32225e25f01d916f3a02dada9960338461d54f3 + md5: 85c3a8ed7ab3b52eee76c6f23b3daa16 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - - libsqlite >=3.53.2,<4.0a0 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - openssl >=3.5.7,<4.0a0 @@ -1159,23 +1329,29 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 12888297 - timestamp: 1781148720732 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_101_cp314.conda - build_number: 101 - sha256: fc70ae73df7798bce7cac7adef7fdfb874208b2623a0e8ccb4354194b8508769 - md5: 6e9670f5238dfb27ef4f6364ed536cc0 + run_exports: + weak: + - python_abi 3.10.* *_cp310 + noarch: + - python + size: 12976091 + timestamp: 1787352030187 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda + build_number: 106 + sha256: 5ffc8349ca089ec5ac39ad36a095323ad177ebe05cbfc690c1e135560cfd68b7 + md5: 5fd37c78250b4f57c2bcf9ad2e54beb1 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 + - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.3,<4.0a0 + - libpython 3.14.7 h4311e70_106_cp314 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.8,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -1183,44 +1359,58 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 14035244 - timestamp: 1784909523029 + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 12223441 + timestamp: 1788383470498 python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 - md5: f8381319127120ce51e081dce4865cf4 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda + sha256: d6782b430e6dce4fe8c7ac118cd988d5a193eb4a7f60741edfaede58016b6110 + md5: 9347fd56a002e6b58946831d48fe62f6 depends: - __osx >=11.0 - - ncurses >=6.5,<7.0a0 + - ncurses >=6.6,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 313930 - timestamp: 1765813902568 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hd3d0363_3.conda - sha256: 47186bc7ab8d7e8bee86bbd1a917196f8c21cf63f081fc33cd6d1221af087580 - md5: 8e3cf0e455e6b54519f0b1c72c61780a + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 314395 + timestamp: 1787033878899 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda + sha256: 857d89087ae7f2c328cf256728affcb7343031a148b4af847334d248a9cf564c + md5: 90a01bf394d1c594e0eb9258f967d828 depends: - __osx >=11.0 - libzlib >=1.3.2,<2.0a0 license: TCL purls: [] - size: 3338712 - timestamp: 1784229090530 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 - md5: ab136e4c34e97f34fb621d2592a393d8 + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3342183 + timestamp: 1787272852357 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda + sha256: da867f5092eb0cb746d353694f0098031fd9817a4ce7d5743121209ae0f406ca + md5: 4ec2684c73812cc2c3d78379384a39cc depends: - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 433413 - timestamp: 1764777166076 -- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 - md5: 4cb8e6b48f67de0b018719cdf1136306 + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 433687 + timestamp: 1786599629846 +- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda + sha256: 04767466ee9227c9c57ab2c6503e0149177d34111c7418d2f420297acb1eb229 + md5: c3301c058362f340100d91cd8be0393f depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1228,8 +1418,11 @@ packages: license: bzip2-1.0.6 license_family: BSD purls: [] - size: 56115 - timestamp: 1771350256444 + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 55919 + timestamp: 1785906343696 - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda sha256: 1a54d874addda73b6f7164d5f3905821277a1831bcc05edd74b3085391688571 md5: ccc490c81ffe14181861beac0e8f3169 @@ -1242,23 +1435,12 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: {} size: 71631 timestamp: 1781203724164 -- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - sha256: 59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190 - md5: 720b39f5ec0610457b725eb3f396219a - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 45831 - timestamp: 1769456418774 -- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_0.conda - sha256: 2ea8d2fe7b84ca37653777e15ac1e7abd35f0c90d3efbe7f6c4de9b489606369 - md5: 92bdfc0e5012660892b0e0eaf3069a5c +- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + sha256: 613e8077c5cca5df7fe84ade7d5050301bee3c6c4c450ffe61d34a349ab4f11c + md5: ceb38b0ba900847d8da4289c3c8e5708 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1266,11 +1448,14 @@ packages: license: MIT license_family: MIT purls: [] - size: 50247 - timestamp: 1783521107166 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 - md5: 8f83619ab1588b98dd99c90b0bfc5c6d + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 49992 + timestamp: 1787753517346 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda + sha256: d36c4a1e1f80fd08e18a407e03622ff2f34dfdd022da6488ad19603dea19e6d5 + md5: 880a0c8549479b198af21ba5dc49b109 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1279,11 +1464,14 @@ packages: - xz 5.8.3.* license: 0BSD purls: [] - size: 106486 - timestamp: 1775825663227 -- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514 - md5: e4a9fc2bba3b022dad998c78856afe47 + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 105809 + timestamp: 1786348717883 +- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_2.conda + sha256: f07e451de3db1836b87f7aedf95c8e65cdb06c0e6105329ba24bb5f7b5c75e2a + md5: 5ae92fd6614edd024576e14069d7ad4c depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1291,19 +1479,36 @@ packages: license: BSD-2-Clause license_family: BSD purls: [] - size: 89411 - timestamp: 1769482314283 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_0.conda - sha256: 62e1c45ec71ab2e5deeeb0e47e7df6a609991e91d46348f16df50c68fee145c8 - md5: ca0d59f40a02a15e9b5d0ff8db0f85e3 + run_exports: {} + size: 89109 + timestamp: 1786650384519 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.7-h4f90d01_106_cp314.conda + build_number: 106 + sha256: 95b7bd6fec10031b44b20276e57c11d71cd1095f966aa84c1bba5ece0eea64d2 + md5: 2d48db2a15a7b768bb563d2675c99b2c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Python-2.0 + purls: [] + run_exports: {} + size: 51250 + timestamp: 1788384361391 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda + sha256: 0a45d7c0f20146fff787a106f8fa187872e309c70975ff8f0936e188914c26ad + md5: a72d495965b144bb7da033642d389047 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: blessing purls: [] - size: 1313790 - timestamp: 1785016158097 + run_exports: + weak: + - libsqlite >=3.53.4,<4.0a0 + size: 1314919 + timestamp: 1787051140039 - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda sha256: 0629c2cc0404d3bb29d6baa7b4ba62da80797015e86de050db81ea5a07050527 md5: 5d2ff29d465097458cc3ff6569151991 @@ -1316,11 +1521,14 @@ packages: license: Zlib license_family: Other purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 size: 58529 timestamp: 1785276664143 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda - sha256: cb6e7ba0d010ee0d3249ce9886de3d7613d26d9965d4c95666fa66b9c4c31001 - md5: e99f95734a326c0fd4d02bbd995150d4 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda + sha256: 9dddb559ba49744d5d94092d8d13cb0567f5c3b3f439f3acf28433d1f4256acc + md5: 73cb1783f47c452be4c309430fbef89f depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -1329,18 +1537,20 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 9414790 - timestamp: 1781071745579 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.20-hc20f281_1_cpython.conda - build_number: 1 - sha256: 71e2cdc0f87a0a2c5db7beb82469559bba1ce88a4fafe4e2d169172c2db45d1f - md5: 62018eccb570c1fb288b550f804fb940 + run_exports: + weak: + - openssl >=3.6.4,<4.0a0 + size: 9474879 + timestamp: 1787699876495 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.21-hc20f281_0_cpython.conda + sha256: 5fdfb98ba1a884e2f701fec9b0f59350281c9f160d193721bb3d502fcdebafbd + md5: c5591007fa429194271251d0354b3d84 depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - - libsqlite >=3.53.2,<4.0a0 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - openssl >=3.5.7,<4.0a0 - tk >=8.6.13,<8.7.0a0 @@ -1352,21 +1562,27 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 16128204 - timestamp: 1781148776322 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_101_cp314.conda - build_number: 101 - sha256: 3a9ae901cd853d507d97aa8b72af4b9a572a3f92dcc5bad8a1318f77ff4e0e64 - md5: 67bbf51f88a2053513d7c78f485f7479 + run_exports: + weak: + - python_abi 3.10.* *_cp310 + noarch: + - python + size: 16146296 + timestamp: 1787352131213 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda + build_number: 106 + sha256: 9fdcb8a5018d91a22484e67ac6c5ae9116f082f953328f43ed4421418740dfb1 + md5: df0b471269a379db0262256e332c1e7c depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 + - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.3,<4.0a0 + - libpython 3.14.7 h4f90d01_106_cp314 + - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.8,<4.0a0 - python_abi 3.14.* *_cp314 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -1376,20 +1592,28 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 18338767 - timestamp: 1784911044838 + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 18377601 + timestamp: 1788384478011 python_site_packages_path: Lib/site-packages -- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda - sha256: 13fa29257d43f8e630a1e591ed77fae9bbbb236b011432f01e2034cf36e6bf03 - md5: aaf79e2af50a151fb5b5a3e3f38b7a69 +- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda + sha256: f19618a3a82cc483dacf1c70a30367ee7b0c7e71b90f1f80e14feff44fbd3688 + md5: dd9eb33c99d352b6356f86964d6040f7 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 license: TCL purls: [] - size: 3782314 - timestamp: 1784229072899 + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3782376 + timestamp: 1787272860855 - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 md5: 71b24316859acd00bdb8b38f5e2ce328 @@ -1398,6 +1622,7 @@ packages: - vs2015_runtime >=14.29.30037 license: LicenseRef-MicrosoftWindowsSDK10 purls: [] + run_exports: {} size: 694692 timestamp: 1756385147981 - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda @@ -1410,6 +1635,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] + run_exports: {} size: 21383 timestamp: 1785359368566 - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda @@ -1423,6 +1649,7 @@ packages: license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] + run_exports: {} size: 767955 timestamp: 1785359364369 - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda @@ -1435,30 +1662,36 @@ packages: license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] + run_exports: + strong: + - vcomp14 >=14.51.36247 size: 155910 timestamp: 1785359349999 -- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - sha256: 368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2 - md5: 053b84beec00b71ea8ff7a4f84b55207 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda + sha256: ca7daae4f218a11fab82cc2857f0ea518ec3f46acec60490485347a4c22c6b3e + md5: e4ac308c39d6d0e131154976da67cf3b depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 388453 - timestamp: 1764777142545 + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 387535 + timestamp: 1786599623274 - pypi: ./ name: ewoksdraw requires_dist: - defusedxml + - ewokscore==5.1.0rc4 - reportlab - typing-extensions ; python_full_version < '3.11' - xmltodict - pyelk @ git+https://github.com/LudoBroche/pyelk.git@ewoksdraw-modifications - - ewokscore==5.1.0rc3 - pytest>=7 ; extra == 'test' - ewoksdraw[test] ; extra == 'dev' - ruff>=0.16.0 ; extra == 'dev' @@ -1473,32 +1706,16 @@ packages: requires_dist: - pytest>=7.0 ; extra == 'dev' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl - name: pydantic-core - version: 2.46.4 - sha256: 8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/03/5a/00d0f491d420d491b5134ee044cd8ead5103382d88f4c8aee623258a6348/hdf5plugin-7.0.0-py3-none-macosx_10_13_x86_64.whl - name: hdf5plugin - version: 7.0.0 - sha256: e0ff0a81e6319575ffc8bf230b8df43f3f19f6fe96843e113e04c5ba9f7f3141 - requires_dist: - - h5py>=3.0.0 - - ipython ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - packaging ; extra == 'test' - - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' - - blosc2>=2.5.1 ; extra == 'test' - - blosc2-grok>=0.2.2 ; extra == 'test' - - hdf5plugin[doc,test] ; extra == 'dev' - - mypy ; extra == 'dev' - - ruff ; extra == 'dev' - requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + name: filelock + version: 4.0.0 + sha256: a850aa9ec2acba8db9ca2e9fcf8a327fbc2f85e432725715b37bd76b7dd1f798 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ast-serialize + version: 0.11.2 + sha256: a7004ba572f09be34342ccb98dcd4bad5707d3d81adc8cb4c3f685d2a2c51bbc + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl name: pyyaml version: 6.0.3 @@ -1529,21 +1746,51 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - name: defusedxml - version: 0.7.1 - sha256: a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/11/12/baf0b62b4064d36684f776e5f8648995e8b14e68a619e48bb7668ee5715d/silx-3.0.1-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + name: ewokscore + version: 5.1.0rc4 + sha256: 585a95541630c781b4c661cc9badaa9218df411a4eaab2fd5f3f306af34cf22e + requires_dist: + - numpy>=1.15 + - networkx>=2 + - silx>=1 + - pyyaml>=5.1 + - h5py>=2.8 + - packaging + - ewoksutils>=2.0.0rc2 + - importlib-metadata ; python_full_version < '3.9' + - pydantic>=2 + - typing-extensions ; python_full_version < '3.11' + - backports-strenum ; python_full_version < '3.11' + - jsonschema + - papermill ; extra == 'notebooks' + - ewokscore[notebooks] ; extra == 'test' + - pytest>=7 ; extra == 'test' + - matplotlib>=3 ; extra == 'test' + - ipykernel ; extra == 'test' + - ewokscore[test] ; extra == 'dev' + - ruff>=0.16.0 ; extra == 'dev' + - ewokscore[test] ; extra == 'doc' + - sphinx>=4.5 ; extra == 'doc' + - sphinxcontrib-mermaid>=0.7 ; extra == 'doc' + - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - docutils<0.21 ; extra == 'doc' + - nbsphinx-link ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/0d/9e/62a7ad88c863c740705c47723839762e3dae8498f58e37233c5307f2454c/silx-3.1.2-cp314-cp314-macosx_10_15_x86_64.whl name: silx - version: 3.0.1 - sha256: d37594509baee2407ef196ddb7e66df531d49902566a520ad07c88285509e78f + version: 3.1.2 + sha256: f9e35b81e9830ea6524a3281d38a55d4c577757936ad656a24dd549b40eaf366 requires_dist: - numpy - packaging - h5py>=3 - fabio - pydantic>=2 + - filelock - pyopencl ; extra == 'opencl' - mako ; extra == 'opencl' - silx[opencl] ; extra == 'full-no-qt' @@ -1570,6 +1817,7 @@ packages: - pandoc ; extra == 'doc' - silx[full,h5pyd] ; extra == 'test' - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' - pytest ; extra == 'test' - pytest-xvfb ; extra == 'test' - pytest-cov ; extra == 'test' @@ -1580,55 +1828,97 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' + - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/12/da/dbe4dfc01ac226fb0504fad035f4d69f3202f3502e20e68537631daddd96/lxml-6.1.1-cp310-cp310-macosx_10_9_universal2.whl - name: lxml - version: 6.1.1 - sha256: 09dd5b7075dc2f7709654a46543ba1ea3c2e217b2ed8fbd413a8a945a0f40f60 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl - name: lxml - version: 6.1.1 - sha256: 19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/15/14/2ba1d61452d7c2a7fe12741e8d374e52b183476b07aa7f9e2a0d02b0720a/mypy-2.3.0-cp314-cp314-macosx_11_0_arm64.whl - name: mypy - version: 2.3.0 - sha256: 094af99f92638aa92852326188b85a89e50f4a472f44827c03362228482f0762 - requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl name: rpds-py version: 0.30.0 sha256: 4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.16.8 + sha256: 15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1c/1b/f55794f02fb4dc8a26aeb2b9ea56a4966f17c1963fd5e7ffbbe70b620fd9/silx-3.1.2-cp314-cp314-macosx_11_0_arm64.whl + name: silx + version: 3.1.2 + sha256: a1b1aaadb6b40429110adf0d7aae152578f8c0ed6484415625c085cc3134ce52 + requires_dist: + - numpy + - packaging + - h5py>=3 + - fabio + - pydantic>=2 + - filelock + - pyopencl ; extra == 'opencl' + - mako ; extra == 'opencl' + - silx[opencl] ; extra == 'full-no-qt' + - qtconsole ; extra == 'full-no-qt' + - matplotlib>=3.6 ; extra == 'full-no-qt' + - pyopengl ; extra == 'full-no-qt' + - python-dateutil ; extra == 'full-no-qt' + - scipy ; extra == 'full-no-qt' + - pooch ; extra == 'full-no-qt' + - pillow ; extra == 'full-no-qt' + - pint ; extra == 'full-no-qt' + - hdf5plugin ; extra == 'full-no-qt' + - qtawesome ; extra == 'full-no-qt' + - silx[full-no-qt] ; extra == 'full' + - pyside6>=6.5 ; extra == 'full' + - h5pyd>=0.20.0 ; extra == 'h5pyd' + - silx[full] ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - pandoc ; extra == 'doc' + - silx[full,h5pyd] ; extra == 'test' + - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-xvfb ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - silx[doc,full,test] ; extra == 'dev' + - build ; extra == 'dev' + - wheel ; extra == 'dev' + - meson-python ; extra == 'dev' + - ninja ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' + - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' + - ruff ; extra == 'dev' + - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl + name: ruff + version: 0.16.8 + sha256: a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl + name: hdf5plugin + version: 7.1.0 + sha256: 8e9e2011f5394d0516b67756b79a7a4eda389e9e628badbbad191bd211b3a4e3 + requires_dist: + - h5py>=3.0.0 + - ipython ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' + - blosc2>=2.5.1 ; extra == 'test' + - blosc2-grok>=0.2.2 ; extra == 'test' + - hdf5plugin[doc,test] ; extra == 'dev' + - mypy ; extra == 'dev' + - ruff ; extra == 'dev' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl name: numpy version: 2.2.6 @@ -1639,10 +1929,10 @@ packages: version: 6.0.3 sha256: 4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl - name: ruff - version: 0.16.0 - sha256: 3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522 +- pypi: https://files.pythonhosted.org/packages/23/bf/b419c3205ce1143ba7c69baef4f0ba43c14d8712113bf34f9e0d27d609be/ast_serialize-0.11.2-cp39-abi3-win_amd64.whl + name: ast-serialize + version: 0.11.2 + sha256: b9065dd23131a23b41f5bab3bf4e9b3c350a3fe8e36e8200eded9b729fcea484 requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl name: pytest @@ -1695,35 +1985,40 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/26/56/3f788afb8d7fc451d20a66a64ea58bbe189f6f11780b28ba09148974fb33/hdf5plugin-7.1.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: hdf5plugin + version: 7.1.0 + sha256: 9d4cf36434819fae53e4da432f0287ebaeb02386ab97b73d261092efbab12247 + requires_dist: + - h5py>=3.0.0 + - ipython ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' + - blosc2>=2.5.1 ; extra == 'test' + - blosc2-grok>=0.2.2 ; extra == 'test' + - hdf5plugin[doc,test] ; extra == 'dev' + - mypy ; extra == 'dev' + - ruff ; extra == 'dev' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl name: pyyaml version: 6.0.3 sha256: bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - name: referencing - version: 0.37.0 - sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 - requires_dist: - - attrs>=22.2.0 - - rpds-py>=0.7.0 - - typing-extensions>=4.4.0 ; python_full_version < '3.13' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/30/14/4d0204867623df3f33f86efd3d3692ba5e01321443f4d6eab35a22697618/librt-0.13.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: librt - version: 0.13.0 - sha256: 22034924f5b42d5a56371cf271771bfeaabf235a7a8b6264bef2d20013f786c6 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/32/d1/c9f42e6cf899957ef6e95c18143a1d00bdbe30969cf33aaddbd0b385e135/silx-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2c/1d/28fc740abdad57e052600a508def01d21be767200d23ba489cfcb95c668a/silx-3.1.2-cp314-cp314-win_amd64.whl name: silx - version: 3.0.1 - sha256: e2bc28735fc00da84dc992d6a6c9913e37b8ff4225b92f483997280f286a909e + version: 3.1.2 + sha256: 13c7cba31545cf611b41f5a9c4dfd5e3b2f47aad9edd40310ba05bfea7661b7d requires_dist: - numpy - packaging - h5py>=3 - fabio - pydantic>=2 + - filelock - pyopencl ; extra == 'opencl' - mako ; extra == 'opencl' - silx[opencl] ; extra == 'full-no-qt' @@ -1750,6 +2045,7 @@ packages: - pandoc ; extra == 'doc' - silx[full,h5pyd] ; extra == 'test' - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' - pytest ; extra == 'test' - pytest-xvfb ; extra == 'test' - pytest-cov ; extra == 'test' @@ -1760,16 +2056,24 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' + - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + name: referencing + version: 0.37.0 + sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/32/cd/4f564b8f132de25db594efc706897069f016790cea63a5669c9df2675f64/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: charset-normalizer - version: 3.4.9 - sha256: 8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee + version: 3.5.1 + sha256: 96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/37/93/a5795be591f057c8e6c955add526ebb872e03150e1b50a90832e1e7c01af/fabio-2025.10.0-cp310-cp310-win_amd64.whl name: fabio @@ -1796,6 +2100,23 @@ packages: - pytest ; extra == 'test' - pytest-cov ; extra == 'test' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/38/e9/d4cfe8b88e7617d734ad481e4ddca09d32eb7272cc751f65bd9435379186/pydantic_core-2.49.0-cp314-cp314-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.49.0 + sha256: 7cab96cc03d0bdb31b4d1130f65004f496558b267073df3fe65d4981276819a3 + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/39/78/f8643e5afbd6c7e8830a660231bbb711125c1c6849e774e4aa917ce43f37/lxml-7.0.0b1-cp310-cp310-macosx_10_9_x86_64.whl + name: lxml + version: 7.0.0b1 + sha256: 4d87a7a332111f0dcf0f511b12bac4db62b2f4267a84cfd21d7bb8cc28e0cfb1 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl name: h5py version: 3.16.0 @@ -1803,11 +2124,6 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3d/50/51c76d74014d04fb95b6506d286808984b78a2f7a41039094e6b2194ac48/librt-0.13.0-cp314-cp314-macosx_11_0_arm64.whl - name: librt - version: 0.13.0 - sha256: f26629539d4893c2957a16c41bb058e1e135c1f150f6a2e25ed047f64cf3f5c6 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl name: h5py version: 3.16.0 @@ -1815,6 +2131,23 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3e/87/2d08d302f9f445c79bb0c06e8eb0ca26e5b69539aacfa530dd33f7c7146f/pydantic_core-2.49.0-cp310-cp310-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.49.0 + sha256: ad272f556b10a7eb68b6240ea5777f59d89d59b780987459225ab8650681b373 + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3e/f4/38bf6ec867995074b6b4efd2c87cc34540510984a1d5154cdca9cddaba3a/lxml-7.0.0b1-cp310-cp310-win_amd64.whl + name: lxml + version: 7.0.0b1 + sha256: 66b8f25874e9cd68a3ce3a678fdbfdd0415ac8a185670923ddd8469b7b0f07b6 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl name: jsonschema-specifications version: 2025.9.1 @@ -1822,36 +2155,60 @@ packages: requires_dist: - referencing>=0.31.0 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy - version: 2.5.1 - sha256: 54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21 + version: 2.5.3 + sha256: b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/42/3d/ef4dcfffd22d27a61805d8ed9f7fb888495bc6aa88648fa07c1eaa5586b6/lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: lxml - version: 6.1.1 - sha256: 9395002973c827b3ed67db77e6ec09f092919a587022174554096a269378fb13 +- pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl + name: h5py + version: 3.16.0 + sha256: 9c9d307c0ef862d1cd5714f72ecfafe0a5d7529c44845afa8de9f46e5ba8bd65 requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl - name: ruff - version: 0.16.0 - sha256: e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/46/78/2d3b77ea511ad3732fbcd8d968c4cb2bdc269d9ef259745b4d466e4e724f/silx-3.0.1-cp310-cp310-win_amd64.whl + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl + name: pillow + version: 12.3.0 + sha256: 300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/48/88/f6b7bf70cff75c5a9c856ca5dfde0f46290f85760ceb079f5d5362b50f41/silx-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl name: silx - version: 3.0.1 - sha256: 51404936f04ea8e9fc19c074106d194458c2ca3f0c215c00092d34c5ee725167 + version: 3.1.2 + sha256: b003efbf0f68fc61fc3ccac31c2b44f7045f89f49bec052fbdc0440d4f1e6b40 requires_dist: - numpy - packaging - h5py>=3 - fabio - pydantic>=2 + - filelock - pyopencl ; extra == 'opencl' - mako ; extra == 'opencl' - silx[opencl] ; extra == 'full-no-qt' @@ -1878,6 +2235,7 @@ packages: - pandoc ; extra == 'doc' - silx[full,h5pyd] ; extra == 'test' - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' - pytest ; extra == 'test' - pytest-xvfb ; extra == 'test' - pytest-cov ; extra == 'test' @@ -1888,65 +2246,37 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' + - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/47/ae/6710c14ecb276031cf10249f6adf5a59e2d3fdb3b5183bd59f70524067ee/ast_serialize-0.6.0-cp39-abi3-win_amd64.whl - name: ast-serialize - version: 0.6.0 - sha256: 113b58346f9ceb664352032770caca817d4a3c86f611c6088e6ef65ddaa70f0e - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl - name: h5py - version: 3.16.0 - sha256: 9c9d307c0ef862d1cd5714f72ecfafe0a5d7529c44845afa8de9f46e5ba8bd65 - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl - name: pillow - version: 12.3.0 - sha256: 300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb +- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + name: typing-extensions + version: 4.16.0 + sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/49/e1/6c54b834bfd96f14221631d6161c41c68fe34bcb204e299339fd70b9c60a/lxml-7.0.0b1-cp310-cp310-macosx_10_9_universal2.whl + name: lxml + version: 7.0.0b1 + sha256: 053858ca4c51d1604d105eb9cd25ee2d00b8aee5ee9cde00768e806036463119 requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/49/49/f0dd91ff7d95dd4be65c754fd926cf914bb201eb0ba63c4055755fddeb97/silx-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4c/34/9bd9745a46eb95255a02998207213306c03d3babf0e58d87b74d40f4bb04/silx-3.1.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: silx - version: 3.0.1 - sha256: fddc7e0a0f6fc9cc68758542f5ca579c53d888abaa8ebdb019df41e0b836caf1 + version: 3.1.2 + sha256: b8b3b57906f1e7bb4307ca3510adc45e485949d13af3fc5f38254fda847df976 requires_dist: - numpy - packaging - h5py>=3 - fabio - pydantic>=2 + - filelock - pyopencl ; extra == 'opencl' - mako ; extra == 'opencl' - silx[opencl] ; extra == 'full-no-qt' @@ -1973,6 +2303,7 @@ packages: - pandoc ; extra == 'doc' - silx[full,h5pyd] ; extra == 'test' - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' - pytest ; extra == 'test' - pytest-xvfb ; extra == 'test' - pytest-cov ; extra == 'test' @@ -1983,41 +2314,11 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' + - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - name: typing-extensions - version: 4.16.0 - sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl - name: charset-normalizer - version: 3.4.9 - sha256: 16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/4e/14/32cf2aae083c74b95678875e11d25d0cb9e51a33d27f4218eb9aeacfcd70/hdf5plugin-7.0.0-py3-none-win_amd64.whl - name: hdf5plugin - version: 7.0.0 - sha256: 2e052af8d7848e8bac92646584617503a08bb9b466cfa810a49ecd93e89b7ffa - requires_dist: - - h5py>=3.0.0 - - ipython ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - packaging ; extra == 'test' - - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' - - blosc2>=2.5.1 ; extra == 'test' - - blosc2-grok>=0.2.2 ; extra == 'test' - - hdf5plugin[doc,test] ; extra == 'dev' - - mypy ; extra == 'dev' - - ruff ; extra == 'dev' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.3.0 @@ -2049,16 +2350,28 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4f/12/b7424f96a1c35311f801ee5c87b7703dfa49d067a3c9cf5513bfaabb78f7/silx-3.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/54/40/4f8513d4ead3c06ae00278a8abb76065da642bdf10095e6872ecd1f7a12e/silx-3.1.2-cp310-cp310-win_amd64.whl name: silx - version: 3.0.1 - sha256: b8a37d377237b7eba93b2993b2cbe6d599685487e31fa8f528662dfa6d3eb191 + version: 3.1.2 + sha256: 072a41782d37feffc999c20fb5cca5184aa600828833aa3f5bb503e54e811d1c requires_dist: - numpy - packaging - h5py>=3 - fabio - pydantic>=2 + - filelock - pyopencl ; extra == 'opencl' - mako ; extra == 'opencl' - silx[opencl] ; extra == 'full-no-qt' @@ -2085,6 +2398,7 @@ packages: - pandoc ; extra == 'doc' - silx[full,h5pyd] ; extra == 'test' - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' - pytest ; extra == 'test' - pytest-xvfb ; extra == 'test' - pytest-cov ; extra == 'test' @@ -2095,35 +2409,16 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' + - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/52/19/ac8348ae8711c9b5ae834634f635780cab62a0f5e6f988882e048b89c2ae/ast_serialize-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl - name: ast-serialize - version: 0.6.0 - sha256: 093cb8bb91b720d8523580498d031791bb1bbaa048599c3d21085d380e11a596 +- pypi: https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl + name: ruff + version: 0.16.8 + sha256: 42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - name: pluggy - version: 1.6.0 - sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 - requires_dist: - - pre-commit ; extra == 'dev' - - tox ; extra == 'dev' - - pytest ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - - coverage ; extra == 'testing' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - name: pydantic-core - version: 2.46.4 - sha256: da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5 - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.3.0 @@ -2155,15 +2450,25 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + name: defusedxml + version: 0.8.0rc2 + sha256: 1c812964311154c3bf4aaf3bc1443b31ee13530b7f255eaaa062c0553c76103d + requires_python: '>=3.6' - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: rpds-py version: 0.30.0 sha256: 0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/63/ce/0cb99efe6086b46cd985dc26672166fae312a239690e75871f7fafbd3fc5/librt-0.13.0-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl name: librt - version: 0.13.0 - sha256: a3dfe4edf10e8ed7e55b026a8bfc2c2a8704218b659cd4bffdf604fab966dc39 + version: 0.15.0 + sha256: 6c0eb900c0e91f4aebe680845242e614f1864edfd44106380d0752ac29522bf8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl + name: packaging + version: '26.3' + sha256: d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/64/a4/369f31daf13c58683698c03f7e05528cd2710994ba7dbed5ea843db4ab20/fabio-2026.6.0-cp314-cp314-macosx_11_0_arm64.whl name: fabio @@ -2190,24 +2495,6 @@ packages: version: 26.1.0 sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/65/4c/c3f8bfd6ed0e5e38b5a244403b27f821d433443df5a15a278417c10a3a3c/mypy-2.3.0-cp314-cp314-win_amd64.whl - name: mypy - version: 2.3.0 - sha256: 4359424140d985192c778c1ce2c114a10c1ca58a381ed79cfa70d37df94b299f - requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl name: h5py version: 3.16.0 @@ -2215,6 +2502,13 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl + name: typing-inspection + version: 0.4.4 + sha256: 65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147 + requires_dist: + - typing-extensions>=4.15.0 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl name: jsonschema version: 4.26.0 @@ -2280,6 +2574,30 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/70/78/cf416f15dc29375a229d9dfebf8db6e313f291580b39fa1a568b6052bb07/numpy-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl + name: numpy + version: 2.5.3 + sha256: 350ba9783ce969cf9f7ce6e6a9a58e1a6e2a19ca025b7ee448c4db727706212a + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + name: pygments + version: 2.21.0 + sha256: 2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl + name: charset-normalizer + version: 3.5.1 + sha256: d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/71/f3/c20ea92e062444088edec728a7b8137ac40cd1b47815e8b4ee2537a7263d/pydantic_core-2.49.0-cp314-cp314-win_amd64.whl + name: pydantic-core + version: 2.49.0 + sha256: 46836736bca8a7ebab55d0ea76cd04e89bae0ea3d6dcfdedcd1bb1b1244a4239 + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl name: h5py version: 3.16.0 @@ -2287,85 +2605,59 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/78/20/f7095ed9fc2c025f9cfe71cc6ec9f1feb05624edc1812423b5f1aecf3d4b/lxml-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl - name: lxml - version: 6.1.1 - sha256: f6ac4ef4d82dff54670227a69c67782ae0b811b5cf6b17954f1e8f7502fc0d1d +- pypi: https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: mypy + version: 2.3.1 + sha256: 8e036f06b41630f4c8a1d48f9ac6aa26acc65f8be089973f5519da643318f03f requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.13.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.6.0,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl name: mypy-extensions version: 1.1.0 sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7a/16/cb391ee4b90186fa16d9ebcbe3ea96c71b8da3b0686386c8dcbcc3c67d44/lxml-6.1.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: lxml - version: 6.1.1 - sha256: 98fc784c2c1440667aeedf8465bdfe10208acf0ead656a2c68627299f546b315 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: pyyaml version: 6.0.3 sha256: 9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl + name: charset-normalizer + version: 3.5.1 + sha256: c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl name: tomli version: 2.4.1 sha256: 0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7b/66/f49ae0d592bd45b6941e9a8bafcb6a87cddcd501ee7874707e767f01b585/librt-0.13.0-cp314-cp314-macosx_10_15_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl name: librt - version: 0.13.0 - sha256: 25218d94b1d2cbc0ba1d8a3f9dc9af578d9646e5ed16443a70cde1dfdcce6d71 + version: 0.15.0 + sha256: 3ff5893a2c23d886aa9ce786de5ac6ddc74aeeaf90743682b74d920e117d2e28 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl - name: charset-normalizer - version: 3.4.9 - sha256: 0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/85/37/e0bea29f84169ef3736284c0c25d6b777bb4aad11180817f94cdab6f19fb/ewokscore-5.1.0rc3-py3-none-any.whl - name: ewokscore - version: 5.1.0rc3 - sha256: 2a5f9a4735eb452527739197fe0a1d572e12b290f169f325e954f49ff94c08dd +- pypi: https://files.pythonhosted.org/packages/83/76/68cf7ca0985fa41231c17f5515df4e16204649d9916c126f08c84dd64802/lxml-7.0.0b1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: lxml + version: 7.0.0b1 + sha256: 74dad5165eff9f727571d75961f73a17112d389738d542c3f15b6473eed34852 requires_dist: - - numpy>=1.15 - - networkx>=2 - - silx>=1 - - pyyaml>=5.1 - - h5py>=2.8 - - packaging - - ewoksutils>=2.0.0rc2 - - importlib-metadata ; python_full_version < '3.9' - - pydantic>=2 - - typing-extensions ; python_full_version < '3.11' - - backports-strenum ; python_full_version < '3.11' - - jsonschema - - papermill ; extra == 'notebooks' - - ewokscore[notebooks] ; extra == 'test' - - pytest>=7 ; extra == 'test' - - matplotlib>=3 ; extra == 'test' - - ipykernel ; extra == 'test' - - ewokscore[test] ; extra == 'dev' - - ruff>=0.16.0 ; extra == 'dev' - - ewokscore[test] ; extra == 'doc' - - sphinx>=4.5 ; extra == 'doc' - - sphinxcontrib-mermaid>=0.7 ; extra == 'doc' - - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - docutils<0.21 ; extra == 'doc' - - nbsphinx-link ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - requires_python: '>=3.8' + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl name: rpds-py version: 2026.6.3 @@ -2407,13 +2699,6 @@ packages: version: 6.0.3 sha256: c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl name: exceptiongroup version: 1.3.1 @@ -2422,13 +2707,24 @@ packages: - typing-extensions>=4.6.0 ; python_full_version < '3.13' - pytest>=6 ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb +- pypi: https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl + name: mypy + version: 2.3.1 + sha256: 6ed5c7e3419083268e5c9258bd1c1ef91af44a9e89374dbcaf37b775716e72eb requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.13.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.6.0,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/8f/44/aa8bc0a660581663fb957d9005851d23736757cae3e58231a8a1030c9f9e/fabio-2026.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: fabio version: 2026.6.0 @@ -2449,73 +2745,16 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ruff - version: 0.16.0 - sha256: 4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/93/cf/5630b5e4be7d2e6bee8efe83865c925221103cf0221303b104ce134b01e2/lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/92/d8/56af48cd6a2963db92f015a89e2c0a9f75f51dbd22d605ff689ce07395dc/lxml-7.0.0b1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl name: lxml - version: 6.1.1 - sha256: c08e5c694306507275f2290073350c4f32e383db15213b2c69e7ff39c1193840 + version: 7.0.0b1 + sha256: 1c5fde74b25c15aeabb7a6102777fb4e598897d5ea2d39c6baf97333192cfbfe requires_dist: - cssselect>=0.7 ; extra == 'cssselect' - html5lib ; extra == 'html5' - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/94/5a/7863a34c277a238d64049e3c9f51e9fc4cc012fec63ac64ac9ab4114701b/silx-3.0.1-cp314-cp314-macosx_10_15_x86_64.whl - name: silx - version: 3.0.1 - sha256: 7cca90357a75cfd8afd66885a18abdf5e9f7376fd0089b9240a7300cf5096853 - requires_dist: - - numpy - - packaging - - h5py>=3 - - fabio - - pydantic>=2 - - pyopencl ; extra == 'opencl' - - mako ; extra == 'opencl' - - silx[opencl] ; extra == 'full-no-qt' - - qtconsole ; extra == 'full-no-qt' - - matplotlib>=3.6 ; extra == 'full-no-qt' - - pyopengl ; extra == 'full-no-qt' - - python-dateutil ; extra == 'full-no-qt' - - scipy ; extra == 'full-no-qt' - - pooch ; extra == 'full-no-qt' - - pillow ; extra == 'full-no-qt' - - pint ; extra == 'full-no-qt' - - hdf5plugin ; extra == 'full-no-qt' - - qtawesome ; extra == 'full-no-qt' - - silx[full-no-qt] ; extra == 'full' - - pyside6>=6.5 ; extra == 'full' - - h5pyd>=0.20.0 ; extra == 'h5pyd' - - silx[full] ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - pandoc ; extra == 'doc' - - silx[full,h5pyd] ; extra == 'test' - - bitshuffle ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xvfb ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-httpserver ; extra == 'test' - - silx[doc,full,test] ; extra == 'dev' - - build ; extra == 'dev' - - wheel ; extra == 'dev' - - meson-python ; extra == 'dev' - - ninja ; extra == 'dev' - - cython ; extra == 'dev' - - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' - - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' - requires_python: '>=3.10' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/94/d4/23cdb18ad1d919ac59d1155698453f66c0a3719b9dc5862f3a3672cb1d08/fabio-2025.10.0-cp310-cp310-macosx_11_0_x86_64.whl name: fabio version: 2025.10.0 @@ -2533,66 +2772,100 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/96/ad/b28f4102e619c262b29bfcd13ccf6799e26f9ff113d2fdce19050ae29448/hdf5plugin-7.0.0-py3-none-macosx_11_0_arm64.whl - name: hdf5plugin - version: 7.0.0 - sha256: 97ea4ff6114223c5e8ccce7e23cc6cd398b58c02f4e988e967aeea914fcb8030 - requires_dist: - - h5py>=3.0.0 - - ipython ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - packaging ; extra == 'test' - - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' - - blosc2>=2.5.1 ; extra == 'test' - - blosc2-grok>=0.2.2 ; extra == 'test' - - hdf5plugin[doc,test] ; extra == 'dev' - - mypy ; extra == 'dev' - - ruff ; extra == 'dev' +- pypi: https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: librt + version: 0.15.0 + sha256: d4c7bacb70930f3d0a56f4ecf1be474a1f0d941b01dd73b756f3c256d42cb879 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + name: pydantic + version: 2.14.0b2 + sha256: 4556c932fb3dbb7e9ac773bee241b2eb7058a2f9ff1d850d45d7d11cb6e54b68 + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.49.0 + - typing-extensions>=4.16.0 + - typing-inspection>=0.4.4 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl name: rpds-py version: 0.30.0 sha256: 1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl + name: mypy + version: 2.3.1 + sha256: 4956f34d145e145562a0a0bf367f642bbc85c04ec2baf47ae015947c3169a85d + requires_dist: + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.13.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.6.0,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl name: annotated-types version: 0.8.0 sha256: f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/99/da/27fbb6465bedc6283b27773402930164b1d1014601d9267dc41ebee25dff/pydantic_core-2.49.0-cp310-cp310-macosx_10_12_x86_64.whl + name: pydantic-core + version: 2.49.0 + sha256: 68c53d957497e4001e4104c5fb64e90239461b128de0d5151bb8bc8053d70b4a + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl name: numpy version: 2.2.6 sha256: b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9a/7e/8f2ab68bddbe58a66fbbaad87beeae3e7d7edddb17263d1fc423936cf34d/ast_serialize-0.11.2-cp39-abi3-macosx_11_0_arm64.whl + name: ast-serialize + version: 0.11.2 + sha256: 1844ed9a487fb3de7325c52ddb33f2918b66b65cd54d3f8d83d23785ffe99fa4 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl name: pyyaml version: 6.0.3 sha256: 8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/9e/97/33691c66a4d7ec1a5a98e7c909a5b83ee45c7f7ba4cf92b1c4cf26e98079/lxml-6.1.1-cp310-cp310-win_amd64.whl - name: lxml - version: 6.1.1 - sha256: 3abf332af33a74288675d936fe861fd4344da0dd6622193fbc4f2bfbb35536b5 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/9e/59/abcc2d8def4fd60eec7d87f92d27c13448ffd9ab14339bcc63a0d7a2fdea/numpy-2.5.3-cp314-cp314-macosx_11_0_arm64.whl + name: numpy + version: 2.5.3 + sha256: 012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl + name: numpy + version: 2.2.6 + sha256: f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl + name: numpy + version: 2.5.3 + sha256: 2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10 + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl name: networkx - version: 3.6.1 - sha256: d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762 + version: 3.7rc0 + sha256: 74c09b973a265f446c223b21e8129637acb67a2deeed7027cdcd31678d1e5ec9 requires_dist: - - asv ; extra == 'benchmarking' + - asv>=0.6.5 ; extra == 'benchmarking' + - py-rattler>=0.21,<0.22 ; extra == 'benchmarking' - virtualenv ; extra == 'benchmarking' - - numpy>=1.25 ; extra == 'default' - - scipy>=1.11.2 ; extra == 'default' - - matplotlib>=3.8 ; extra == 'default' - - pandas>=2.0 ; extra == 'default' + - numpy>=2 ; extra == 'default' + - scipy>=1.13 ; extra == 'default' + - matplotlib>=3.9 ; extra == 'default' + - pandas>=2.3.0 ; extra == 'default' - pre-commit>=4.1 ; extra == 'developer' - mypy>=1.15 ; extra == 'developer' - sphinx>=8.0 ; extra == 'doc' @@ -2611,8 +2884,9 @@ packages: - igraph>=0.11 ; extra == 'example' - scikit-learn>=1.5 ; extra == 'example' - iplotx>=0.9.0 ; extra == 'example' + - hiveplotlib>=0.28 ; extra == 'example' - lxml>=4.6 ; extra == 'extra' - - pygraphviz>=1.14 ; extra == 'extra' + - pygraphviz>=2.0 ; extra == 'extra' - pydot>=3.0.1 ; extra == 'extra' - sympy>=1.10 ; extra == 'extra' - build>=0.10 ; extra == 'release' @@ -2624,150 +2898,55 @@ packages: - pytest-xdist>=3.0 ; extra == 'test' - pytest-mpl ; extra == 'test-extras' - pytest-randomly ; extra == 'test-extras' - requires_python: '>=3.11,!=3.14.1' -- pypi: https://files.pythonhosted.org/packages/a3/07/70085c17a369605f15e301d10ab902115019b1126c7253d964afc230c7d6/reportlab-5.0.0-py3-none-any.whl - name: reportlab - version: 5.0.0 - sha256: 9d5a3affa84919e1111ede580031266a570e93b1ce388219621347965ff1d93c - requires_dist: - - pillow>=9.0.0 - - charset-normalizer - - rl-accel>=0.9.0,<1.1 ; extra == 'accel' - - rlpycairo>=0.2.0,<1 ; extra == 'pycairo' - - freetype-py>=2.3.0,<2.4 ; extra == 'pycairo' - - rlbidi ; extra == 'bidi' - - uharfbuzz ; extra == 'shaping' - requires_python: '>=3.9,<4' -- pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl - name: numpy - version: 2.2.6 - sha256: f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a4/58/fa0ae047da911f540284009b4f44b96fe09d83c076d7c103e9d645f46303/mypy-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl - name: mypy - version: 2.3.0 - sha256: ea317b060ce83e26050f8f9e4d7d6bf44ed7597c8ff9990bccffbb9d1d8522db - requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a8/e0/7c5c2c0c93b80d5f07101ef7cc0ed9f27e860f01c8e68dc2553d00a67442/silx-3.0.1-cp310-cp310-macosx_11_0_arm64.whl - name: silx - version: 3.0.1 - sha256: 959093a596f92b6185c68a96b302b2b877f44ef38b5bee15fa447f5e954c017d + requires_python: '>=3.12,!=3.14.1' +- pypi: https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl + name: librt + version: 0.15.0 + sha256: f5de7feedc56337a088eb15cd9fafa9938367362221d8cc62c642b7f94821993 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl + name: hdf5plugin + version: 7.1.0 + sha256: fb4555696340a0dceb16f48ae5b65479f6a92ca90190ffeafc41905f17f5e325 requires_dist: - - numpy - - packaging - - h5py>=3 - - fabio - - pydantic>=2 - - pyopencl ; extra == 'opencl' - - mako ; extra == 'opencl' - - silx[opencl] ; extra == 'full-no-qt' - - qtconsole ; extra == 'full-no-qt' - - matplotlib>=3.6 ; extra == 'full-no-qt' - - pyopengl ; extra == 'full-no-qt' - - python-dateutil ; extra == 'full-no-qt' - - scipy ; extra == 'full-no-qt' - - pooch ; extra == 'full-no-qt' - - pillow ; extra == 'full-no-qt' - - pint ; extra == 'full-no-qt' - - hdf5plugin ; extra == 'full-no-qt' - - qtawesome ; extra == 'full-no-qt' - - silx[full-no-qt] ; extra == 'full' - - pyside6>=6.5 ; extra == 'full' - - h5pyd>=0.20.0 ; extra == 'h5pyd' - - silx[full] ; extra == 'doc' + - h5py>=3.0.0 + - ipython ; extra == 'doc' + - nbsphinx ; extra == 'doc' - sphinx ; extra == 'doc' - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - pandoc ; extra == 'doc' - - silx[full,h5pyd] ; extra == 'test' - - bitshuffle ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xvfb ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-httpserver ; extra == 'test' - - silx[doc,full,test] ; extra == 'dev' - - build ; extra == 'dev' - - wheel ; extra == 'dev' - - meson-python ; extra == 'dev' - - ninja ; extra == 'dev' - - cython ; extra == 'dev' - - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' - - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl - name: pydantic-core - version: 2.46.4 - sha256: 23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462 - requires_dist: - - typing-extensions>=4.14.1 + - sphinx-rtd-theme ; extra == 'doc' + - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' + - blosc2>=2.5.1 ; extra == 'test' + - blosc2-grok>=0.2.2 ; extra == 'test' + - hdf5plugin[doc,test] ; extra == 'dev' + - mypy ; extra == 'dev' + - ruff ; extra == 'dev' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl - name: charset-normalizer - version: 3.4.9 - sha256: cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ae/77/70d7a10732063beb74ad713682cf871e88f5c5fa39bfc8beff8a524bf9cb/mypy-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: mypy - version: 2.3.0 - sha256: 37fa4de896a84e2dc9200d91e614c22563b43d1a266789d4bbac7b22ebe6192b - requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl - name: ruff - version: 0.16.0 - sha256: 429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472 +- pypi: https://files.pythonhosted.org/packages/b1/54/f67120006fc73a55b6d057d4662d061fbb4eceafce3047c76ca8b382eb11/ast_serialize-0.11.2-cp39-abi3-macosx_10_12_x86_64.whl + name: ast-serialize + version: 0.11.2 + sha256: daadf1c3e0224621607ffe16f1379e4bd372271ed2e1db8a67878f0bab3ef7e4 requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: numpy version: 2.2.6 sha256: fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: 931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/b8/ce/3cf9a827342269f54d405a6202397de63f07c69cbd6ce7d183a3f0cba1e9/lxml-6.1.1-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/b6/12/dc9d37010e7141ce929f1faf0d1cbebed4c0cb3e616fbed3af3f8e4e1391/lxml-7.0.0b1-cp314-cp314-macosx_10_15_universal2.whl name: lxml - version: 6.1.1 - sha256: b2d444f2e66624d68e9c6b211e28a76e22fff5fcabcfff4deac18b529b7d4137 + version: 7.0.0b1 + sha256: b92ee515c1af2bdd151187d2a93e128f4d388227e0a1e3d403b7e5d575095cd5 requires_dist: - cssselect>=0.7 ; extra == 'cssselect' - html5lib ; extra == 'html5' - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl + name: rpds-py + version: 2026.6.3 + sha256: 931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl name: networkx version: 3.4.2 @@ -2803,13 +2982,6 @@ packages: - pytest>=7.2 ; extra == 'test' - pytest-cov>=4.0 ; extra == 'test' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl name: rpds-py version: 2026.6.3 @@ -2820,11 +2992,24 @@ packages: version: 6.0.3 sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl - name: numpy - version: 2.5.1 - sha256: 32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75 - requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl + name: mypy + version: 2.3.1 + sha256: 192abaedf75da1bc0b1cef104927e70ec49c1ef0031cc4825c7ee10a438ed24d + requires_dist: + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.13.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.6.0,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl name: ewoksutils version: 2.0.0rc2 @@ -2858,73 +3043,6 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c1/01/39d6dc9bcd6872f4132366597acd0294496db843243d18ab26ee9e5da044/silx-3.0.1-cp314-cp314-macosx_11_0_arm64.whl - name: silx - version: 3.0.1 - sha256: 25ef892c3e7d130a77429c700723f8f6a7adb1bb8c1eedae9f831f45025da0d1 - requires_dist: - - numpy - - packaging - - h5py>=3 - - fabio - - pydantic>=2 - - pyopencl ; extra == 'opencl' - - mako ; extra == 'opencl' - - silx[opencl] ; extra == 'full-no-qt' - - qtconsole ; extra == 'full-no-qt' - - matplotlib>=3.6 ; extra == 'full-no-qt' - - pyopengl ; extra == 'full-no-qt' - - python-dateutil ; extra == 'full-no-qt' - - scipy ; extra == 'full-no-qt' - - pooch ; extra == 'full-no-qt' - - pillow ; extra == 'full-no-qt' - - pint ; extra == 'full-no-qt' - - hdf5plugin ; extra == 'full-no-qt' - - qtawesome ; extra == 'full-no-qt' - - silx[full-no-qt] ; extra == 'full' - - pyside6>=6.5 ; extra == 'full' - - h5pyd>=0.20.0 ; extra == 'h5pyd' - - silx[full] ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - pandoc ; extra == 'doc' - - silx[full,h5pyd] ; extra == 'test' - - bitshuffle ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xvfb ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-httpserver ; extra == 'test' - - silx[doc,full,test] ; extra == 'dev' - - build ; extra == 'dev' - - wheel ; extra == 'dev' - - meson-python ; extra == 'dev' - - ninja ; extra == 'dev' - - cython ; extra == 'dev' - - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - black[jupyter] ; extra == 'dev' - - flake8 ; extra == 'dev' - - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl - name: numpy - version: 2.5.1 - sha256: 24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl - name: filelock - version: 3.32.2 - sha256: 87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c1/f6/ec7ec652c51db77c2f61d8573338e13e4704303265ccc658cb4031d9f354/ast_serialize-0.6.0-cp39-abi3-macosx_11_0_arm64.whl - name: ast-serialize - version: 0.6.0 - sha256: e61580a69faf47e3689795367ed211f2a10fd741478cc0f36a0f128793360aad - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl name: pillow version: 12.3.0 @@ -2956,11 +3074,6 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ca/87/b4d6c38e0ccd5e85dc54cecdf933a152c60b28fe5d993a6d8a72fa6d5896/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ast-serialize - version: 0.6.0 - sha256: dcbed41e9386059fc0261d602445ede0976c2ecec2939688bcbcb9ed0b6f28b7 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl name: h5py version: 3.16.0 @@ -2983,30 +3096,16 @@ packages: version: 0.4.6 sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/d2/21/83fffb77864408b8bf0fe1ca603926401d6f8775a8e150b39aacc9958f8a/charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl + name: charset-normalizer + version: 3.5.1 + sha256: be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl name: backports-strenum version: 1.3.1 sha256: cdcfe36dc897e2615dc793b7d3097f54d359918fc448754a517e6f23044ccf83 requires_python: '>=3.8.6,<3.11' -- pypi: https://files.pythonhosted.org/packages/d7/0b/855e50e27eab8338c71c3157672c065cd2a2ab38887b3ea4bf128cbd89a1/hdf5plugin-7.0.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: hdf5plugin - version: 7.0.0 - sha256: 4ad4ab0d3367699d132e61b1cc382a0c640a7dba56536e5105508205ebbe8762 - requires_dist: - - h5py>=3.0.0 - - ipython ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - packaging ; extra == 'test' - - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' - - blosc2>=2.5.1 ; extra == 'test' - - blosc2-grok>=0.2.2 ; extra == 'test' - - hdf5plugin[doc,test] ; extra == 'dev' - - mypy ; extra == 'dev' - - ruff ; extra == 'dev' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/d8/1b/3d85ec02e3712058197fdeee9db41ad18e8a3baeb8cfd9bc1be74e8218c0/fabio-2026.6.0-cp314-cp314-win_amd64.whl name: fabio version: 2026.6.0 @@ -3027,35 +3126,63 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl - name: numpy - version: 2.5.1 - sha256: 7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8 - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - name: typing-inspection - version: 0.4.2 - sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 +- pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + name: reportlab + version: 5.0.1 + sha256: 1c36e6bb0e71780c72331eba60da7f602e8d4389a8723825af71342e49d791e8 requires_dist: - - typing-extensions>=4.12.0 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - name: packaging - version: '26.2' - sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4 + - pillow>=9.0.0 + - charset-normalizer + - rl-accel>=0.9.0,<1.1 ; extra == 'accel' + - rlpycairo>=0.2.0,<1 ; extra == 'pycairo' + - freetype-py>=2.3.0,<2.4 ; extra == 'pycairo' + - rlbidi ; extra == 'bidi' + - uharfbuzz ; extra == 'shaping' + requires_python: '>=3.9,<4' +- pypi: https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.5.1 + sha256: 15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e7/50/bb5cde8460d5ac1650fac61d3b58e59546e712e5c5683cf6859a823b0534/lxml-7.0.0b1-cp314-cp314-win_amd64.whl + name: lxml + version: 7.0.0b1 + sha256: 6da412397f8e3d1dad44bedfc4ce0f034574b1db7939572f1c8704b9ffea89cb requires_dist: - - typing-extensions>=4.14.1 + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl name: charset-normalizer - version: 3.4.9 - sha256: 9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8 + version: 3.5.1 + sha256: c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ea/a6/597c0c0e949000c4e107640b015458f2896903e0b42b00aa0f27a97f479b/lxml-7.0.0b1-cp314-cp314-macosx_10_15_x86_64.whl + name: lxml + version: 7.0.0b1 + sha256: 4534471a974cdabfbc5b0ac8d7794b0dd8c543e80b694c749cf453dfc3c9f24d + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/eb/60/89b710602f263db5efcf4d9957e0fe8a2389339596e906190673a379ea56/pydantic_core-2.49.0-cp310-cp310-win_amd64.whl + name: pydantic-core + version: 2.49.0 + sha256: 592827666d336312d5fd3976b42be19501c51db69c420660e283b5d31aeb9733 + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ed/7d/fb75c77d6bddc8a32eddcc0b8385de1202418cd5a5f4f4da69fc66ada8d1/pydantic_core-2.49.0-cp314-cp314-macosx_10_12_x86_64.whl + name: pydantic-core + version: 2.49.0 + sha256: 96a548e9243889fec7622abb7e10d362a33f755ffff5092874f3dc0e8e05cc10 + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl name: h5py version: 3.16.0 @@ -3103,30 +3230,149 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - name: pygments - version: 2.20.0 - sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +- pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl + name: hdf5plugin + version: 7.1.0 + sha256: af2347557359a1f45e703e6465aa033336cc0f10dc8a3b4d5e11c7721cb1faa6 requires_dist: - - colorama>=0.4.6 ; extra == 'windows-terminal' + - h5py>=3.0.0 + - ipython ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - numpy<2 ; python_full_version == '3.9.*' and extra == 'test' + - blosc2>=2.5.1 ; extra == 'test' + - blosc2-grok>=0.2.2 ; extra == 'test' + - hdf5plugin[doc,test] ; extra == 'dev' + - mypy ; extra == 'dev' + - ruff ; extra == 'dev' requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl name: pyyaml version: 6.0.3 sha256: 214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.9 - sha256: c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/f6/6c/0cd8b1a0e0c74d55a6adcca6fbba5bde42ad97d6c4eb1d974c27bc33f790/silx-3.1.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: silx + version: 3.1.2 + sha256: 181b2bce7d87317545acc3db2e12bc16136aba505027936da9c1414a172d894c + requires_dist: + - numpy + - packaging + - h5py>=3 + - fabio + - pydantic>=2 + - filelock + - pyopencl ; extra == 'opencl' + - mako ; extra == 'opencl' + - silx[opencl] ; extra == 'full-no-qt' + - qtconsole ; extra == 'full-no-qt' + - matplotlib>=3.6 ; extra == 'full-no-qt' + - pyopengl ; extra == 'full-no-qt' + - python-dateutil ; extra == 'full-no-qt' + - scipy ; extra == 'full-no-qt' + - pooch ; extra == 'full-no-qt' + - pillow ; extra == 'full-no-qt' + - pint ; extra == 'full-no-qt' + - hdf5plugin ; extra == 'full-no-qt' + - qtawesome ; extra == 'full-no-qt' + - silx[full-no-qt] ; extra == 'full' + - pyside6>=6.5 ; extra == 'full' + - h5pyd>=0.20.0 ; extra == 'h5pyd' + - silx[full] ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - pandoc ; extra == 'doc' + - silx[full,h5pyd] ; extra == 'test' + - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-xvfb ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - silx[doc,full,test] ; extra == 'dev' + - build ; extra == 'dev' + - wheel ; extra == 'dev' + - meson-python ; extra == 'dev' + - ninja ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' + - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' + - ruff ; extra == 'dev' + - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f7/dc/263439af9455b0f6843f31ab5426fb5f6c52d1597fe11409b93897513c08/pydantic_core-2.49.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.46.4 - sha256: 811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac + version: 2.49.0 + sha256: 82f8bd51e8d3baebf622b52469bdc316c6c1c6e48102d33c76611f37f5924582 requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' + - typing-extensions>=4.16.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f9/92/28311d9350451aab67eff29763638a37a64a22ad572f4df3f9654554fb60/pydantic_core-2.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.49.0 + sha256: 2005d526103ea0057f5e51d0b9c469234e890d8d8a76c4ec474696e4cab2449a + requires_dist: + - typing-extensions>=4.16.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f9/a9/f9cf335fe5f0c70a2f7122af6dd4d2c7ac9b380484a8687f98cead4183b4/silx-3.1.2-cp310-cp310-macosx_11_0_arm64.whl + name: silx + version: 3.1.2 + sha256: 314dedf8ab8eb2b1554d765ed8a16da533bd4467bc78a45ff1c05ff5bd65f961 + requires_dist: + - numpy + - packaging + - h5py>=3 + - fabio + - pydantic>=2 + - filelock + - pyopencl ; extra == 'opencl' + - mako ; extra == 'opencl' + - silx[opencl] ; extra == 'full-no-qt' + - qtconsole ; extra == 'full-no-qt' + - matplotlib>=3.6 ; extra == 'full-no-qt' + - pyopengl ; extra == 'full-no-qt' + - python-dateutil ; extra == 'full-no-qt' + - scipy ; extra == 'full-no-qt' + - pooch ; extra == 'full-no-qt' + - pillow ; extra == 'full-no-qt' + - pint ; extra == 'full-no-qt' + - hdf5plugin ; extra == 'full-no-qt' + - qtawesome ; extra == 'full-no-qt' + - silx[full-no-qt] ; extra == 'full' + - pyside6>=6.5 ; extra == 'full' + - h5pyd>=0.20.0 ; extra == 'h5pyd' + - silx[full] ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - pandoc ; extra == 'doc' + - silx[full,h5pyd] ; extra == 'test' + - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-xvfb ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - silx[doc,full,test] ; extra == 'dev' + - build ; extra == 'dev' + - wheel ; extra == 'dev' + - meson-python ; extra == 'dev' + - ninja ; extra == 'dev' + - cython>=3.1,<3.3 ; extra == 'dev' + - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' + - ruff ; extra == 'dev' + - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/fd/15/a70400eeea394dbcf34f926713499c3f7334b2ee0ec3639b794491ffc9c0/fabio-2025.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: fabio version: 2025.10.0 @@ -3144,15 +3390,8 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - name: pydantic - version: 2.13.4 - sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba - requires_dist: - - annotated-types>=0.6.0 - - pydantic-core==2.46.4 - - typing-extensions>=4.14.1 - - typing-inspection>=0.4.2 - - email-validator>=2.0.0 ; extra == 'email' - - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' - requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.16.8 + sha256: 7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170 + requires_python: '>=3.7' diff --git a/pyproject.toml b/pyproject.toml index d52a6ac..f07d7c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] -requires = ["setuptools>=46.4"] -build-backend = "setuptools.build_meta" +requires = ["maturin>=1.11,<2"] +build-backend = "maturin" [project] name = "ewoksdraw" @@ -17,7 +17,7 @@ classifiers = [ requires-python = ">=3.10" dependencies = [ "defusedxml", - "ewokscore==5.1.0rc3", + "ewokscore==5.1.0rc4", "reportlab", "typing-extensions; python_version < '3.11'", "xmltodict", @@ -46,14 +46,21 @@ doc = [ "pydata-sphinx-theme", ] -[tool.setuptools] -package-dir = { "" = "src" } - -[tool.setuptools.package-data] -ewoksdraw = ["**/*.css", "**/*.json"] - -[tool.setuptools.packages.find] -where = ["src"] +[tool.maturin] +manifest-path = "rust/Cargo.toml" +python-source = "src" +module-name = "ewoksdraw._elk_rs" +bindings = "pyo3" +profile = "release" +editable-profile = "dev" +strip = true +locked = true +compatibility = "pypi" +include = [ + { path = "ewoksdraw/**/*.css", format = ["sdist", "wheel"] }, + { path = "ewoksdraw/**/*.json", format = ["sdist", "wheel"] }, + { path = "ewoksdraw/**/*.pyi", format = ["sdist", "wheel"] }, +] [tool.coverage.run] omit = ["*/tests/*"] @@ -83,11 +90,6 @@ known-first-party = ["ewoksdraw"] ignore_missing_imports = true disallow_untyped_defs = true -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - - ######## # pixi # ######## @@ -99,6 +101,9 @@ platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [tool.pixi.pypi-dependencies] ewoksdraw = { path = ".", editable = true } +[tool.pixi.pypi-options] +prerelease-mode = "allow" + [tool.pixi.feature.pylow.dependencies] python = "3.10.*" diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 0000000..bbb9a24 --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,470 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "ewoksdraw-rust" +version = "0.0.0" +dependencies = [ + "org-eclipse-elk-graph-json", + "pyo3", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "org-eclipse-elk-alg-common" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-core", + "org-eclipse-elk-graph", + "rustc-hash", +] + +[[package]] +name = "org-eclipse-elk-alg-disco" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-force" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-layered" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", + "rustc-hash", + "serde_json", +] + +[[package]] +name = "org-eclipse-elk-alg-mrtree" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-radial" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-rectpacking" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-spore" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-alg-vertiflex" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-alg-common", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-core" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "org-eclipse-elk-graph", +] + +[[package]] +name = "org-eclipse-elk-graph" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "parking_lot", + "rustc-hash", +] + +[[package]] +name = "org-eclipse-elk-graph-json" +version = "0.11.0" +source = "git+https://github.com/openedges/elk-rs.git?rev=2191680292b9565592223c22a28b5ef33c3acbad#2191680292b9565592223c22a28b5ef33c3acbad" +dependencies = [ + "json5", + "org-eclipse-elk-alg-disco", + "org-eclipse-elk-alg-force", + "org-eclipse-elk-alg-layered", + "org-eclipse-elk-alg-mrtree", + "org-eclipse-elk-alg-radial", + "org-eclipse-elk-alg-rectpacking", + "org-eclipse-elk-alg-spore", + "org-eclipse-elk-alg-vertiflex", + "org-eclipse-elk-core", + "org-eclipse-elk-graph", + "serde", + "serde_json", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pest" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d45aeb61b4bf818e12d4205f2466f8c4748f85f4fce0146d1c03d69d753f0ad" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89cc5a242e25ed4e7704d0be240f2cfbe20a8c27e7e252d94835be93d92dc39f" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abf21475cc3820fe4b2ca2dc2142902f67a02189f3b5b3a229f4febc01a43e5" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "pest_meta" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adba4db388f687393c18c51348d44a41d870ca9df71a2c98172ea3035dc6936e" +dependencies = [ + "pest", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b" +dependencies = [ + "libc", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", +] + +[[package]] +name = "pyo3-build-config" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9" +dependencies = [ + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "smallvec" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "target-lexicon" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicode-ident" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..049929c --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "ewoksdraw-rust" +version = "0.0.0" +edition = "2021" +license = "MIT" +publish = false + +[lib] +name = "_elk_rs" +crate-type = ["cdylib"] + +[dependencies] +pyo3 = { version = "0.29", features = ["abi3-py310"] } + +[dependencies.org-eclipse-elk-graph-json] +git = "https://github.com/openedges/elk-rs.git" +rev = "2191680292b9565592223c22a28b5ef33c3acbad" +package = "org-eclipse-elk-graph-json" diff --git a/rust/src/lib.rs b/rust/src/lib.rs new file mode 100644 index 0000000..2a8ef79 --- /dev/null +++ b/rust/src/lib.rs @@ -0,0 +1,16 @@ +use org_eclipse_elk_graph_json::org::eclipse::elk::graph::json::layout_api; +use pyo3::exceptions::PyRuntimeError; +use pyo3::prelude::*; + + +#[pyfunction] +#[pyo3(signature = (graph_json, options_json = "{}"))] +fn layout_json(graph_json: &str, options_json: &str) -> PyResult { + layout_api::layout_json(graph_json, options_json).map_err(PyRuntimeError::new_err) +} + +#[pymodule] +fn _elk_rs(module: &Bound<'_, PyModule>) -> PyResult<()> { + module.add_function(wrap_pyfunction!(layout_json, module)?)?; + Ok(()) +} diff --git a/src/ewoksdraw/_elk_rs.pyi b/src/ewoksdraw/_elk_rs.pyi new file mode 100644 index 0000000..d1552f3 --- /dev/null +++ b/src/ewoksdraw/_elk_rs.pyi @@ -0,0 +1 @@ +def layout_json(graph_json: str, options_json: str = "{}") -> str: ... diff --git a/src/ewoksdraw/layout/elk_backend.py b/src/ewoksdraw/layout/elk_backend.py new file mode 100644 index 0000000..3c98a11 --- /dev/null +++ b/src/ewoksdraw/layout/elk_backend.py @@ -0,0 +1,11 @@ +import json +from typing import Any + +from ewoksdraw import _elk_rs + + +def layout( + graph: dict[str, Any], options: dict[str, Any] | None = None +) -> dict[str, Any]: + result = _elk_rs.layout_json(json.dumps(graph), json.dumps(options or {})) + return json.loads(result) diff --git a/src/ewoksdraw/tests/test_elk_backend.py b/src/ewoksdraw/tests/test_elk_backend.py new file mode 100644 index 0000000..9fbc067 --- /dev/null +++ b/src/ewoksdraw/tests/test_elk_backend.py @@ -0,0 +1,29 @@ +from ewoksdraw.layout.elk_backend import layout + + +def test_layout() -> None: + graph = { + "id": "root", + "layoutOptions": { + "org.eclipse.elk.algorithm": "layered", + "org.eclipse.elk.direction": "RIGHT", + "org.eclipse.elk.edgeRouting": "ORTHOGONAL", + }, + "children": [ + {"id": "first", "width": 30, "height": 20}, + {"id": "second", "width": 30, "height": 20}, + ], + "edges": [ + { + "id": "first-to-second", + "sources": ["first"], + "targets": ["second"], + } + ], + } + result = layout(graph) + + assert result["width"] > 0 + assert result["height"] > 0 + assert all("x" in node and "y" in node for node in result["children"]) + assert result["edges"][0]["sections"] From b308f6735351dfda3928c6e7a605b8a69898f54b Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 2 Oct 2026 15:32:12 +0200 Subject: [PATCH 03/12] Issue #34 - Using rust-elk for rounting --- src/ewoksdraw/config/constants.py | 3 +- src/ewoksdraw/graph_to_svg.py | 4 +- src/ewoksdraw/layout/_compute_layout.py | 107 ------ src/ewoksdraw/layout/_layered_graph_model.py | 54 --- src/ewoksdraw/layout/_layout_graph_model.py | 70 ---- src/ewoksdraw/layout/_position_nodes.py | 256 ------------- src/ewoksdraw/layout/_route_links.py | 338 ------------------ src/ewoksdraw/layout/elk_backend.py | 21 +- src/ewoksdraw/layout/elk_converter.py | 46 ++- .../layout/elk_link_group_builder.py | 2 +- src/ewoksdraw/tests/test_elk_backend.py | 8 +- src/ewoksdraw/tests/test_elk_rs_binding.py | 247 +++++++++++++ 12 files changed, 317 insertions(+), 839 deletions(-) delete mode 100644 src/ewoksdraw/layout/_compute_layout.py delete mode 100644 src/ewoksdraw/layout/_layered_graph_model.py delete mode 100644 src/ewoksdraw/layout/_layout_graph_model.py delete mode 100644 src/ewoksdraw/layout/_position_nodes.py delete mode 100644 src/ewoksdraw/layout/_route_links.py create mode 100644 src/ewoksdraw/tests/test_elk_rs_binding.py diff --git a/src/ewoksdraw/config/constants.py b/src/ewoksdraw/config/constants.py index 3c5f9d5..a1238f2 100644 --- a/src/ewoksdraw/config/constants.py +++ b/src/ewoksdraw/config/constants.py @@ -20,6 +20,5 @@ "org.eclipse.elk.spacing.nodeNode": 60, "org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers": 80, "org.eclipse.elk.spacing.edgeEdge": 20, - "org.eclipse.elk.edgeRouting": "SPLINES", - "elk.layered.edgeRouting.splines.mode": "CONSERVATIVE_SOFT", + "org.eclipse.elk.edgeRouting": "ORTHOGONAL", } diff --git a/src/ewoksdraw/graph_to_svg.py b/src/ewoksdraw/graph_to_svg.py index f1a7f2b..8e8781a 100644 --- a/src/ewoksdraw/graph_to_svg.py +++ b/src/ewoksdraw/graph_to_svg.py @@ -2,9 +2,9 @@ from ewokscore.graph import TaskGraph from ewokscore.node.signature import node_signature -from pyelk import ELK from .config.constants import TASK_GROUP_HORIZONTAL_GAP +from .layout.elk_backend import layout from .layout.elk_converter import ElkGraph from .layout.elk_converter import ElkGraphBeforeLayout from .layout.elk_converter import convert_ewoks_to_elk_graph @@ -56,7 +56,7 @@ def graph_to_svg(graph: TaskGraph, output_path: str | Path) -> None: task_group.extract_input_positions(), task_group.extract_output_positions(), ) - elk_graph: ElkGraph = ELK().layout(elk_graph_before_layout) + elk_graph: ElkGraph = layout(elk_graph_before_layout) task_positions = extract_task_positions_from_elk_graph(elk_graph) task_group.set_task_positions(task_positions) diff --git a/src/ewoksdraw/layout/_compute_layout.py b/src/ewoksdraw/layout/_compute_layout.py deleted file mode 100644 index ae3c677..0000000 --- a/src/ewoksdraw/layout/_compute_layout.py +++ /dev/null @@ -1,107 +0,0 @@ -"""Build and run the native layered graph layout.""" - -from ._layered_graph_model import LayeredGraph -from ._layered_graph_model import LayeredLink -from ._layered_graph_model import LayeredNode -from ._layered_graph_model import LayeredPort -from ._layout_graph_model import LayoutGraph -from ._layout_graph_model import LayoutOptions -from ._layout_graph_model import LayoutResult -from ._layout_graph_model import Point -from ._layout_graph_model import PortRef -from ._layout_graph_model import Size -from ._position_nodes import position_nodes -from ._route_links import route_links - - -def compute_layout(graph: LayoutGraph, options: LayoutOptions) -> LayoutResult: - if not graph.nodes: - size = Size(options.padding * 2, options.padding * 2) - return LayoutResult(size=size, node_positions={}, link_routes={}) - - layered_graph = _build_layered_graph(graph) - layers = position_nodes(layered_graph, options) - link_routes = route_links( - layered_graph, - layers, - max(1.0, options.link_spacing), - ) - return _build_result(layered_graph, link_routes, options.padding) - - -def _build_layered_graph(graph: LayoutGraph) -> LayeredGraph: - nodes: list[LayeredNode] = [] - node_by_id: dict[str, LayeredNode] = {} - port_by_ref: dict[PortRef, tuple[LayeredNode, LayeredPort]] = {} - - for node in graph.nodes: - if node.id in node_by_id: - raise ValueError(f"Duplicate node id: {node.id!r}") - - layered_node = LayeredNode( - input_id=node.id, - width=node.size.width, - height=node.size.height, - ) - nodes.append(layered_node) - node_by_id[node.id] = layered_node - - for port in node.ports: - ref = PortRef(node.id, port.id) - if ref in port_by_ref: - raise ValueError(f"Duplicate port id: {port.id!r} on {node.id!r}") - port_by_ref[ref] = ( - layered_node, - LayeredPort(offset=port.offset, side=port.side), - ) - - links: list[LayeredLink] = [] - link_ids: set[str] = set() - for link in graph.links: - if link.id in link_ids: - raise ValueError(f"Duplicate link id: {link.id!r}") - link_ids.add(link.id) - - try: - source, source_port = port_by_ref[link.source] - target, target_port = port_by_ref[link.target] - except KeyError as error: - raise ValueError(f"Unknown port reference: {error.args[0]!r}") from None - - links.append( - LayeredLink( - input_id=link.id, - source=source, - target=target, - source_port=source_port, - target_port=target_port, - ) - ) - - return LayeredGraph(nodes=nodes, links=links) - - -def _build_result( - graph: LayeredGraph, - link_routes: dict[str, tuple[Point, ...]], - padding: float, -) -> LayoutResult: - real_nodes = [node for node in graph.nodes if not node.is_dummy] - node_positions = { - node.input_id: Point(node.x, node.y) - for node in real_nodes - if node.input_id is not None - } - - max_x = max(node.x + node.width for node in real_nodes) - max_y = max(node.y + node.height for node in real_nodes) - for route in link_routes.values(): - for point in route: - max_x = max(max_x, point.x) - max_y = max(max_y, point.y) - - return LayoutResult( - size=Size(max_x + padding, max_y + padding), - node_positions=node_positions, - link_routes=link_routes, - ) diff --git a/src/ewoksdraw/layout/_layered_graph_model.py b/src/ewoksdraw/layout/_layered_graph_model.py deleted file mode 100644 index e1c3bc3..0000000 --- a/src/ewoksdraw/layout/_layered_graph_model.py +++ /dev/null @@ -1,54 +0,0 @@ -"""Mutable working data used by the layered layout algorithm.""" - -from dataclasses import dataclass -from dataclasses import field - -from ._layout_graph_model import Point -from ._layout_graph_model import PortSide - - -@dataclass(frozen=True) -class LayeredPort: - offset: Point - side: PortSide - - -@dataclass(eq=False) -class LayeredNode: - input_id: str | None - width: float - height: float - layer: int = -1 - x: float = 0.0 - y: float = 0.0 - - @property - def is_dummy(self) -> bool: - return self.input_id is None - - -@dataclass(eq=False) -class LayeredLink: - input_id: str - source: LayeredNode - target: LayeredNode - source_port: LayeredPort - target_port: LayeredPort - path: list[LayeredNode] = field(init=False) - - def __post_init__(self) -> None: - self.path = [self.source, self.target] - - @property - def is_self_loop(self) -> bool: - return self.source is self.target - - @property - def is_reversed(self) -> bool: - return not self.is_self_loop and self.path[0] is self.target - - -@dataclass -class LayeredGraph: - nodes: list[LayeredNode] - links: list[LayeredLink] diff --git a/src/ewoksdraw/layout/_layout_graph_model.py b/src/ewoksdraw/layout/_layout_graph_model.py deleted file mode 100644 index 2d21a20..0000000 --- a/src/ewoksdraw/layout/_layout_graph_model.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Input and output data for the native graph layout.""" - -from collections.abc import Mapping -from dataclasses import dataclass -from enum import Enum - - -class PortSide(Enum): - WEST = "WEST" - EAST = "EAST" - - -@dataclass(frozen=True) -class Point: - x: float - y: float - - -@dataclass(frozen=True) -class Size: - width: float - height: float - - -@dataclass(frozen=True) -class LayoutPort: - id: str - offset: Point - side: PortSide - - -@dataclass(frozen=True) -class PortRef: - node_id: str - port_id: str - - -@dataclass(frozen=True) -class LayoutNode: - id: str - size: Size - ports: tuple[LayoutPort, ...] = () - - -@dataclass(frozen=True) -class LayoutLink: - id: str - source: PortRef - target: PortRef - - -@dataclass(frozen=True) -class LayoutGraph: - nodes: tuple[LayoutNode, ...] = () - links: tuple[LayoutLink, ...] = () - - -@dataclass(frozen=True) -class LayoutResult: - size: Size - node_positions: Mapping[str, Point] - link_routes: Mapping[str, tuple[Point, ...]] - - -@dataclass(frozen=True) -class LayoutOptions: - node_spacing: float = 20.0 - layer_spacing: float = 20.0 - link_spacing: float = 10.0 - padding: float = 12.0 diff --git a/src/ewoksdraw/layout/_position_nodes.py b/src/ewoksdraw/layout/_position_nodes.py deleted file mode 100644 index 14759a7..0000000 --- a/src/ewoksdraw/layout/_position_nodes.py +++ /dev/null @@ -1,256 +0,0 @@ -"""Node placement: layer assignment, crossing minimization, coordinates.""" - -from collections import defaultdict - -from ._layered_graph_model import LayeredGraph -from ._layered_graph_model import LayeredLink -from ._layered_graph_model import LayeredNode -from ._layout_graph_model import LayoutOptions - - -def position_nodes( - graph: LayeredGraph, options: LayoutOptions -) -> list[list[LayeredNode]]: - - _break_cycles(graph) - _rank_nodes_by_longest_path(graph) - _insert_dummy_nodes(graph) - - layers = group_by_layer(graph.nodes) - _minimize_crossings(graph, layers) - - dummy_spacing = max(1.0, options.link_spacing) - _place_rank_columns_left_to_right( - layers, - options.node_spacing, - options.layer_spacing, - dummy_spacing, - options.padding, - ) - return layers - - -def _break_cycles(graph: LayeredGraph) -> None: - nodes, links = graph.nodes, graph.links - white, gray, black = 0, 1, 2 - color = {node: white for node in nodes} - adjacency: dict[LayeredNode, list[LayeredLink]] = defaultdict(list) - for link in links: - if not link.is_self_loop: - adjacency[link.source].append(link) - - reversed_links: list[LayeredLink] = [] - - def visit(node: LayeredNode) -> None: - color[node] = gray - for link in adjacency[node]: - if color[link.target] == gray: - reversed_links.append(link) - elif color[link.target] == white: - visit(link.target) - color[node] = black - - for node in nodes: - if color[node] == white: - visit(node) - - for link in reversed_links: - link.path.reverse() - - -def _rank_nodes_by_longest_path(graph: LayeredGraph) -> None: - """Assign each node the longest distance from a graph source.""" - incoming, outgoing = _node_neighbors(graph) - nodes = graph.nodes - in_degree = {node: len(incoming[node]) for node in nodes} - - queue = [node for node in nodes if in_degree[node] == 0] - order: list[LayeredNode] = [] - while queue: - node = queue.pop(0) - order.append(node) - for target in outgoing[node]: - in_degree[target] -= 1 - if in_degree[target] == 0: - queue.append(target) - - remaining = set(nodes) - set(order) - order.extend(node for node in nodes if node in remaining) - - layer_of: dict[LayeredNode, int] = {} - for node in order: - max_source_layer = max( - (layer_of[source] for source in incoming[node] if source in layer_of), - default=-1, - ) - layer_of[node] = max_source_layer + 1 - - for node in nodes: - node.layer = layer_of[node] - - -def _insert_dummy_nodes(graph: LayeredGraph) -> None: - for link in graph.links: - if link.is_self_loop: - continue - source, target = link.path - span = target.layer - source.layer - dummy_nodes = [] - for offset in range(1, span): - dummy = LayeredNode( - input_id=None, - width=0.0, - height=0.0, - layer=source.layer + offset, - ) - graph.nodes.append(dummy) - dummy_nodes.append(dummy) - link.path[1:1] = dummy_nodes - - -def _node_neighbors( - graph: LayeredGraph, -) -> tuple[ - dict[LayeredNode, list[LayeredNode]], - dict[LayeredNode, list[LayeredNode]], -]: - incoming: dict[LayeredNode, list[LayeredNode]] = {node: [] for node in graph.nodes} - outgoing: dict[LayeredNode, list[LayeredNode]] = {node: [] for node in graph.nodes} - for link in graph.links: - if link.is_self_loop: - continue - for source, target in zip(link.path, link.path[1:]): - outgoing[source].append(target) - incoming[target].append(source) - return incoming, outgoing - - -def group_by_layer(nodes: list[LayeredNode]) -> list[list[LayeredNode]]: - max_layer = max(node.layer for node in nodes) - layers: list[list[LayeredNode]] = [[] for _ in range(max_layer + 1)] - for node in nodes: - layers[node.layer].append(node) - return layers - - -def _minimize_crossings(graph: LayeredGraph, layers: list[list[LayeredNode]]) -> None: - """Reorder nodes within each layer using the barycenter heuristic.""" - incoming, outgoing = _node_neighbors(graph) - for index in range(1, len(layers)): - _sort_layer_by_barycenter(layers[index], layers[index - 1], incoming) - for index in range(len(layers) - 2, -1, -1): - _sort_layer_by_barycenter(layers[index], layers[index + 1], outgoing) - - -def _sort_layer_by_barycenter( - layer: list[LayeredNode], - reference: list[LayeredNode], - neighbors: dict[LayeredNode, list[LayeredNode]], -) -> None: - reference_position = {node: index for index, node in enumerate(reference)} - - barycenters: dict[LayeredNode, float] = {} - for node in layer: - positions = [ - reference_position[neighbor] - for neighbor in neighbors[node] - if neighbor in reference_position - ] - if positions: - barycenters[node] = sum(positions) / len(positions) - else: - barycenters[node] = float("inf") - - layer.sort(key=lambda node: barycenters[node]) - - -def _place_rank_columns_left_to_right( - layers: list[list[LayeredNode]], - node_spacing: float, - layer_spacing: float, - dummy_spacing: float, - padding: float, -) -> None: - layer_heights = [ - _layer_extent(layer, node_spacing, dummy_spacing) for layer in layers - ] - max_height = max(layer_heights) - - x = padding - for layer, height in zip(layers, layer_heights): - y = padding + (max_height - height) / 2 - _place_layer(layer, x, y, node_spacing, dummy_spacing) - x += max(node.width for node in layer) + layer_spacing - - -def _layer_extent( - layer: list[LayeredNode], node_spacing: float, dummy_spacing: float -) -> float: - real_nodes = [node for node in layer if not node.is_dummy] - if not real_nodes: - return dummy_spacing * max(len(layer) - 1, 0) - - extent = 0.0 - pending_dummies = 0 - seen_real = False - for node in layer: - if node.is_dummy: - pending_dummies += 1 - continue - if seen_real: - extent += max(node_spacing, (pending_dummies + 1) * dummy_spacing) - else: - extent += pending_dummies * dummy_spacing - extent += node.height - pending_dummies = 0 - seen_real = True - - return extent + pending_dummies * dummy_spacing - - -def _place_layer( - layer: list[LayeredNode], - x: float, - y: float, - node_spacing: float, - dummy_spacing: float, -) -> None: - real_nodes = [node for node in layer if not node.is_dummy] - if not real_nodes: - for index, node in enumerate(layer): - node.x, node.y = x, y + index * dummy_spacing - return - - pending_dummies: list[LayeredNode] = [] - previous_real: LayeredNode | None = None - current_y = y - - for node in layer: - if node.is_dummy: - pending_dummies.append(node) - continue - - if previous_real is None: - _place_dummy_run(pending_dummies, x, current_y, dummy_spacing) - current_y += len(pending_dummies) * dummy_spacing - else: - gap = max(node_spacing, (len(pending_dummies) + 1) * dummy_spacing) - gap_start = previous_real.y + previous_real.height - slot = gap / (len(pending_dummies) + 1) - _place_dummy_run(pending_dummies, x, gap_start + slot, slot) - current_y = gap_start + gap - - node.x, node.y = x, current_y - current_y += node.height - previous_real = node - pending_dummies = [] - - if pending_dummies: - _place_dummy_run(pending_dummies, x, current_y + dummy_spacing, dummy_spacing) - - -def _place_dummy_run( - dummies: list[LayeredNode], x: float, first_y: float, spacing: float -) -> None: - for index, dummy in enumerate(dummies): - dummy.x, dummy.y = x, first_y + index * spacing diff --git a/src/ewoksdraw/layout/_route_links.py b/src/ewoksdraw/layout/_route_links.py deleted file mode 100644 index ecadce2..0000000 --- a/src/ewoksdraw/layout/_route_links.py +++ /dev/null @@ -1,338 +0,0 @@ -"""Link routing for the layered algorithm — kept in its own file.""" - -from collections import defaultdict - -from ._layered_graph_model import LayeredGraph -from ._layered_graph_model import LayeredLink -from ._layered_graph_model import LayeredNode -from ._layered_graph_model import LayeredPort -from ._layout_graph_model import Point -from ._layout_graph_model import PortSide - -_STUB_LENGTH = 10.0 - - -def route_links( - graph: LayeredGraph, - layers: list[list[LayeredNode]], - dummy_spacing: float, -) -> dict[str, tuple[Point, ...]]: - links = graph.links - lane_offsets = _compute_route_lane_offsets(links, layers, dummy_spacing) - routes = {} - - for link in links: - if link.is_self_loop: - routes[link.input_id] = tuple(_self_loop_points(link.source)) - continue - - source, source_port, target, target_port = _logical_endpoints(link) - start = _port_position(source, source_port) - end = _port_position(target, target_port) - - # A link reversed by cycle breaking runs against the flow - # direction; route it outside the normal layer channels instead. - if end[0] < start[0]: - bend_points = _route_loopback_link( - start, end, source_port, target_port, layers - ) - else: - bend_points = _route_orthogonal_link( - link, start, end, source, target, layers, lane_offsets - ) - - routes[link.input_id] = tuple( - Point(x, y) for x, y in [start, *bend_points, end] - ) - - return routes - - -def _self_loop_points(node: LayeredNode) -> list[Point]: - x, y = node.x + node.width, node.y - stub = _STUB_LENGTH * 2 - return [ - Point(x, y), - Point(x + stub, y), - Point(x + stub, y + node.height), - Point(x, y + node.height), - ] - - -def _logical_endpoints( - link: LayeredLink, -) -> tuple[LayeredNode, LayeredPort, LayeredNode, LayeredPort]: - return link.source, link.source_port, link.target, link.target_port - - -def _port_position(node: LayeredNode, port: LayeredPort) -> tuple[float, float]: - return node.x + port.offset.x, node.y + port.offset.y - - -def _stub_direction(side: PortSide) -> float: - return 1.0 if side is PortSide.EAST else -1.0 - - -def _compute_route_lane_offsets( - links: list[LayeredLink], - layers: list[list[LayeredNode]], - dummy_spacing: float, -) -> dict[tuple[LayeredLink, tuple[int, int]], float]: - """Spread parallel links crossing the same layer gap into lanes.""" - segments_by_gap: dict[tuple[int, int], list[LayeredLink]] = defaultdict(list) - for link in links: - if link.is_self_loop: - continue - source, _, target, _ = _logical_endpoints(link) - layer_sequence = [ - source.layer, - *(dummy.layer for dummy in _ordered_dummy_nodes(link)), - target.layer, - ] - for first, second in zip(layer_sequence, layer_sequence[1:]): - if first != second: - gap = (min(first, second), max(first, second)) - segments_by_gap[gap].append(link) - - offsets: dict[tuple[LayeredLink, tuple[int, int]], float] = {} - for gap, gap_links in segments_by_gap.items(): - gap_links = _sort_links_for_gap(gap_links) - count = len(gap_links) - if count <= 1: - offsets[(gap_links[0], gap)] = 0.0 - continue - - max_offset = _max_lane_offset(layers, gap) - if max_offset <= 0: - spacing = 0.0 - else: - spacing = min(dummy_spacing, (max_offset * 2) / (count - 1)) - for index, link in enumerate(gap_links): - offsets[(link, gap)] = (index - (count - 1) / 2) * spacing - - return offsets - - -def _sort_links_for_gap(links: list[LayeredLink]) -> list[LayeredLink]: - def cross_axis_midpoint(link: LayeredLink) -> float: - source, source_port, target, target_port = _logical_endpoints(link) - start = _port_position(source, source_port) - end = _port_position(target, target_port) - return (start[1] + end[1]) / 2 - - return sorted(links, key=cross_axis_midpoint) - - -def _max_lane_offset(layers: list[list[LayeredNode]], gap: tuple[int, int]) -> float: - first_layer, second_layer = gap - if first_layer < 0 or second_layer >= len(layers): - return 0.0 - first_nodes, second_nodes = layers[first_layer], layers[second_layer] - if not first_nodes or not second_nodes: - return 0.0 - - first_end = max(node.x + node.width for node in first_nodes) - second_start = min(node.x for node in second_nodes) - return max(0.0, (second_start - first_end) / 2 - _STUB_LENGTH) - - -def _ordered_dummy_nodes(link: LayeredLink) -> list[LayeredNode]: - path = link.path if not link.is_reversed else reversed(link.path) - return list(path)[1:-1] - - -def _route_orthogonal_link( - link: LayeredLink, - start: tuple[float, float], - end: tuple[float, float], - source: LayeredNode, - target: LayeredNode, - layers: list[list[LayeredNode]], - lane_offsets: dict[tuple[LayeredLink, tuple[int, int]], float], -) -> list[tuple[float, float]]: - _, source_port, _, target_port = _logical_endpoints(link) - start_out = (start[0] + _stub_direction(source_port.side) * _STUB_LENGTH, start[1]) - end_out = (end[0] + _stub_direction(target_port.side) * _STUB_LENGTH, end[1]) - - if len(link.path) > 2: - return _route_long_link( - link, start, end, start_out, end_out, source, target, layers, lane_offsets - ) - - bend_points = [start_out] - channel = _layer_channel_between(layers, source.layer, target.layer) - gap = (min(source.layer, target.layer), max(source.layer, target.layer)) - channel += lane_offsets.get((link, gap), 0.0) - bend_points.append((channel, start_out[1])) - bend_points.append((channel, end_out[1])) - - bend_points.append(end_out) - return _clean_bend_points(bend_points, start, end) - - -def _route_long_link( - link: LayeredLink, - start: tuple[float, float], - end: tuple[float, float], - start_out: tuple[float, float], - end_out: tuple[float, float], - source: LayeredNode, - target: LayeredNode, - layers: list[list[LayeredNode]], - lane_offsets: dict[tuple[LayeredLink, tuple[int, int]], float], -) -> list[tuple[float, float]]: - """Route a multi-layer link without following dummy-node y slots.""" - layer_sequence = [ - source.layer, - *(dummy.layer for dummy in _ordered_dummy_nodes(link)), - target.layer, - ] - - channels = [] - for first, second in zip(layer_sequence, layer_sequence[1:]): - channel = _layer_channel_between(layers, first, second) - gap = (min(first, second), max(first, second)) - channels.append(channel + lane_offsets.get((link, gap), 0.0)) - - track_y = _long_link_track_y( - start_out[1], end_out[1], layers, source.layer, target.layer - ) - - bend_points = [start_out, (channels[0], start_out[1]), (channels[0], track_y)] - bend_points.extend((channel, track_y) for channel in channels[1:]) - bend_points.append((channels[-1], end_out[1])) - bend_points.append(end_out) - return _clean_bend_points(bend_points, start, end) - - -def _long_link_track_y( - start_y: float, - end_y: float, - layers: list[list[LayeredNode]], - source_layer: int, - target_layer: int, -) -> float: - """Choose a compact y-track that avoids real nodes in spanned layers.""" - lower = min(source_layer, target_layer) + 1 - upper = max(source_layer, target_layer) - obstacles = [ - node for layer in layers[lower:upper] for node in layer if not node.is_dummy - ] - if not obstacles: - return end_y - - for candidate in (end_y, start_y, (start_y + end_y) / 2): - if _track_y_is_clear(candidate, obstacles): - return candidate - - intervals = sorted((node.y, node.y + node.height) for node in obstacles) - merged: list[list[float]] = [] - for low, high in intervals: - if not merged or low > merged[-1][1]: - merged.append([low, high]) - else: - merged[-1][1] = max(merged[-1][1], high) - - candidates = [] - for index, (low, high) in enumerate(merged): - if low - _STUB_LENGTH >= 0: - candidates.append(low - _STUB_LENGTH) - candidates.append(high + _STUB_LENGTH) - if index + 1 < len(merged): - next_low = merged[index + 1][0] - if next_low - high > _STUB_LENGTH * 2: - candidates.append((high + next_low) / 2) - - clear = [c for c in candidates if c >= 0 and _track_y_is_clear(c, obstacles)] - if not clear: - return max(node.y + node.height for node in obstacles) + _STUB_LENGTH - - return min(clear, key=lambda c: (abs(c - end_y), abs(c - start_y))) - - -def _track_y_is_clear(y: float, obstacles: list[LayeredNode]) -> bool: - eps = 1e-9 - return all( - not (node.y + eps < y < node.y + node.height - eps) for node in obstacles - ) - - -def _layer_channel_between( - layers: list[list[LayeredNode]], first_layer: int, second_layer: int -) -> float: - left, right = min(first_layer, second_layer), max(first_layer, second_layer) - lower, upper = layers[left], layers[right] - lower_end = max(node.x + node.width for node in lower) - upper_start = min(node.x for node in upper) - return (lower_end + upper_start) / 2 - - -def _route_loopback_link( - start: tuple[float, float], - end: tuple[float, float], - source_port: LayeredPort, - target_port: LayeredPort, - layers: list[list[LayeredNode]], -) -> list[tuple[float, float]]: - start_out = (start[0] + _stub_direction(source_port.side) * _STUB_LENGTH, start[1]) - end_out = (end[0] + _stub_direction(target_port.side) * _STUB_LENGTH, end[1]) - - minimum, maximum = _loopback_obstacle_bounds(layers, start_out, end_out) - loop_y = _loopback_axis_position( - start_out[1], end_out[1], minimum, maximum, _STUB_LENGTH - ) - - bend_points = [start_out, (start_out[0], loop_y), (end_out[0], loop_y), end_out] - return _clean_bend_points(bend_points, start, end) - - -def _loopback_axis_position( - start: float, end: float, minimum: float, maximum: float, margin: float -) -> float: - """Choose the nearer outside lane, keeping the coordinate non-negative.""" - before = minimum - margin - after = maximum + margin - before_detour = abs(start - before) + abs(end - before) - after_detour = abs(start - after) + abs(end - after) - if before >= 0 and before_detour < after_detour: - return before - return after - - -def _loopback_obstacle_bounds( - layers: list[list[LayeredNode]], - start: tuple[float, float], - end: tuple[float, float], -) -> tuple[float, float]: - real_nodes = [node for layer in layers for node in layer if not node.is_dummy] - start_x, end_x = sorted((start[0], end[0])) - obstacles = [ - node - for node in real_nodes - if node.x <= end_x and node.x + node.width >= start_x - ] - if not obstacles: - obstacles = real_nodes - return ( - min(node.y for node in obstacles), - max(node.y + node.height for node in obstacles), - ) - - -def _clean_bend_points( - points: list[tuple[float, float]], - start: tuple[float, float], - end: tuple[float, float], -) -> list[tuple[float, float]]: - cleaned: list[tuple[float, float]] = [] - for point in points: - if _same_point(point, start) or _same_point(point, end): - continue - if cleaned and _same_point(cleaned[-1], point): - continue - cleaned.append(point) - return cleaned - - -def _same_point(first: tuple[float, float], second: tuple[float, float]) -> bool: - return abs(first[0] - second[0]) < 1e-9 and abs(first[1] - second[1]) < 1e-9 diff --git a/src/ewoksdraw/layout/elk_backend.py b/src/ewoksdraw/layout/elk_backend.py index 3c98a11..a305e83 100644 --- a/src/ewoksdraw/layout/elk_backend.py +++ b/src/ewoksdraw/layout/elk_backend.py @@ -1,11 +1,20 @@ import json -from typing import Any +from typing import cast from ewoksdraw import _elk_rs +from .elk_converter import ElkGraph +from .elk_converter import ElkGraphBeforeLayout -def layout( - graph: dict[str, Any], options: dict[str, Any] | None = None -) -> dict[str, Any]: - result = _elk_rs.layout_json(json.dumps(graph), json.dumps(options or {})) - return json.loads(result) + +class ElkLayoutError(Exception): + """Raised when the Rust ELK backend fails to lay out a graph.""" + + +def layout(graph: ElkGraphBeforeLayout) -> ElkGraph: + """Lay out an ELK graph. Layout options are read from ``graph["layoutOptions"]``.""" + try: + result = _elk_rs.layout_json(json.dumps(graph)) + except RuntimeError as e: + raise ElkLayoutError(str(e)) from e + return cast(ElkGraph, json.loads(result)) diff --git a/src/ewoksdraw/layout/elk_converter.py b/src/ewoksdraw/layout/elk_converter.py index 93f6d65..7ad4d59 100644 --- a/src/ewoksdraw/layout/elk_converter.py +++ b/src/ewoksdraw/layout/elk_converter.py @@ -51,7 +51,7 @@ class ElkPoint(Point): ... class ElkSection(TypedDict): id: str startPoint: ElkPoint - bendPoints: list[ElkPoint] + bendPoints: NotRequired[list[ElkPoint]] endPoint: ElkPoint routing: str @@ -131,6 +131,7 @@ def convert_ewoks_to_elk_graph( children: list[ElkChildBeforeLayout] = [] used_ids: set[str] = set() + port_ids: set[str] = set() for task_id in ewoks_graph.graph.nodes: ports = _convert_io_positions_to_elk_ports( task_id, @@ -150,6 +151,7 @@ def convert_ewoks_to_elk_graph( ) used_ids.add(task_id) used_ids.update(port["id"] for port in ports) + port_ids.update(port["id"] for port in ports) root_id = _available_elk_id("__ewoksdraw_root__", used_ids) used_ids.add(root_id) @@ -168,6 +170,39 @@ def convert_ewoks_to_elk_graph( } ) used_ids.add(edge_id) + for mapping in link_attrs.get("data_mapping", []): + source_output = mapping.get("source_output") + if source_output is None: + warnings.warn( + f"Data mapping on Ewoks link {source!r} -> {target!r} has no " + "'source_output', which is not yet supported.", + UserWarning, + stacklevel=2, + ) + continue + + edge_id = _available_elk_id( + f"edge_{len(edges)}_{source}_{target}", used_ids + ) + + edges.append( + { + "id": edge_id, + "sources": [ + _port_or_task_id( + source, f"{source}.output.{source_output}", port_ids + ) + ], + "targets": [ + _port_or_task_id( + target, + f"{target}.input.{mapping['target_input']}", + port_ids, + ) + ], + } + ) + used_ids.add(edge_id) return { "id": root_id, @@ -219,6 +254,15 @@ def _convert_io_positions_to_elk_ports( return ports +def _port_or_task_id(task_id: str, port_id: str, port_ids: set[str]) -> str: + """Return the port id, or the task id when the task does not declare that port. + + This happens for tasks that cannot be imported: their ports are unknown, but + links from or to them must still be routed (to the task box). + """ + return port_id if port_id in port_ids else task_id + + def _available_elk_id(preferred_id: str, used_ids: set[str]) -> str: element_id = preferred_id index = 1 diff --git a/src/ewoksdraw/layout/elk_link_group_builder.py b/src/ewoksdraw/layout/elk_link_group_builder.py index 4bdf822..c7a0f91 100644 --- a/src/ewoksdraw/layout/elk_link_group_builder.py +++ b/src/ewoksdraw/layout/elk_link_group_builder.py @@ -69,6 +69,6 @@ def _section_points(section: ElkSection) -> list[Point]: """ return [ section["startPoint"], - *section["bendPoints"], + *section.get("bendPoints", []), section["endPoint"], ] diff --git a/src/ewoksdraw/tests/test_elk_backend.py b/src/ewoksdraw/tests/test_elk_backend.py index 9fbc067..aa7c738 100644 --- a/src/ewoksdraw/tests/test_elk_backend.py +++ b/src/ewoksdraw/tests/test_elk_backend.py @@ -1,8 +1,12 @@ +from typing import Any +from typing import cast + from ewoksdraw.layout.elk_backend import layout +from ewoksdraw.layout.elk_converter import ElkGraphBeforeLayout def test_layout() -> None: - graph = { + graph: dict[str, Any] = { "id": "root", "layoutOptions": { "org.eclipse.elk.algorithm": "layered", @@ -21,7 +25,7 @@ def test_layout() -> None: } ], } - result = layout(graph) + result = layout(cast(ElkGraphBeforeLayout, graph)) assert result["width"] > 0 assert result["height"] > 0 diff --git a/src/ewoksdraw/tests/test_elk_rs_binding.py b/src/ewoksdraw/tests/test_elk_rs_binding.py new file mode 100644 index 0000000..4ad30e7 --- /dev/null +++ b/src/ewoksdraw/tests/test_elk_rs_binding.py @@ -0,0 +1,247 @@ +import math +from typing import Any +from typing import Literal +from typing import cast + +import pytest + +from ewoksdraw import _elk_rs +from ewoksdraw.layout.elk_backend import ElkLayoutError +from ewoksdraw.layout.elk_backend import layout +from ewoksdraw.layout.elk_converter import ElkGraph +from ewoksdraw.layout.elk_converter import ElkGraphBeforeLayout + +NODE_WIDTH = 100 +NODE_HEIGHT = 60 +INPUT_Y = (20, 40) +OUTPUT_Y = (30,) + + +def _node(node_id: str) -> dict[str, Any]: + ports = [ + { + "id": f"{node_id}.in{i}", + "x": 0, + "y": y, + "width": 0, + "height": 0, + "layoutOptions": { + "org.eclipse.elk.port.side": "WEST", + "org.eclipse.elk.port.index": i, + "org.eclipse.elk.port.borderOffset": 0, + }, + } + for i, y in enumerate(INPUT_Y) + ] + ports += [ + { + "id": f"{node_id}.out{i}", + "x": NODE_WIDTH, + "y": y, + "width": 0, + "height": 0, + "layoutOptions": { + "org.eclipse.elk.port.side": "EAST", + "org.eclipse.elk.port.index": i, + "org.eclipse.elk.port.borderOffset": 0, + }, + } + for i, y in enumerate(OUTPUT_Y) + ] + return { + "id": node_id, + "width": NODE_WIDTH, + "height": NODE_HEIGHT, + "layoutOptions": {"org.eclipse.elk.portConstraints": "FIXED_POS"}, + "ports": ports, + } + + +def _graph( + node_ids: list[str], links: list[tuple[str, str]], routing: str = "ORTHOGONAL" +) -> ElkGraphBeforeLayout: + return cast( + ElkGraphBeforeLayout, + { + "id": "root", + "layoutOptions": { + "org.eclipse.elk.algorithm": "layered", + "org.eclipse.elk.direction": "RIGHT", + "org.eclipse.elk.edgeRouting": routing, + }, + "children": [_node(node_id) for node_id in node_ids], + "edges": [ + { + "id": f"{source}->{target}", + "sources": [f"{source}.out0"], + "targets": [f"{target}.in0"], + } + for source, target in links + ], + }, + ) + + +def _absolute_ports(result: ElkGraph) -> dict[str, tuple[float, float]]: + return { + port["id"]: (node["x"] + port["x"], node["y"] + port["y"]) + for node in result["children"] + for port in node["ports"] + } + + +@pytest.mark.parametrize( + "node_ids, links", + [ + (["a", "b"], [("a", "b")]), + (["a", "b", "c"], [("a", "b"), ("a", "c")]), # branching + (["a", "b", "c"], [("a", "b")]), # disconnected node + (["a", "b"], [("a", "b"), ("b", "a")]), # cycle + (["a"], [("a", "a")]), # self-loop + ], +) +def test_orthogonal_layout_contract( + node_ids: list[str], links: list[tuple[str, str]] +) -> None: + result = layout(_graph(node_ids, links)) + + assert result["width"] > 0 and result["height"] > 0 + + # Nodes are placed and fixed ports are kept at their input offsets. + assert [node["id"] for node in result["children"]] == node_ids + for node in result["children"]: + assert math.isfinite(node["x"]) and math.isfinite(node["y"]) + assert {port["id"]: port["y"] for port in node["ports"]} == { + f"{node['id']}.in0": INPUT_Y[0], + f"{node['id']}.in1": INPUT_Y[1], + f"{node['id']}.out0": OUTPUT_Y[0], + } + + # Every edge has sections that start/end on its ports and are orthogonal. + ports = _absolute_ports(result) + assert len(result["edges"]) == len(links) + for edge in result["edges"]: + assert edge["sections"] + for section in edge["sections"]: + points = [ + section["startPoint"], + *section.get("bendPoints", []), + section["endPoint"], + ] + for p, q in zip(points, points[1:]): + assert p["x"] == pytest.approx(q["x"]) or p["y"] == pytest.approx( + q["y"] + ), f"diagonal segment in {edge['id']}: {p} -> {q}" + start = edge["sections"][0]["startPoint"] + end = edge["sections"][-1]["endPoint"] + assert (start["x"], start["y"]) == pytest.approx(ports[edge["sources"][0]]) + assert (end["x"], end["y"]) == pytest.approx(ports[edge["targets"][0]]) + + +def test_edge_points_within_canvas() -> None: + result = layout(_graph(["a", "b", "c"], [("a", "b"), ("a", "c"), ("b", "c")])) + + for edge in result["edges"]: + for section in edge["sections"]: + for point in [ + section["startPoint"], + *section.get("bendPoints", []), + section["endPoint"], + ]: + assert 0 <= point["x"] <= result["width"] + assert 0 <= point["y"] <= result["height"] + + +def test_empty_graph() -> None: + result = layout({"id": "root", "layoutOptions": {}, "children": [], "edges": []}) + + assert result["width"] == 0 and result["height"] == 0 + assert result["children"] == [] + + +@pytest.mark.parametrize( + "graph_json, message", + [ + ("{not json", "Failed to parse graph JSON"), + ("[]", "must be a json object"), + ("{}", "Every element must have an id"), + ], +) +def test_invalid_graph_raises(graph_json: str, message: str) -> None: + with pytest.raises(RuntimeError, match=message): + _elk_rs.layout_json(graph_json) + + +def test_invalid_options_raises() -> None: + with pytest.raises(RuntimeError, match="Failed to parse options JSON"): + _elk_rs.layout_json('{"id": "root"}', "{bad") + + +def test_unknown_port_raises() -> None: + graph = _graph(["a"], []) + graph["edges"] = [{"id": "e", "sources": ["a.out0"], "targets": ["missing"]}] + + with pytest.raises(ElkLayoutError, match="Referenced shape does not exist"): + layout(graph) + + +def test_unknown_algorithm_raises() -> None: + graph = _graph(["a"], []) + graph["layoutOptions"]["org.eclipse.elk.algorithm"] = "nope" + + with pytest.raises(ElkLayoutError, match="Layout algorithm 'nope' not found"): + layout(graph) + + +def _with_options(graph: ElkGraphBeforeLayout, **options: Any) -> ElkGraphBeforeLayout: + graph["layoutOptions"].update(options) + return graph + + +@pytest.mark.parametrize( + "option, size_key", + [ + ("org.eclipse.elk.spacing.nodeNode", "height"), + ("org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers", "width"), + ], +) +def test_spacing_options_are_applied( + option: str, size_key: Literal["width", "height"] +) -> None: + links = [("a", "b"), ("a", "c")] + small = layout(_with_options(_graph(["a", "b", "c"], links), **{option: 10})) + large = layout(_with_options(_graph(["a", "b", "c"], links), **{option: 200})) + + assert large[size_key] > small[size_key] + + +def test_edges_have_a_single_section_and_optional_bend_points() -> None: + result = layout(_graph(["a", "b", "c"], [("a", "b"), ("a", "c")])) + + sections = [edge["sections"] for edge in result["edges"]] + assert all(len(edge_sections) == 1 for edge_sections in sections) + # Straight edges have no "bendPoints" key at all. + assert any("bendPoints" not in s[0] for s in sections) + + +def test_back_edges_route_around_nodes() -> None: + result = layout(_graph(["a", "b"], [("a", "b"), ("b", "a")])) + + sections = [edge["sections"][0] for edge in result["edges"]] + back_sections = [s for s in sections if s["endPoint"]["x"] < s["startPoint"]["x"]] + assert len(back_sections) == 1 + assert len(back_sections[0]["bendPoints"]) >= 2 + + +def test_splines_are_not_orthogonal_polylines() -> None: + """Spline routing yields diagonal segments, which the SVG renderer cannot draw.""" + result = layout(_graph(["a", "b", "c"], [("a", "b"), ("a", "c")], "SPLINES")) + + diagonals = 0 + for edge in result["edges"]: + section = edge["sections"][0] + points = [section["startPoint"], *section["bendPoints"], section["endPoint"]] + diagonals += sum( + p["x"] != q["x"] and p["y"] != q["y"] for p, q in zip(points, points[1:]) + ) + assert diagonals > 0 From 3e5b613364bf99f3258a7e33217d3dc26a1adddc Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 2 Oct 2026 15:46:51 +0200 Subject: [PATCH 04/12] Issue #34 - remove pyelk and add pytest --- pixi.lock | 15 --------------- pyproject.toml | 1 - src/ewoksdraw/tests/test_elk_converter.py | 12 ++++++++---- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/pixi.lock b/pixi.lock index 72cd186..7a88157 100644 --- a/pixi.lock +++ b/pixi.lock @@ -55,7 +55,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl @@ -113,7 +112,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/bd/9b43ef1abfc9481bfa1ceb8dd550a2e9231723d4eae7e29212f2dffe7a15/fabio-2026.6.0.tar.gz - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl @@ -172,7 +170,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/1b/f55794f02fb4dc8a26aeb2b9ea56a4966f17c1963fd5e7ffbbe70b620fd9/silx-3.1.2-cp314-cp314-macosx_11_0_arm64.whl @@ -231,7 +228,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl @@ -303,7 +299,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl @@ -353,7 +348,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl @@ -404,7 +398,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl @@ -456,7 +449,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - pypi: ./ - - pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl @@ -1691,7 +1683,6 @@ packages: - reportlab - typing-extensions ; python_full_version < '3.11' - xmltodict - - pyelk @ git+https://github.com/LudoBroche/pyelk.git@ewoksdraw-modifications - pytest>=7 ; extra == 'test' - ewoksdraw[test] ; extra == 'dev' - ruff>=0.16.0 ; extra == 'dev' @@ -1700,12 +1691,6 @@ packages: - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' - pydata-sphinx-theme ; extra == 'doc' requires_python: '>=3.10' -- pypi: git+https://github.com/LudoBroche/pyelk.git?rev=ewoksdraw-modifications#d9957c0cccbd7dbd0cc58c2fd26b01b592485368 - name: pyelk - version: 0.3.0 - requires_dist: - - pytest>=7.0 ; extra == 'dev' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl name: filelock version: 4.0.0 diff --git a/pyproject.toml b/pyproject.toml index f07d7c3..bf1366e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,6 @@ dependencies = [ "reportlab", "typing-extensions; python_version < '3.11'", "xmltodict", - "pyelk @ git+https://github.com/LudoBroche/pyelk.git@ewoksdraw-modifications", ] [project.urls] diff --git a/src/ewoksdraw/tests/test_elk_converter.py b/src/ewoksdraw/tests/test_elk_converter.py index d63c3ba..6e419a3 100644 --- a/src/ewoksdraw/tests/test_elk_converter.py +++ b/src/ewoksdraw/tests/test_elk_converter.py @@ -3,10 +3,10 @@ from ewokscore.graph import TaskGraph from ewokscore.tests.examples.graphs import get_graph from ewokscore.tests.examples.graphs import graph_names -from pyelk.graph import validate_graph from ewoksdraw.config.constants import ELK_LAYOUT_OPTIONS from ewoksdraw.graph_to_svg import build_svg_task_group +from ewoksdraw.layout.elk_backend import layout from ewoksdraw.layout.elk_converter import ElkGraph from ewoksdraw.layout.elk_converter import convert_ewoks_to_elk_graph from ewoksdraw.layout.elk_converter import extract_task_positions_from_elk_graph @@ -436,8 +436,8 @@ def test_task_output_positions_missing_a_node_raises() -> None: @pytest.mark.parametrize("graph_name", graph_names()) @pytest.mark.filterwarnings("ignore:.*uses 'map_all_data'.*:UserWarning") -def test_output_is_a_valid_pyelk_graph(graph_name: str) -> None: - """Check graph validation from pyelk""" +def test_output_is_accepted_by_the_rust_layout(graph_name: str) -> None: + """Check that the Rust ELK layout accepts the converted graph""" graph_description, _ = get_graph(graph_name) graph = load_graph(graph_description) @@ -450,4 +450,8 @@ def test_output_is_a_valid_pyelk_graph(graph_name: str) -> None: task_group.extract_output_positions(), ) - validate_graph(elk_graph) + result = layout(elk_graph) + + assert len(result["children"]) == len(elk_graph["children"]) + assert len(result["edges"]) == len(elk_graph["edges"]) + assert all(edge["sections"] for edge in result["edges"]) From 0b0b898c06e718d1cbc58407692efbeb9e414e5c Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 2 Oct 2026 16:09:00 +0200 Subject: [PATCH 05/12] Issue #34 - Testing github workflow to build various wheels --- .github/workflows/build.yml | 75 +++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 34 ++++++++++------ .github/workflows/test.yml | 74 +++++++++++++++++++++++++--------- 3 files changed, 152 insertions(+), 31 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..6a3e2bb --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,75 @@ +name: Build + +on: + workflow_call: + +jobs: + # One wheel per platform. The wheels are abi3 (cp310-abi3): they work with + # any Python >= 3.10, so they do not need to be built per Python version. + wheels: + name: Wheel (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + manylinux: auto + - os: windows-latest + manylinux: "off" + - os: macos-15-intel # x86_64 + manylinux: "off" + - os: macos-latest # arm64 + manylinux: "off" + steps: + - uses: actions/checkout@v7 + + - uses: actions/setup-python@v7 + with: + python-version: "3.12" + + - uses: PyO3/maturin-action@v1 + with: + command: build + args: --release --out dist + manylinux: ${{ matrix.manylinux }} + + - uses: actions/upload-artifact@v7 + with: + name: dist-wheel-${{ matrix.os }} + path: dist/ + + sdist: + name: Source distribution + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - uses: PyO3/maturin-action@v1 + with: + command: sdist + args: --out dist + + - uses: actions/upload-artifact@v7 + with: + name: dist-sdist + path: dist/ + + # All wheels + sdist in one artifact, as published to PyPI. + dist: + name: Collect distribution + needs: [wheels, sdist] + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v8 + with: + pattern: dist-* + merge-multiple: true + path: dist + + - run: ls -l dist + + - uses: actions/upload-artifact@v7 + with: + name: dist + path: dist/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b1cf4d1..b62656f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,15 +4,10 @@ on: workflow_dispatch: jobs: - # Build Python package - build: - uses: ewoks-kit/.github/.github/workflows/python-build.yml@main - - # Run tests + # Build the wheels + sdist and run the tests on them tests: - needs: build - uses: ewoks-kit/.github/.github/workflows/python-tests.yml@main - + uses: ./.github/workflows/test.yml + secrets: inherit # Publish package to TestPyPI publish-testpypi: @@ -23,7 +18,10 @@ jobs: permissions: id-token: write steps: - - uses: ewoks-kit/.github/.github/actions/setup-python-package@main + - uses: actions/download-artifact@v8 + with: + name: dist + path: dist - uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ @@ -37,17 +35,27 @@ jobs: permissions: id-token: write steps: - - uses: ewoks-kit/.github/.github/actions/setup-python-package@main + - uses: actions/download-artifact@v8 + with: + name: dist + path: dist - uses: pypa/gh-action-pypi-publish@release/v1 - # Tag + # Tag (the version is read from the installed Linux wheel) tag-release: needs: publish-pypi runs-on: ubuntu-latest permissions: contents: write steps: - - uses: ewoks-kit/.github/.github/actions/setup-python-package@main + - uses: actions/setup-python@v7 + with: + python-version: "3.12" + - uses: actions/download-artifact@v8 + with: + name: dist-wheel-ubuntu-latest + path: dist + - run: pip install --pre dist/*.whl - uses: ewoks-kit/.github/.github/actions/tag-release@main with: - github-token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 65d3652..2e7605d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,42 +7,80 @@ on: pull_request: workflow_dispatch: workflow_call: + secrets: + CODECOV_TOKEN: + required: false jobs: - # Build Python package + # Build the native wheels and the sdist build: - uses: ewoks-kit/.github/.github/workflows/python-build.yml@main + uses: ./.github/workflows/build.yml - # Run tests + # Run tests on the wheel built for the platform of each job tests: needs: build - uses: ewoks-kit/.github/.github/workflows/python-tests.yml@main - secrets: - codecov_token: ${{ secrets.CODECOV_TOKEN }} - with: - os: ${{ matrix.os }} - python-version: ${{ matrix.python-version }} - enable-coverage: ${{ matrix.enable-coverage }} - jupyter-platform-dirs: "1" - codecov-flags: "unit" + name: Tests (${{ matrix.os }}, Python ${{ matrix.python-version }}) + runs-on: ${{ matrix.os }} + env: + JUPYTER_PLATFORM_DIRS: "1" strategy: fail-fast: false matrix: include: - os: ubuntu-latest python-version: "3.10" - enable-coverage: "false" - extra-pytest-warnings: "" + enable-coverage: false - os: ubuntu-latest python-version: "3.14" - enable-coverage: "true" - extra-pytest-warnings: "" + enable-coverage: true - os: windows-latest python-version: "3.14" - enable-coverage: "false" - extra-pytest-warnings: "" + enable-coverage: false + + - os: macos-15-intel + python-version: "3.14" + enable-coverage: false + + - os: macos-latest + python-version: "3.14" + enable-coverage: false + steps: + - uses: actions/setup-python@v7 + with: + python-version: ${{ matrix.python-version }} + + - uses: actions/download-artifact@v8 + with: + name: dist-wheel-${{ matrix.os }} + path: dist + + # No checkout and no Rust toolchain: only the wheel is tested + - name: Install wheel + shell: bash + run: | + python -m pip install --upgrade pip + pip install --pre "$(ls dist/*.whl)[test]" + + - name: Run pytest + if: ${{ !matrix.enable-coverage }} + run: pytest -v -ra -W error --pyargs ewoksdraw + + - name: Run pytest with coverage + if: ${{ matrix.enable-coverage }} + run: | + pip install pytest-cov "coverage[toml]" + pytest -v -ra -W error --cov=ewoksdraw --cov-report=term --cov-report=xml --pyargs ewoksdraw + + - name: Upload coverage to Codecov + if: ${{ matrix.enable-coverage }} + uses: codecov/codecov-action@v7 + with: + files: coverage.xml + flags: unit + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: false # Run linter / checks checks: From 44f5733a73dac4795f3ea6a1da0c54d1af5f262f Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 2 Oct 2026 16:18:54 +0200 Subject: [PATCH 06/12] Issue #34 - Adding arch --- .github/workflows/build.yml | 4 +++- .github/workflows/test.yml | 4 ++++ README.md | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6a3e2bb..8ba48f9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,9 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-latest + - os: ubuntu-latest # x86_64 + manylinux: auto + - os: ubuntu-24.04-arm # aarch64 manylinux: auto - os: windows-latest manylinux: "off" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2e7605d..001835e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,6 +35,10 @@ jobs: python-version: "3.14" enable-coverage: true + - os: ubuntu-24.04-arm + python-version: "3.14" + enable-coverage: false + - os: windows-latest python-version: "3.14" enable-coverage: false diff --git a/README.md b/README.md index bb96564..9470a0d 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ Using pixi: ```bash pixi add --pypi "ewoksdraw @ git+https://github.com/ewoks-kit/ewoksdraw.git" ``` + +> **Note:** the layout engine is a Rust extension. Prebuilt wheels are provided for Linux (x86_64, aarch64), Windows (x64) and macOS (Intel, arm64). Installing from Git, or on any other platform, builds it from source and requires a [Rust toolchain](https://rustup.rs) and network access to GitHub. + ### Python ```python From 17e2db1faee22df89168ac4afdcfa6747545443a Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Fri, 2 Oct 2026 16:22:49 +0200 Subject: [PATCH 07/12] Issue #34 - Adding metadata to Cargo.toml --- rust/Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 049929c..56845c5 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -2,6 +2,8 @@ name = "ewoksdraw-rust" version = "0.0.0" edition = "2021" +authors = ["ESRF "] +description = "Python bindings to the elk-rs graph layout engine, used by ewoksdraw" license = "MIT" publish = false From 0dfd0a578b5ac47e84017206453f74a2bf40da7e Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Wed, 7 Oct 2026 13:56:59 +0200 Subject: [PATCH 08/12] Issue #34 - New name of the python-rust and license --- LICENSES/elk-rs/LICENSE | 264 ++++++++++++++++++++++++++++++++++++++++ LICENSES/elk-rs/NOTICE | 57 +++++++++ README.md | 7 ++ THIRD_PARTY_NOTICES.md | 24 ++++ pyproject.toml | 10 +- rust/Cargo.lock | 2 +- rust/Cargo.toml | 4 +- 7 files changed, 363 insertions(+), 5 deletions(-) create mode 100644 LICENSES/elk-rs/LICENSE create mode 100644 LICENSES/elk-rs/NOTICE create mode 100644 THIRD_PARTY_NOTICES.md diff --git a/LICENSES/elk-rs/LICENSE b/LICENSES/elk-rs/LICENSE new file mode 100644 index 0000000..c79b74e --- /dev/null +++ b/LICENSES/elk-rs/LICENSE @@ -0,0 +1,264 @@ +Eclipse Public License - v 2.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE +PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF +THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's + behalf. Contributions do not include changes or additions to the + Program that are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available in +any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, Version +2.0, or any later versions of that license, including any exceptions or +additional permissions as identified by the initial Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent license + under Licensed Patents to make, use, sell, offer to sell, import and + otherwise transfer the Contribution of such Contributor, if any, in + Source Code or other form. This patent license shall apply to the + combination of the Contribution and the Program if, at the time the + Contribution is added by the Contributor, such addition of the + Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. Each + Contributor disclaims any liability to Recipient for claims brought by + any other entity based on infringement of intellectual property rights + or otherwise. As a condition to exercising the rights and licenses + granted hereunder, each Recipient hereby assumes sole responsibility to + secure any other intellectual property rights needed, if any. For + example, if a third party patent license is required to allow Recipient + to Distribute the Program, it is Recipient's responsibility to acquire + that license before distributing the Program. + d) Each Contributor represents that to its knowledge it has sufficient + copyright rights in its Contribution, if any, to grant the copyright + license set forth in this Agreement. + e) Notwithstanding the terms of any Secondary License, no Contributor + makes additional grants to any Recipient (other than those set forth in + this Agreement) as a result of such Recipient's receipt of the Program + under the terms of a Secondary License (if permitted under the terms of + Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in accordance + with section 3.2, and the Contributor must accompany the Program with a + statement that the Source Code for the Program is available under this + Agreement, and informs Recipients how to obtain it in a reasonable + manner on or through a medium customarily used for software exchange; + and + b) the Contributor may Distribute the Program under a license different + than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including warranties or + conditions of title and non-infringement, and implied warranties or + conditions of merchantability and fitness for a particular purpose; + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, incidental + and consequential damages, such as lost profits; + iii) does not attempt to limit or alter the recipients' rights in the + Source Code under section 3.2; and + iv) requires any subsequent distribution of the Program by any party to + be under a license that satisfies the requirements of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the Program (i) + is combined with other material in a separate file or files made + available under a Secondary License, and (ii) the initial Contributor + attached to the Source Code the notice described in Exhibit A of this + Agreement, then the Program may be made available under the terms of + such Secondary Licenses, and + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ('notices') contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, the +Contributor who includes the Program in a commercial product offering +should do so in a manner which does not create potential liability for +other Contributors. Therefore, if a Contributor includes the Program in +a commercial product offering, such Contributor ("Commercial +Contributor") hereby agrees to defend and indemnify every other +Contributor ("Indemnified Contributor") against any losses, damages and +costs (collectively "Losses") arising from claims, lawsuits and other +legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the +Program in a commercial product offering. The obligations in this +section do not apply to any claims or Losses relating to any actual or +alleged intellectual property infringement. In order to qualify, an +Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial +Contributor to control, and cooperate with the Commercial Contributor +in, the defense and any related settlement negotiations. The Indemnified +Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those +performance claims and warranties, and if a court requires any other +Contributor to pay any damages as a result, the Commercial Contributor +must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs or +equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further action +by the parties hereto, such provision shall be reformed to the minimum +extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including +a cross-claim or counterclaim in a lawsuit) alleging that the Program +itself (excluding combinations of the Program with other software or +hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails +to comply with any of the material terms or conditions of this Agreement +and does not cure such failure in a reasonable period of time after +becoming aware of such noncompliance. If all Recipient's rights under +this Agreement terminate, Recipient agrees to cease use and distribution +of the Program as soon as reasonably practicable. However, Recipient's +obligations under this Agreement and any licenses granted by Recipient +relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and may +only be modified in the following manner. The Agreement Steward reserves +the right to publish new versions (including revisions) of this +Agreement from time to time. No one other than the Agreement Steward has +the right to modify this Agreement. The Eclipse Foundation is the +initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is +published, Contributor may elect to Distribute the Program (including +its Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A is + not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/LICENSES/elk-rs/NOTICE b/LICENSES/elk-rs/NOTICE new file mode 100644 index 0000000..010918f --- /dev/null +++ b/LICENSES/elk-rs/NOTICE @@ -0,0 +1,57 @@ +Notices for Eclipse Layout Kernel + +This content is produced and maintained by the Eclipse Layout Kernel project. + + Project home: https://projects.eclipse.org/projects/modeling.elk + +Trademarks + +Eclipse Layout Kernel is a trademark of the Eclipse Foundation. + +Copyright + +All content is the property of the respective authors or their employers. For +more information regarding authorship of content, please consult the listed +source code repository logs. + +Declared Project Licenses + +This program and the accompanying materials are made available under the +terms of the Eclipse Public License 2.0 which is available at +http://www.eclipse.org/legal/epl-2.0. + +SPDX-License-Identifier: EPL-2.0 + +Source Code + +The project maintains the following source code repositories: + + https://github.com/eclipse-elk/elk + https://github.com/eclipse-elk/elk-models + +Third-party Content + +This project leverages the following third party content. + +Dependencies automatically captured by the license-check-plugin: see DEPENDENCIES + +The following third-party content and licences are either not automatically +captured or are used in the elk-models repository +(https://github.com/eclipse-elk/elk-models). + +libavoid (0.3.1) + + License: GNU Lesser General Public License, 2.1 + +Ptolemy demo models (n/a) + + License: Ptolemy License (Custom) + +Cryptography + +Content may contain encryption software. The country in which you are currently +may have restrictions on the import, possession, and use, and/or re-export to +another country, of encryption software. BEFORE using any encryption software, +please check the country's laws, regulations and policies concerning the import, +possession, or use, and re-export of encryption software, to see if this is +permitted. diff --git a/README.md b/README.md index 9470a0d..92364a9 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,10 @@ graph = load_graph(...) # Generate the SVG graph_to_svg(graph, output_path="my_workflow.svg") ``` + +## License + +The ewoksdraw code and Rust binding use the [MIT license](LICENSE.md). The +bundled elk-rs layout engine uses EPL-2.0; see +[third-party notices](THIRD_PARTY_NOTICES.md) for its license, attribution, and +corresponding source code. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md new file mode 100644 index 0000000..c18af94 --- /dev/null +++ b/THIRD_PARTY_NOTICES.md @@ -0,0 +1,24 @@ +# Third-party notices + +The ewoksdraw Python code and its Rust binding are licensed under the MIT +license in [LICENSE.md](LICENSE.md). + +## elk-rs (Eclipse Layout Kernel) + +The compiled layout engine includes code from +[elk-rs](https://github.com/openedges/elk-rs), a Rust port of the Eclipse Layout +Kernel. This code is licensed under the Eclipse Public License 2.0 (EPL-2.0). + +The corresponding source code is available under EPL-2.0 at revision +`2191680292b9565592223c22a28b5ef33c3acbad`: + +- [Browse the source](https://github.com/openedges/elk-rs/tree/2191680292b9565592223c22a28b5ef33c3acbad). +- [Download the source archive](https://github.com/openedges/elk-rs/archive/2191680292b9565592223c22a28b5ef33c3acbad.tar.gz). + +The layout engine is compiled directly from this revision. The upstream +[license](LICENSES/elk-rs/LICENSE) and [attribution notice](LICENSES/elk-rs/NOTICE) +are reproduced without modification and included in the wheel and source +distributions. The upstream notice describes the wider ELK project. + +When updating the elk-rs revision in `rust/Cargo.toml`, update these source +links and the copies of the upstream license and notice together. diff --git a/pyproject.toml b/pyproject.toml index bf1366e..58ae14d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,10 +8,16 @@ version = "0.0.1" authors = [{ name = "ESRF", email = "dau-pydev@esrf.fr" }] description = "Render Ewoks workflows as SVG" readme = { file = "README.md", content-type = "text/markdown" } -license = { file = "LICENSE.md" } +# Distributions include the MIT-licensed package and the EPL-2.0 layout engine. +license = "MIT AND EPL-2.0" +license-files = [ + "LICENSE.md", + "THIRD_PARTY_NOTICES.md", + "LICENSES/elk-rs/LICENSE", + "LICENSES/elk-rs/NOTICE", +] classifiers = [ "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", ] requires-python = ">=3.10" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index bbb9a24..b0667e2 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -15,7 +15,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] -name = "ewoksdraw-rust" +name = "elk-rs-python" version = "0.0.0" dependencies = [ "org-eclipse-elk-graph-json", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 56845c5..b6b2460 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,9 +1,9 @@ [package] -name = "ewoksdraw-rust" +name = "elk-rs-python" version = "0.0.0" edition = "2021" authors = ["ESRF "] -description = "Python bindings to the elk-rs graph layout engine, used by ewoksdraw" +description = "Python bindings to the elk-rs graph layout engine" license = "MIT" publish = false From 28ed109ca73a2331731940ede6355fd29feb9102 Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Wed, 7 Oct 2026 14:26:14 +0200 Subject: [PATCH 09/12] Issue #34 - Adding linting and type for rust binding --- .github/workflows/build.yml | 25 +- pixi.lock | 1895 +++++++++++++++++------------------ pyproject.toml | 7 +- rust/src/lib.rs | 1 - src/ewoksdraw/py.typed | 0 5 files changed, 960 insertions(+), 968 deletions(-) create mode 100644 src/ewoksdraw/py.typed diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8ba48f9..d2dea2b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,10 +4,12 @@ on: workflow_call: jobs: - # One wheel per platform. The wheels are abi3 (cp310-abi3): they work with - # any Python >= 3.10, so they do not need to be built per Python version. + # Build every wheel from the source distribution that will be published. + # The wheels are abi3 (cp310-abi3): they work with any Python >= 3.10, + # so they do not need to be built per Python version. wheels: - name: Wheel (${{ matrix.os }}) + name: Wheel from sdist (${{ matrix.os }}) + needs: sdist runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -24,22 +26,33 @@ jobs: - os: macos-latest # arm64 manylinux: "off" steps: - - uses: actions/checkout@v7 - - uses: actions/setup-python@v7 with: python-version: "3.12" + - uses: actions/download-artifact@v8 + with: + name: dist-sdist + path: sdist + + - name: Extract source distribution + shell: bash + run: | + mkdir source + tar -xzf sdist/*.tar.gz --directory source --strip-components=1 + - uses: PyO3/maturin-action@v1 with: command: build + working-directory: source args: --release --out dist manylinux: ${{ matrix.manylinux }} - uses: actions/upload-artifact@v7 with: name: dist-wheel-${{ matrix.os }} - path: dist/ + path: source/dist/ + if-no-files-found: error sdist: name: Source distribution diff --git a/pixi.lock b/pixi.lock index 7a88157..052165e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -27,27 +27,26 @@ environments: indexes: - https://pypi.org/simple options: - pypi-prerelease-mode: allow + pypi-prerelease-mode: explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.7-hdc7f604_106_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.8-hdc7f604_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h0737f62_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.8-hcd007b5_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda @@ -55,67 +54,67 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/56/3f788afb8d7fc451d20a66a64ea58bbe189f6f11780b28ba09148974fb33/hdf5plugin-7.1.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/4e/6989aa5355a6f274b345c20fe3386c202f62e0f98875f49bc38f6fc024da/silx-3.1.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/34/9bd9745a46eb95255a02998207213306c03d3babf0e58d87b74d40f4bb04/silx-3.1.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/50/07/79007d2165f649ea93e08c0962d1d62c70af9cde77965255095bf9d96f9a/librt-0.16.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/76/68cf7ca0985fa41231c17f5515df4e16204649d9916c126f08c84dd64802/lxml-7.0.0b1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8f/44/aa8bc0a660581663fb957d9005851d23736757cae3e58231a8a1030c9f9e/fabio-2026.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/1c/26e16977e25ef2494a74f8ffc872a76ec2c3aa43c3156057cbdf88f352c5/mypy-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c0/60/58961e7fd129e226ce36788fe328d20034f3105f5d3380df690050517737/ast_serialize-0.12.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e4/03/17234145f302a645a123e8c3bb2411ecf4669fbc350de3b0d803230a1729/ruff-0.16.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/27e3cee3dcdb3b7bc09727b642bdbfcd098490ea77df04611db9060d7722/lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/dc/263439af9455b0f6843f31ab5426fb5f6c52d1597fe11409b93897513c08/pydantic_core-2.49.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.1-h19cb2f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.3-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.5-h6e061ac_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-ha1e9b39_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.7-hfe304d0_106_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.8-hfe304d0_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.5-h332eb6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.8-hafa0b4b_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/bd/9b43ef1abfc9481bfa1ceb8dd550a2e9231723d4eae7e29212f2dffe7a15/fabio-2026.6.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/9e/62a7ad88c863c740705c47723839762e3dae8498f58e37233c5307f2454c/silx-3.1.2-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1e/93/9e0cf7da129a93c3dc7f45bc3cd4a660f2aaa995aa8a6f95c2583ef41239/librt-0.16.0-cp314-cp314-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl @@ -124,8 +123,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl @@ -133,55 +131,56 @@ environments: - pypi: https://files.pythonhosted.org/packages/70/78/cf416f15dc29375a229d9dfebf8db6e313f291580b39fa1a568b6052bb07/numpy-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/fb/1eabd2c0673283054468b1c6cb539aeb877636d6c84b280279f2d7a177a9/ast_serialize-0.12.1-cp39-abi3-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/81/12/46ae8670c98a3cd0286ca5645c2f918f8f6be65edfed81b916010619f668/mypy-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/ef/398fcf9018f881ec9aeaafae1ddd6586dfb13314a35d35e899de373dcae0/lxml-6.1.3-cp314-cp314-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b1/54/f67120006fc73a55b6d057d4662d061fbb4eceafce3047c76ca8b382eb11/ast_serialize-0.11.2-cp39-abi3-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/98/a54de85876a8b2612bfa0d84c7b9abfb39c6a3354aee7800b09c1649b9e3/ruff-0.16.10-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/ea/a6/597c0c0e949000c4e107640b015458f2896903e0b42b00aa0f27a97f479b/lxml-7.0.0b1-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/7d/fb75c77d6bddc8a32eddcc0b8385de1202418cd5a5f4f4da69fc66ada8d1/pydantic_core-2.49.0-cp314-cp314-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/8a/7e0d810251776dfa431bc1695c095000d1978603e4b838cc3b39eb92bf80/silx-3.1.3-cp314-cp314-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.1-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.7-h4311e70_106_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.8-h4311e70_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h34a968b_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.8-h0ae1c2c_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/67/c1710b6da92cc307e4402cacb41f890dd0d7a413b49ced6ff5aa8420a60f/silx-3.1.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/1b/f55794f02fb4dc8a26aeb2b9ea56a4966f17c1963fd5e7ffbbe70b620fd9/silx-3.1.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0c/15/fc75a70b0af6021d0ea16811f1fc71cc42cd06ce90fe10f007a69b2eed84/lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/1b/d7/c56955934a431a0fa3e4e9aa7af4a53ceab2a61241005427545208945eb4/ast_serialize-0.12.1-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/e9/d4cfe8b88e7617d734ad481e4ddca09d32eb7272cc751f65bd9435379186/pydantic_core-2.49.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/a4/369f31daf13c58683698c03f7e05528cd2710994ba7dbed5ea843db4ab20/fabio-2026.6.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl @@ -190,37 +189,36 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/26/8a90d2a8f2b2e471bb486b7aec117b8ae622715ed6c39853aec48ea20073/librt-0.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/7e/8f2ab68bddbe58a66fbbaad87beeae3e7d7edddb17263d1fc423936cf34d/ast_serialize-0.11.2-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/59/abcc2d8def4fd60eec7d87f92d27c13448ffd9ab14339bcc63a0d7a2fdea/numpy-2.5.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/12/dc9d37010e7141ce929f1faf0d1cbebed4c0cb3e616fbed3af3f8e4e1391/lxml-7.0.0b1-cp314-cp314-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9f/16/1a5a4a2657effe4806110f2b907313802f1367fcdbb29e8122766e407fab/ruff-0.16.10-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e0/66/924be0b653372ed31ad5c48e26044cc00840e591943a56e61621cf05b60e/mypy-2.4.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-9_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.7-h4f90d01_106_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.8-h4f90d01_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_103.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.8-h53f6dd8_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda @@ -228,89 +226,87 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/f6/8c56a26e3183f24606168e00aca7ebc3096fcfd5f0806cea10acb7864002/silx-3.1.3-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/0f/bc/5811cc73cac05e324e05ba9b0924e1a163a317a167ede8a9c748b11db30a/lxml-6.1.3-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/23/bf/b419c3205ce1143ba7c69baef4f0ba43c14d8712113bf34f9e0d27d609be/ast_serialize-0.11.2-cp39-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/1d/28fc740abdad57e052600a508def01d21be767200d23ba489cfcb95c668a/silx-3.1.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/87/61ffee58b25a956532a6006fae84918a2de849ed25f397492b2e815fe7b3/mypy-2.4.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/f3/c20ea92e062444088edec728a7b8137ac40cd1b47815e8b4ee2537a7263d/pydantic_core-2.49.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/14/5d4fb733c18a1d69e237c067b183842f3a7ea1c999a51ddc87093a281c88/ast_serialize-0.12.1-cp39-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/99/29/cfb0df9448d4d4ad48c2de029ada9ebd71baa6da983a6c77ee6c6cd0fe82/ruff-0.16.10-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/98/769712f356a1e897df3581bb0c3100375d054a000de26099360ea65b5111/librt-0.16.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/1b/3d85ec02e3712058197fdeee9db41ad18e8a3baeb8cfd9bc1be74e8218c0/fabio-2026.6.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/50/bb5cde8460d5ac1650fac61d3b58e59546e712e5c5683cf6859a823b0534/lxml-7.0.0b1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl test-lowest: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple options: - pypi-prerelease-mode: allow + pypi-prerelease-mode: explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h0737f62_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.21-h267e890_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.22-h267e890_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/56/3f788afb8d7fc451d20a66a64ea58bbe189f6f11780b28ba09148974fb33/hdf5plugin-7.1.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/cd/4f564b8f132de25db594efc706897069f016790cea63a5669c9df2675f64/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/34/a1/c8e6b66f499f510752c07a092dfe27621f9c255635e59d38704b5681c35a/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl @@ -320,170 +316,169 @@ environments: - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/d8/56af48cd6a2963db92f015a89e2c0a9f75f51dbd22d605ff689ce07395dc/lxml-7.0.0b1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/66/9b4f0ece6074db992125e83670f5f9b0e23ec2ee172a2315629facf6a158/silx-3.1.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/ce/dbea34cd115ae9b8ef53816daa912563615adf4daed42531878a2fb29c77/lxml-6.1.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/9f/9f52d2886d52645987d603425482c63c5045a3005db1354a7097e5ed1ae9/charset_normalizer-3.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/6c/0cd8b1a0e0c74d55a6adcca6fbba5bde42ad97d6c4eb1d974c27bc33f790/silx-3.1.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f9/92/28311d9350451aab67eff29763638a37a64a22ad572f4df3f9654554fb60/pydantic_core-2.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/15/a70400eeea394dbcf34f926713499c3f7334b2ee0ec3639b794491ffc9c0/fabio-2025.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.5-h6e061ac_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.21-hea035f4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.5-h332eb6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.22-hea035f4_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/78/f8643e5afbd6c7e8830a660231bbb711125c1c6849e774e4aa917ce43f37/lxml-7.0.0b1-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/88/f6b7bf70cff75c5a9c856ca5dfde0f46290f85760ceb079f5d5362b50f41/silx-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/1a/0c58377b29992aab5a65646950d0031bb53a7515ce5f79188dc26364e20d/silx-3.1.3-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/74/6b/8f79692844269427abb3e4dd9e68edfcbe65ae25527d99183214de716c59/pydantic_core-2.46.5-cp310-cp310-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/d4/23cdb18ad1d919ac59d1155698453f66c0a3719b9dc5862f3a3672cb1d08/fabio-2025.10.0-cp310-cp310-macosx_11_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/dd/c25a32f9f6039a96cfd52296a4630075868aa16e71858b3076699a059201/lxml-6.1.3-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/98/77/46e87bcfc45d25ab4db7cfc9bb544bfa3ffd302289ed31ae93f5433eb899/charset_normalizer-3.5.2-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/da/27fbb6465bedc6283b27773402930164b1d1014601d9267dc41ebee25dff/pydantic_core-2.49.0-cp310-cp310-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h34a968b_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.21-hac0b6dc_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.22-hac0b6dc_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/6b/a7d5c08e19a8e69887ed722fffaefdbaffc8959d5ef5c370a65e52c895ac/lxml-6.1.3-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/87/2d08d302f9f445c79bb0c06e8eb0ca26e5b69539aacfa530dd33f7c7146f/pydantic_core-2.49.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/e1/6c54b834bfd96f14221631d6161c41c68fe34bcb204e299339fd70b9c60a/lxml-7.0.0b1-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/77/46e87bcfc45d25ab4db7cfc9bb544bfa3ffd302289ed31ae93f5433eb899/charset_normalizer-3.5.2-cp310-cp310-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/d0/c787604c71c2bdcda1a5656942fc822cd0f9cd879b9484bb84fc42172703/pydantic_core-2.46.5-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/d1/5ddb92494517fa5453c46872a87fd0d0e4a497543b353ce0aad6466f406a/fabio-2025.10.0-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f9/a9/f9cf335fe5f0c70a2f7122af6dd4d2c7ac9b380484a8687f98cead4183b4/silx-3.1.2-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fe/f6/f285f5240010944a23c91b025fb033bff5a6b0bc4ba38da7ee25efdbf1ae/silx-3.1.3-cp310-cp310-macosx_11_0_arm64.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_103.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.21-hc20f281_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.22-hc20f281_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - pypi: ./ - - pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/93/a5795be591f057c8e6c955add526ebb872e03150e1b50a90832e1e7c01af/fabio-2025.10.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/f4/38bf6ec867995074b6b4efd2c87cc34540510984a1d5154cdca9cddaba3a/lxml-7.0.0b1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/40/4f8513d4ead3c06ae00278a8abb76065da642bdf10095e6872ecd1f7a12e/silx-3.1.2-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/bf/74b6785beac6488fd395e78796339bc197fbad6fd6103b41b15a4009dc4b/lxml-6.1.3-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ae/ab/fb8b5178fdf7bf68efa61cbe892286bc9f73846f26147d4725fb89388475/charset_normalizer-3.5.2-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/21/83fffb77864408b8bf0fe1ca603926401d6f8775a8e150b39aacc9958f8a/charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/60/89b710602f263db5efcf4d9957e0fe8a2389339596e906190673a379ea56/pydantic_core-2.49.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/94/205ed9d7ddaf44acd489889708ea124a3f41bdb42c141c8684d528ad0e7a/pydantic_core-2.46.5-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f8/f3/5e1bd1c3cde3a3a2c03c309016cad42ae037b3b2a1ba3fb6cb8411bc2341/silx-3.1.3-cp310-cp310-win_amd64.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -516,21 +511,6 @@ packages: - bzip2 >=1.0.8,<2.0a0 size: 257808 timestamp: 1785906269155 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - sha256: 9f07834f0c546ab14d885ce0366285f61f44e326c0edd1fc63b8294e113ae432 - md5: 72a381cbad04f24b1c2a43ef707f45b4 - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - run_exports: - weak: - - icu >=78.3,<79.0a0 - size: 14459115 - timestamp: 1786545741408 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda sha256: 27d83f1188cd19bcb7754a078b3fa7f4cfb8527f8eb2fde54dd01fc529d1adec md5: 449500f2c089da11c40f5c21312e3e07 @@ -545,20 +525,20 @@ packages: run_exports: {} size: 745303 timestamp: 1784214507189 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 - md5: b24d3c612f71e7aa74158d92106318b2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda + sha256: 6de73033a7c5f712c9c5a54124e4581e025691029835e5bceaf10a333a7e7bc0 + md5: 72cfd2b95b0540247220b42f58a148d7 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - libgcc >=15 constrains: - - expat 2.8.1.* + - expat 2.8.5.* license: MIT license_family: MIT purls: [] run_exports: {} - size: 77856 - timestamp: 1781203599810 + size: 77893 + timestamp: 1790346247149 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda sha256: c8c7583ef063bc3c430f1d48298e5ad24f796a35c22ed5b14183325825a61106 md5: 6525a0b06aa4fd390795f0740636a9dd @@ -573,24 +553,24 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 68004 timestamp: 1787753412298 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda - sha256: 33d1b5d57c5a55a474330c5ec41fe7001a5aa600d9639389e8ce5edafae216a4 - md5: 3b62b92f0f082b67c59618ebf07617a7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + sha256: e031634c3a928f9594eba868bc46ef5230d6571a364a0c63215b06c4563bfcea + md5: 735629b400b70eeab21a2ba8f5b1c2ce depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgcc-ng ==16.2.0=*_5 - - libgomp 16.2.0 he0feb66_5 + - libgcc-ng ==16.2.0=*_7 + - libgomp 16.2.0 he0feb66_7 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] run_exports: {} - size: 1057064 - timestamp: 1789485807107 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda - sha256: 224a5a09e258a1a257089a9af310e9336e1d36834959718a9fab8679742dd822 - md5: af44890f8a2beefd3a83805a59a65014 + size: 1058444 + timestamp: 1790303109576 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda + sha256: 92a0bb350c7be6a4eedcb4e111c60aefd176018e6b1c009a6e025dbe9bbcd758 + md5: d904c7ddd95e026254b4b80808ee9e12 depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 @@ -599,8 +579,8 @@ packages: run_exports: strong: - _openmp_mutex >=4.5 - size: 641644 - timestamp: 1789485759120 + size: 640566 + timestamp: 1790303046034 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 @@ -642,62 +622,65 @@ packages: - libnsl >=2.0.1,<2.1.0a0 size: 33731 timestamp: 1750274110928 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.7-hdc7f604_106_cp314.conda - build_number: 106 - sha256: 5f879892bd439c3d94f4a97b06c214b9a19c4b92f74d84f0305c6ca1b2b239b2 - md5: 28af2158bb8dbb62e55b0af3b44f9d4a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.14.8-hdc7f604_101_cp314.conda + build_number: 101 + sha256: 3dc27daa3470f9b6f863942d99db623d79204ea478955ea73e97d3519cae2ab5 + md5: 5782a594549b816514ca434a42bbf11a depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15 - libstdcxx >=15 license: Python-2.0 purls: [] - run_exports: {} - size: 10520530 - timestamp: 1788383918299 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda - sha256: f20d70da54e5b31dd4a51fb1efeaafafd5ab6dd8d7ac9d1438eaa2526ac4ed3d - md5: e72bbec309c2b0f37823ee7d4fabfcd3 + run_exports: + weak: + - libpython >=3.14,<4.0a0 + size: 10544845 + timestamp: 1791333423324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h0737f62_103.conda + sha256: 66f4831f4ee3055f0ffe94e01901198cf3601e2c1b4f6b51d05c3f2d8557ce1d + md5: cc1ad2520049c35344239454a17560ac depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - libgcc >=15 - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 license: blessing purls: [] run_exports: weak: - libsqlite >=3.53.4,<4.0a0 - size: 974348 - timestamp: 1787051145557 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda - sha256: 38cadde30fad8f7c101f9eec79f60bf03fc99310c7195d23f8b30832516d666f - md5: 75b43a2912a0354204696708e4f34b8d + size: 967489 + timestamp: 1791288185694 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_7.conda + sha256: fa7018298629fc429971fffd6ecba3d27a7b02e4e890d6a93ea01ffebe8cb745 + md5: 9b6707e0caca917fa6ea9ee473f37a5d depends: - __glibc >=2.17,<3.0.a0 - - libgcc 16.2.0 ha9f2e26_5 + - libgcc 16.2.0 ha9f2e26_7 constrains: - - libstdcxx-ng ==16.2.0=*_5 + - libstdcxx-ng ==16.2.0=*_7 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] run_exports: {} - size: 6618916 - timestamp: 1789485826390 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda - sha256: aa58bbba56644ffd062a4a9b358782c5eb7560ccead2ab8f7c5c6ede0a7d33a6 - md5: 74a0a409d9f4561265d36b789d3f398a + size: 6615436 + timestamp: 1790303132935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda + sha256: f34b8d1de9a2bf62476d8608057d9b8a918d97444236dc53a47128f2fae79041 + md5: 54a948337e66706380ff24d6b5fde63f depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=15 + - __glibc >=2.17,<3.0.a0 license: BSD-3-Clause license_family: BSD purls: [] run_exports: weak: - - libuuid >=2.42.3,<3.0a0 - size: 39998 - timestamp: 1788347719520 + - libuuid >=2.42.4,<3.0a0 + size: 34442 + timestamp: 1790121449161 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda sha256: f7e9292dd219a6435bbb1223da9586c3e70d66d169c5a92f08db3f2127df04e9 md5: f7a7ff5a6ab331e037abd34f379a631d @@ -739,9 +722,9 @@ packages: - ncurses >=6.6,<7.0a0 size: 911196 timestamp: 1786355078102 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda - sha256: 4747b2d6a8336f52343bceb8a1ebf41a9e6e665b9d2e3f989972de53a310599e - md5: 16e3034a330cc625f2c685edec60cf4e +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda + sha256: 9c1533f1cf784f0e250919c0c9762d0b0e6bc727a79290ffb7cea1ceca1d038c + md5: 5a51a2ea653f120240b1a9bf76e0aae9 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates @@ -751,27 +734,27 @@ packages: purls: [] run_exports: weak: - - openssl >=3.6.4,<4.0a0 - size: 3202955 - timestamp: 1787698780103 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.21-h267e890_0_cpython.conda - sha256: a0dbc57fe7f0ffaace6708cdb813b1c0d06b9e52dd796780e0ff989f1befa86d - md5: dcc0756cfcab6dd08cbdbda60a0bd390 + - openssl >=3.6.5,<4.0a0 + size: 3195299 + timestamp: 1791098052301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.22-h267e890_0_cpython.conda + sha256: 819fa140a71ab005c448bf164eb182f91610b50f0bffca5b0b94cb6773c5e2f4 + md5: 4dd10eb73930c39aa7bc48b979fa24e0 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.4,<4.0a0 - libgcc >=14 - liblzma >=5.8.3,<6.0a0 - libnsl >=2.0.1,<2.1.0a0 - libsqlite >=3.53.4,<4.0a0 - - libuuid >=2.42.2,<3.0a0 + - libuuid >=2.42.4,<3.0a0 - libxcrypt >=4.4.38 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.9,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -784,27 +767,27 @@ packages: - python_abi 3.10.* *_cp310 noarch: - python - size: 25369143 - timestamp: 1787352774260 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda - build_number: 106 - sha256: 4cd05407d6b07d00fd5b6cc78bd2f60ae5e21f777eb26ead82be2e3751c610a1 - md5: 56ee91e118243e46bfc0c41e4030d354 + size: 25334749 + timestamp: 1791328449078 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.8-hcd007b5_101_cp314.conda + build_number: 101 + sha256: e22f6a79d290935b2c854d325e260f70f364c7cc7ec0bc8308ded4f2f1eef7e6 + md5: 5cb98b237dfc2c64a65e660d7b99cfa5 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.7.0,<3.8.0a0 - libgcc >=15 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libpython 3.14.7 hdc7f604_106_cp314 + - libpython 3.14.8 hdc7f604_101_cp314 - libsqlite >=3.53.4,<4.0a0 - - libuuid >=2.42.3,<3.0a0 + - libuuid >=2.42.4,<3.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.8,<4.0a0 + - openssl >=3.5.9,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -817,8 +800,8 @@ packages: - python_abi 3.14.* *_cp314 noarch: - python - size: 26484459 - timestamp: 1788383955577 + size: 26633451 + timestamp: 1791333464567 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda sha256: 01b3fe073a66e321970d09e04b388708f8cbdca5cdfbfcb7c9eeb470ad10383d @@ -919,30 +902,30 @@ packages: - bzip2 >=1.0.8,<2.0a0 size: 133271 timestamp: 1785906721507 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.1-h19cb2f5_0.conda - sha256: b702c638bb8f0c6f0a5dd6941e77ca2309b73cd4e575d34b4c5b8e4d01996ccc - md5: 23a540fb2961933d47ad411c9a679385 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-23.1.3-h19cb2f5_0.conda + sha256: 19ec3adf903c04aac6f31b180d283f0beb6d0393c5c1603f1d57355eb3a8fd66 + md5: 55664c771bbae09ac41bd7c940c3a7e1 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] run_exports: {} - size: 572932 - timestamp: 1788869719775 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda - sha256: 9c96cc05e056e1bba5b545cbbd57b6e01db622dc2c82934caaaa25cfb22fe666 - md5: dcfdea7b7013beef0a4d744d776ea38f + size: 573303 + timestamp: 1791337833929 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.5-h6e061ac_0.conda + sha256: c58d84e9455db8161fa6a2413c1bf11de30682c02f9a3c1ddfaf24ea73dbe10f + md5: 082b0cec641dcb5bbf71d2aa4b37bfd4 depends: - __osx >=11.0 constrains: - - expat 2.8.1.* + - expat 2.8.5.* license: MIT license_family: MIT purls: [] run_exports: {} - size: 76020 - timestamp: 1781204303305 + size: 75347 + timestamp: 1790370393156 - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda sha256: c4793041226c87f987b9903e6503b76f02f52855cc193be2729ac127e600529b md5: e077b71ae65754eda067e4125364b905 @@ -981,31 +964,35 @@ packages: run_exports: {} size: 79639 timestamp: 1786651070313 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.7-hfe304d0_106_cp314.conda - build_number: 106 - sha256: ddd0f95c3a5da64b9b37b925309f74d9078376f7f0e52f1f32b8b9209d020d6d - md5: 186a99fb514373907206c453031c3938 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libpython-3.14.8-hfe304d0_101_cp314.conda + build_number: 101 + sha256: 00fa627d39047acaee98bac32821cc5dac92c60a49b3e62f1ad7cb8d03c2187e + md5: 466f99da218bc7b6713db0d5404ca8d5 depends: - __osx >=11.0 - libcxx >=20 license: Python-2.0 purls: [] - run_exports: {} - size: 2112028 - timestamp: 1788385157401 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_1.conda - sha256: 78afe0bf88da66d7df62d39632aa69cb73eb32d923cd1175230ce2978618d9c8 - md5: 254c302876eacc77a4682b3fa6f72385 + run_exports: + weak: + - libpython >=3.14,<4.0a0 + size: 2120464 + timestamp: 1791334549048 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_103.conda + sha256: 6ab024b8ec426ff3cb2856f77e3bcca3b0be619330d9bf422f90c934c5d836dc + md5: f8903c56faaf28af430e6aa3a9a33943 depends: - __osx >=11.0 - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 license: blessing purls: [] run_exports: weak: - libsqlite >=3.53.4,<4.0a0 - size: 1008994 - timestamp: 1787051932723 + size: 1009387 + timestamp: 1791288417901 - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda sha256: b2dba286dd6632292b12296e761193b5ef9fb0eaeecaa481f5ba9af72c0c18e1 md5: 7d3fa28263bb7f8ea32db11f570a5bb6 @@ -1033,9 +1020,9 @@ packages: - ncurses >=6.6,<7.0a0 size: 834865 timestamp: 1786356957789 -- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.4-h332eb6d_0.conda - sha256: 73d648d24f0994fd8641972848d74bd57b8d80888a64600643e3fe88a1b50545 - md5: 7a1b628e987d25df3ac6986d45bb0979 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.5-h332eb6d_0.conda + sha256: d992d27aec2f1beac81f792c85b449546c030f06937b5b3ea7cf58431861dde4 + md5: 615ac6cff316565b442cd1af8b94837f depends: - __osx >=11.0 - ca-certificates @@ -1044,22 +1031,22 @@ packages: purls: [] run_exports: weak: - - openssl >=3.6.4,<4.0a0 - size: 2780873 - timestamp: 1787700098779 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.21-hea035f4_0_cpython.conda - sha256: 07fb1ddf805f26944cd7198920ae9290b8734618413c37af609452a8ba6015e9 - md5: f97b88f1e696e83b9a649d690e098dc0 + - openssl >=3.6.5,<4.0a0 + size: 2786968 + timestamp: 1791099439455 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.22-hea035f4_0_cpython.conda + sha256: 437aa5d2b40484307293785892c738039092262a56573bde15159d0894352f6f + md5: 8598a289055f87b52267636305e6a009 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.9,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -1072,24 +1059,24 @@ packages: - python_abi 3.10.* *_cp310 noarch: - python - size: 13117625 - timestamp: 1787353466177 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda - build_number: 106 - sha256: 74e72b101d4985b9919fcf01fec55ff9c82e862377d6be23b99bfe5562ffc207 - md5: 148a7a307869b0f1e4560ec5400d29bb + size: 12116349 + timestamp: 1791329159840 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.8-hafa0b4b_101_cp314.conda + build_number: 101 + sha256: 91874ead4971c6d3b5a2b50b25c34ce8a312f2aa6a862469547c6e4d8b5af2f6 + md5: a66d7bb9eb54ce5939e5b0993d228bc5 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libpython 3.14.7 hfe304d0_106_cp314 + - libpython 3.14.8 hfe304d0_101_cp314 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.8,<4.0a0 + - openssl >=3.5.9,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -1102,8 +1089,8 @@ packages: - python_abi 3.14.* *_cp314 noarch: - python - size: 12612709 - timestamp: 1788385311014 + size: 12690138 + timestamp: 1791334717743 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda sha256: feb9248a062b7a0738e56339d8c9e87bc9adf8e8c76549fb55b0b2456bec3a57 @@ -1159,43 +1146,30 @@ packages: - bzip2 >=1.0.8,<2.0a0 size: 124965 timestamp: 1785906749812 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda - sha256: 6cdb5dee54c72e56ab189fb3ad33cb28533553d42590e7e831160248f4416a43 - md5: a5efc0b42bb8b42e97d0a29ae3e3c187 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - run_exports: - weak: - - icu >=78.3,<79.0a0 - size: 14070242 - timestamp: 1786545847761 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.1-h55c6f16_0.conda - sha256: 3f902803f0fc2643a4f82ff15a06811d974ff5fb6fa8f957720a7ef84e13ad98 - md5: b61106a0b5ac7cfe874f8b2e4f067dfa +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.3-h55c6f16_0.conda + sha256: 2d9d31172d7919bd276a8d1be338de567dd5afdd181e8d3d3d8c2d8695e09de2 + md5: 424521e52e65ef7f6cf957c4966e6386 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] run_exports: {} - size: 578565 - timestamp: 1788869180613 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda - sha256: 5af74261101e3c777399c6294b2b5d290e508153268eb2e9ff99c4d69834612f - md5: a915151d5d3c5bf039f5ccc8402a436f + size: 577501 + timestamp: 1791337239735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda + sha256: 50aa761b83fc7a116ca88fe0cb4cefce5abababb10a926bf8afbafd5c298d102 + md5: 5383c550b785bdaafcc4eaf638071a7c depends: - __osx >=11.0 constrains: - - expat 2.8.1.* + - expat 2.8.5.* license: MIT license_family: MIT purls: [] run_exports: {} - size: 69362 - timestamp: 1781203631990 + size: 69565 + timestamp: 1790370026495 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda sha256: 2783389a7b9dda04c62cc54c6bbeb03dd3cef24b3fc642715d02a3fa19464a9a md5: 216bbcc23c11e9695b3db4a8771d76eb @@ -1234,32 +1208,35 @@ packages: run_exports: {} size: 73289 timestamp: 1786651074391 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.7-h4311e70_106_cp314.conda - build_number: 106 - sha256: b239028180e1ba2f7daff4053c89e41f7c0f1a3c21bb82f6dcb09384d123ec1f - md5: 4d7a303343eff82e8b92d52c5fd3991a +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.14.8-h4311e70_101_cp314.conda + build_number: 101 + sha256: 257d8491de0514a5da3b3fd0d81a64802df6a7e3a72c31d639bd92d0cb110a0f + md5: af47f048c7a22af82a66a912794fe4ee depends: - __osx >=11.0 - libcxx >=20 license: Python-2.0 purls: [] - run_exports: {} - size: 1875368 - timestamp: 1788383432953 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-hca69786_1.conda - sha256: 839b31d4830e896b4d315b551d27f2bb08026bc946df04bcc360d8627c3ba2cd - md5: fde96d40ebe9a9cb34e4122380189ddb + run_exports: + weak: + - libpython >=3.14,<4.0a0 + size: 1895946 + timestamp: 1791332518303 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.4-h34a968b_103.conda + sha256: b7c1d5a15d21948eec177a00e90801ad0d1c35e552404da9fbf0d657421aa0dd + md5: 68c3a50b8a8abfcc926f2d7e12d1fef5 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 license: blessing purls: [] run_exports: weak: - libsqlite >=3.53.4,<4.0a0 - size: 942754 - timestamp: 1787051243846 + size: 938370 + timestamp: 1791288154128 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda sha256: a18fa5d5bac452401459f966cf0d872224e8080c4ff93c77e168d43ab42ef9d7 md5: f39288f0ea63ae962e1a2e4f355a0d75 @@ -1287,9 +1264,9 @@ packages: - ncurses >=6.6,<7.0a0 size: 804298 timestamp: 1786355189145 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.4-h55eecbc_0.conda - sha256: f23239eacd75c4c50705e68fae1aa3292da473e6a3a4abe2330f1e6afa680704 - md5: ae71ab40048c19a389a7dcccb86c2481 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + sha256: 44fbc526456571a9fb8fa18157f6f269d4d4bd40eef20183a93b9c9296f94497 + md5: 45d9179cdf6e53d88aec034246f0dad6 depends: - __osx >=11.0 - ca-certificates @@ -1298,22 +1275,22 @@ packages: purls: [] run_exports: weak: - - openssl >=3.6.4,<4.0a0 - size: 3110142 - timestamp: 1787698648639 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.21-hac0b6dc_0_cpython.conda - sha256: ba61f76dd32c4c0991eec0ead32225e25f01d916f3a02dada9960338461d54f3 - md5: 85c3a8ed7ab3b52eee76c6f23b3daa16 + - openssl >=3.6.5,<4.0a0 + size: 3111573 + timestamp: 1791097959641 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.22-hac0b6dc_0_cpython.conda + sha256: 66d5322d2a5b9e78bd65f301bd0a9da54452bedbbaead46a2b7da808cf485c80 + md5: b6dd4544c50c6fc3793cdec56467488a depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.9,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -1326,24 +1303,24 @@ packages: - python_abi 3.10.* *_cp310 noarch: - python - size: 12976091 - timestamp: 1787352030187 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda - build_number: 106 - sha256: 5ffc8349ca089ec5ac39ad36a095323ad177ebe05cbfc690c1e135560cfd68b7 - md5: 5fd37c78250b4f57c2bcf9ad2e54beb1 + size: 12877536 + timestamp: 1791327519372 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.8-h0ae1c2c_101_cp314.conda + build_number: 101 + sha256: 4aebb9d626b26a2f7257d3c671bac70a96fffd4706db4d61c35f7bda6bee74f3 + md5: db895757bd372efa32f96937fabb3ef0 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libpython 3.14.7 h4311e70_106_cp314 + - libpython 3.14.8 h4311e70_101_cp314 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - - openssl >=3.5.8,<4.0a0 + - openssl >=3.5.9,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 @@ -1356,8 +1333,8 @@ packages: - python_abi 3.14.* *_cp314 noarch: - python - size: 12223441 - timestamp: 1788383470498 + size: 12496923 + timestamp: 1791332554767 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda sha256: d6782b430e6dce4fe8c7ac118cd988d5a193eb4a7f60741edfaede58016b6110 @@ -1415,21 +1392,21 @@ packages: - bzip2 >=1.0.8,<2.0a0 size: 55919 timestamp: 1785906343696 -- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - sha256: 1a54d874addda73b6f7164d5f3905821277a1831bcc05edd74b3085391688571 - md5: ccc490c81ffe14181861beac0e8f3169 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda + sha256: 70c73d9fd24ad996f2821d1501adae2ca70984b4e2d8faed76227f348ce86078 + md5: 4969128c45f9e71adbb6a1696679ce7f depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - expat 2.8.1.* + - expat 2.8.5.* license: MIT license_family: MIT purls: [] run_exports: {} - size: 71631 - timestamp: 1781203724164 + size: 72107 + timestamp: 1790346254561 - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda sha256: 613e8077c5cca5df7fe84ade7d5050301bee3c6c4c450ffe61d34a349ab4f11c md5: ceb38b0ba900847d8da4289c3c8e5708 @@ -1474,10 +1451,10 @@ packages: run_exports: {} size: 89109 timestamp: 1786650384519 -- conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.7-h4f90d01_106_cp314.conda - build_number: 106 - sha256: 95b7bd6fec10031b44b20276e57c11d71cd1095f966aa84c1bba5ece0eea64d2 - md5: 2d48db2a15a7b768bb563d2675c99b2c +- conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.14.8-h4f90d01_101_cp314.conda + build_number: 101 + sha256: 04f9f3a3b9d91e47009baa4a4379ddb11af3e5402928e40e1dd4e02ca83d60f1 + md5: 98114d6c6784f306f4929189f50520a9 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1485,11 +1462,11 @@ packages: license: Python-2.0 purls: [] run_exports: {} - size: 51250 - timestamp: 1788384361391 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_1.conda - sha256: 0a45d7c0f20146fff787a106f8fa187872e309c70975ff8f0936e188914c26ad - md5: a72d495965b144bb7da033642d389047 + size: 51940 + timestamp: 1791333541956 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_103.conda + sha256: 94e12c9dd0323bd8f9e5abc85bba0994b9ad7f21420bb3310f9fbbbcc7c1b29e + md5: 97b2e506228f785f01a0e6c80b57103a depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -1499,8 +1476,8 @@ packages: run_exports: weak: - libsqlite >=3.53.4,<4.0a0 - size: 1314919 - timestamp: 1787051140039 + size: 1313318 + timestamp: 1791288170708 - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda sha256: 0629c2cc0404d3bb29d6baa7b4ba62da80797015e86de050db81ea5a07050527 md5: 5d2ff29d465097458cc3ff6569151991 @@ -1518,9 +1495,9 @@ packages: - libzlib >=1.3.2,<2.0a0 size: 58529 timestamp: 1785276664143 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.4-hf411b9b_0.conda - sha256: 9dddb559ba49744d5d94092d8d13cb0567f5c3b3f439f3acf28433d1f4256acc - md5: 73cb1783f47c452be4c309430fbef89f +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + sha256: bc44625e0c6d83f3e02b5f6adc01e0e3ca7001d3d94e24959591a57f5a011b9a + md5: f002ec2237836867bfd3d1299a6005da depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -1531,20 +1508,20 @@ packages: purls: [] run_exports: weak: - - openssl >=3.6.4,<4.0a0 - size: 9474879 - timestamp: 1787699876495 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.21-hc20f281_0_cpython.conda - sha256: 5fdfb98ba1a884e2f701fec9b0f59350281c9f160d193721bb3d502fcdebafbd - md5: c5591007fa429194271251d0354b3d84 + - openssl >=3.6.5,<4.0a0 + size: 9402647 + timestamp: 1791099870810 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.22-hc20f281_0_cpython.conda + sha256: ef2d4feaa760b8a4059e5b3307867d3aa65fcb58282a4084ddacaacb16f957ae + md5: 6cfea346c7aacb6f4daeb279bfb88beb depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.4,<4.0a0 - liblzma >=5.8.3,<6.0a0 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.9,<4.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 @@ -1559,22 +1536,22 @@ packages: - python_abi 3.10.* *_cp310 noarch: - python - size: 16146296 - timestamp: 1787352131213 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda - build_number: 106 - sha256: 9fdcb8a5018d91a22484e67ac6c5ae9116f082f953328f43ed4421418740dfb1 - md5: df0b471269a379db0262256e332c1e7c + size: 16178075 + timestamp: 1791327673101 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.8-h53f6dd8_101_cp314.conda + build_number: 101 + sha256: 6372598cff41f4145686a9bfa3a0399354f34fc3f813b0218a4760428a33d3db + md5: e10e1e2dc571bc18b72d7b231d448cb5 depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.8.1,<3.0a0 + - libexpat >=2.8.5,<3.0a0 - libffi >=3.7.0,<3.8.0a0 - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libpython 3.14.7 h4f90d01_106_cp314 + - libpython 3.14.8 h4f90d01_101_cp314 - libsqlite >=3.53.4,<4.0a0 - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.8,<4.0a0 + - openssl >=3.5.9,<4.0a0 - python_abi 3.14.* *_cp314 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -1589,8 +1566,8 @@ packages: - python_abi 3.14.* *_cp314 noarch: - python - size: 18377601 - timestamp: 1788384478011 + size: 18253133 + timestamp: 1791333695156 python_site_packages_path: Lib/site-packages - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda sha256: f19618a3a82cc483dacf1c70a30367ee7b0c7e71b90f1f80e14feff44fbd3688 @@ -1691,16 +1668,11 @@ packages: - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' - pydata-sphinx-theme ; extra == 'doc' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/01/fb/0e4489505dac46a0487ba925ea4b046612f1a40f432d63a000421de78549/filelock-4.0.0-py3-none-any.whl - name: filelock - version: 4.0.0 - sha256: a850aa9ec2acba8db9ca2e9fcf8a327fbc2f85e432725715b37bd76b7dd1f798 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ast-serialize - version: 0.11.2 - sha256: a7004ba572f09be34342ccb98dcd4bad5707d3d81adc8cb4c3f685d2a2c51bbc - requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl + name: rpds-py + version: 2026.9.1 + sha256: 3f0e9ac28fc067d4d34b88ae43c48e9489455c97fee9633d851f7eeed5a05d35 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl name: pyyaml version: 6.0.3 @@ -1731,44 +1703,15 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl - name: ewokscore - version: 5.1.0rc4 - sha256: 585a95541630c781b4c661cc9badaa9218df411a4eaab2fd5f3f306af34cf22e - requires_dist: - - numpy>=1.15 - - networkx>=2 - - silx>=1 - - pyyaml>=5.1 - - h5py>=2.8 - - packaging - - ewoksutils>=2.0.0rc2 - - importlib-metadata ; python_full_version < '3.9' - - pydantic>=2 - - typing-extensions ; python_full_version < '3.11' - - backports-strenum ; python_full_version < '3.11' - - jsonschema - - papermill ; extra == 'notebooks' - - ewokscore[notebooks] ; extra == 'test' - - pytest>=7 ; extra == 'test' - - matplotlib>=3 ; extra == 'test' - - ipykernel ; extra == 'test' - - ewokscore[test] ; extra == 'dev' - - ruff>=0.16.0 ; extra == 'dev' - - ewokscore[test] ; extra == 'doc' - - sphinx>=4.5 ; extra == 'doc' - - sphinxcontrib-mermaid>=0.7 ; extra == 'doc' - - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - docutils<0.21 ; extra == 'doc' - - nbsphinx-link ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/0d/9e/62a7ad88c863c740705c47723839762e3dae8498f58e37233c5307f2454c/silx-3.1.2-cp314-cp314-macosx_10_15_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl + name: defusedxml + version: 0.7.1 + sha256: a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/0a/67/c1710b6da92cc307e4402cacb41f890dd0d7a413b49ced6ff5aa8420a60f/silx-3.1.3-cp314-cp314-macosx_11_0_arm64.whl name: silx - version: 3.1.2 - sha256: f9e35b81e9830ea6524a3281d38a55d4c577757936ad656a24dd549b40eaf366 + version: 3.1.3 + sha256: b2e9f8fb5f1ac46f4536274ef90e70cefae60b0c50e69e96ac40e31a4327792a requires_dist: - numpy - packaging @@ -1813,25 +1756,15 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl - name: rpds-py - version: 0.30.0 - sha256: 4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ruff - version: 0.16.8 - sha256: 15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/1c/1b/f55794f02fb4dc8a26aeb2b9ea56a4966f17c1963fd5e7ffbbe70b620fd9/silx-3.1.2-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/0a/f6/8c56a26e3183f24606168e00aca7ebc3096fcfd5f0806cea10acb7864002/silx-3.1.3-cp314-cp314-win_amd64.whl name: silx - version: 3.1.2 - sha256: a1b1aaadb6b40429110adf0d7aae152578f8c0ed6484415625c085cc3134ce52 + version: 3.1.3 + sha256: 641d5ff33a846e85e62dfe93433fb79850550e4ef85cb5a5643fe7e557f346e6 requires_dist: - numpy - packaging @@ -1876,16 +1809,85 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl - name: ruff - version: 0.16.8 - sha256: a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa +- pypi: https://files.pythonhosted.org/packages/0b/3e/ede57f735d4766b57de8088d72988edaf5e821d04cee89aa1d4b8aab23fa/ewokscore-5.1.0rc4-py3-none-any.whl + name: ewokscore + version: 5.1.0rc4 + sha256: 585a95541630c781b4c661cc9badaa9218df411a4eaab2fd5f3f306af34cf22e + requires_dist: + - numpy>=1.15 + - networkx>=2 + - silx>=1 + - pyyaml>=5.1 + - h5py>=2.8 + - packaging + - ewoksutils>=2.0.0rc2 + - importlib-metadata ; python_full_version < '3.9' + - pydantic>=2 + - typing-extensions ; python_full_version < '3.11' + - backports-strenum ; python_full_version < '3.11' + - jsonschema + - papermill ; extra == 'notebooks' + - ewokscore[notebooks] ; extra == 'test' + - pytest>=7 ; extra == 'test' + - matplotlib>=3 ; extra == 'test' + - ipykernel ; extra == 'test' + - ewokscore[test] ; extra == 'dev' + - ruff>=0.16.0 ; extra == 'dev' + - ewokscore[test] ; extra == 'doc' + - sphinx>=4.5 ; extra == 'doc' + - sphinxcontrib-mermaid>=0.7 ; extra == 'doc' + - sphinx-autodoc-typehints>=1.16 ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - docutils<0.21 ; extra == 'doc' + - nbsphinx-link ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/0c/15/fc75a70b0af6021d0ea16811f1fc71cc42cd06ce90fe10f007a69b2eed84/lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl + name: lxml + version: 6.1.3 + sha256: 2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/0f/bc/5811cc73cac05e324e05ba9b0924e1a163a317a167ede8a9c748b11db30a/lxml-6.1.3-cp314-cp314-win_amd64.whl + name: lxml + version: 6.1.3 + sha256: 66299564c046bc7e0cc5de5106601eae907e9fa5904cd68a323380a8502f7861 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.5.2 + sha256: 34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl + name: rpds-py + version: 0.30.0 + sha256: 4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1b/d7/c56955934a431a0fa3e4e9aa7af4a53ceab2a61241005427545208945eb4/ast_serialize-0.12.1-cp39-abi3-macosx_11_0_arm64.whl + name: ast-serialize + version: 0.12.1 + sha256: 8a32f184ce3e4b1d0b06d642a1243281cf55b99e0323680b1b8f904029fd7700 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1e/93/9e0cf7da129a93c3dc7f45bc3cd4a660f2aaa995aa8a6f95c2583ef41239/librt-0.16.0-cp314-cp314-macosx_10_15_x86_64.whl + name: librt + version: 0.16.0 + sha256: 931a0bb0fcac88f263e269e46eb30ba8e21402cd3c62ca40cb97034c0693fab1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/1f/f4/f6ddc8b802d0025459429d20a3ff75264da7dd9a248a17baf43035a8c618/hdf5plugin-7.1.0-py3-none-macosx_10_13_x86_64.whl name: hdf5plugin version: 7.1.0 @@ -1904,6 +1906,11 @@ packages: - mypy ; extra == 'dev' - ruff ; extra == 'dev' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 2026.9.1 + sha256: eac2f5dbafd585dfe31f86a23ebf0d3ba480a9d49ebc87947267b5608d4ea0cd + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl name: numpy version: 2.2.6 @@ -1914,11 +1921,6 @@ packages: version: 6.0.3 sha256: 4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/23/bf/b419c3205ce1143ba7c69baef4f0ba43c14d8712113bf34f9e0d27d609be/ast_serialize-0.11.2-cp39-abi3-win_amd64.whl - name: ast-serialize - version: 0.11.2 - sha256: b9065dd23131a23b41f5bab3bf4e9b3c350a3fe8e36e8200eded9b729fcea484 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl name: pytest version: 9.1.1 @@ -1988,64 +1990,21 @@ packages: - mypy ; extra == 'dev' - ruff ; extra == 'dev' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/29/6b/a7d5c08e19a8e69887ed722fffaefdbaffc8959d5ef5c370a65e52c895ac/lxml-6.1.3-cp310-cp310-macosx_10_9_universal2.whl + name: lxml + version: 6.1.3 + sha256: 40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl name: pyyaml version: 6.0.3 sha256: bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/2c/1d/28fc740abdad57e052600a508def01d21be767200d23ba489cfcb95c668a/silx-3.1.2-cp314-cp314-win_amd64.whl - name: silx - version: 3.1.2 - sha256: 13c7cba31545cf611b41f5a9c4dfd5e3b2f47aad9edd40310ba05bfea7661b7d - requires_dist: - - numpy - - packaging - - h5py>=3 - - fabio - - pydantic>=2 - - filelock - - pyopencl ; extra == 'opencl' - - mako ; extra == 'opencl' - - silx[opencl] ; extra == 'full-no-qt' - - qtconsole ; extra == 'full-no-qt' - - matplotlib>=3.6 ; extra == 'full-no-qt' - - pyopengl ; extra == 'full-no-qt' - - python-dateutil ; extra == 'full-no-qt' - - scipy ; extra == 'full-no-qt' - - pooch ; extra == 'full-no-qt' - - pillow ; extra == 'full-no-qt' - - pint ; extra == 'full-no-qt' - - hdf5plugin ; extra == 'full-no-qt' - - qtawesome ; extra == 'full-no-qt' - - silx[full-no-qt] ; extra == 'full' - - pyside6>=6.5 ; extra == 'full' - - h5pyd>=0.20.0 ; extra == 'h5pyd' - - silx[full] ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - pandoc ; extra == 'doc' - - silx[full,h5pyd] ; extra == 'test' - - bitshuffle ; extra == 'test' - - imageio[tifffile] ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xvfb ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-httpserver ; extra == 'test' - - silx[doc,full,test] ; extra == 'dev' - - build ; extra == 'dev' - - wheel ; extra == 'dev' - - meson-python ; extra == 'dev' - - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' - - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - ruff ; extra == 'dev' - - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl name: referencing version: 0.37.0 @@ -2055,11 +2014,20 @@ packages: - rpds-py>=0.7.0 - typing-extensions>=4.4.0 ; python_full_version < '3.13' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/32/cd/4f564b8f132de25db594efc706897069f016790cea63a5669c9df2675f64/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.5.1 - sha256: 96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 - requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.5 + sha256: 54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/34/a1/c8e6b66f499f510752c07a092dfe27621f9c255635e59d38704b5681c35a/pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.5 + sha256: 850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/37/93/a5795be591f057c8e6c955add526ebb872e03150e1b50a90832e1e7c01af/fabio-2025.10.0-cp310-cp310-win_amd64.whl name: fabio version: 2025.10.0 @@ -2085,23 +2053,6 @@ packages: - pytest ; extra == 'test' - pytest-cov ; extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/38/e9/d4cfe8b88e7617d734ad481e4ddca09d32eb7272cc751f65bd9435379186/pydantic_core-2.49.0-cp314-cp314-macosx_11_0_arm64.whl - name: pydantic-core - version: 2.49.0 - sha256: 7cab96cc03d0bdb31b4d1130f65004f496558b267073df3fe65d4981276819a3 - requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/39/78/f8643e5afbd6c7e8830a660231bbb711125c1c6849e774e4aa917ce43f37/lxml-7.0.0b1-cp310-cp310-macosx_10_9_x86_64.whl - name: lxml - version: 7.0.0b1 - sha256: 4d87a7a332111f0dcf0f511b12bac4db62b2f4267a84cfd21d7bb8cc28e0cfb1 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl name: h5py version: 3.16.0 @@ -2109,6 +2060,24 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3a/87/61ffee58b25a956532a6006fae84918a2de849ed25f397492b2e815fe7b3/mypy-2.4.0-cp314-cp314-win_amd64.whl + name: mypy + version: 2.4.0 + sha256: 2106b55105ba5ea9be4f53a24517fc5fa927ff1585edc9bc1a975abb72caef89 + requires_dist: + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.16.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.11.2,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl name: h5py version: 3.16.0 @@ -2116,23 +2085,6 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3e/87/2d08d302f9f445c79bb0c06e8eb0ca26e5b69539aacfa530dd33f7c7146f/pydantic_core-2.49.0-cp310-cp310-macosx_11_0_arm64.whl - name: pydantic-core - version: 2.49.0 - sha256: ad272f556b10a7eb68b6240ea5777f59d89d59b780987459225ab8650681b373 - requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3e/f4/38bf6ec867995074b6b4efd2c87cc34540510984a1d5154cdca9cddaba3a/lxml-7.0.0b1-cp310-cp310-win_amd64.whl - name: lxml - version: 7.0.0b1 - sha256: 66b8f25874e9cd68a3ce3a678fdbfdd0415ac8a185670923ddd8469b7b0f07b6 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl name: jsonschema-specifications version: 2025.9.1 @@ -2140,53 +2092,10 @@ packages: requires_dist: - referencing>=0.31.0 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: numpy - version: 2.5.3 - sha256: b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl - name: h5py - version: 3.16.0 - sha256: 9c9d307c0ef862d1cd5714f72ecfafe0a5d7529c44845afa8de9f46e5ba8bd65 - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl - name: pillow - version: 12.3.0 - sha256: 300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/48/88/f6b7bf70cff75c5a9c856ca5dfde0f46290f85760ceb079f5d5362b50f41/silx-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl - name: silx - version: 3.1.2 - sha256: b003efbf0f68fc61fc3ccac31c2b44f7045f89f49bec052fbdc0440d4f1e6b40 +- pypi: https://files.pythonhosted.org/packages/43/4e/6989aa5355a6f274b345c20fe3386c202f62e0f98875f49bc38f6fc024da/silx-3.1.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: silx + version: 3.1.3 + sha256: 87b5ea7b0b02594eab5c4b27e819cc612e4f5fe063f7ccb5dd8dcf398142e625 requires_dist: - numpy - packaging @@ -2231,79 +2140,59 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.5.3 + sha256: b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl + name: h5py + version: 3.16.0 + sha256: 9c9d307c0ef862d1cd5714f72ecfafe0a5d7529c44845afa8de9f46e5ba8bd65 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl + name: pillow + version: 12.3.0 + sha256: 300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl name: typing-extensions version: 4.16.0 sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/49/e1/6c54b834bfd96f14221631d6161c41c68fe34bcb204e299339fd70b9c60a/lxml-7.0.0b1-cp310-cp310-macosx_10_9_universal2.whl - name: lxml - version: 7.0.0b1 - sha256: 053858ca4c51d1604d105eb9cd25ee2d00b8aee5ee9cde00768e806036463119 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/4c/34/9bd9745a46eb95255a02998207213306c03d3babf0e58d87b74d40f4bb04/silx-3.1.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: silx - version: 3.1.2 - sha256: b8b3b57906f1e7bb4307ca3510adc45e485949d13af3fc5f38254fda847df976 - requires_dist: - - numpy - - packaging - - h5py>=3 - - fabio - - pydantic>=2 - - filelock - - pyopencl ; extra == 'opencl' - - mako ; extra == 'opencl' - - silx[opencl] ; extra == 'full-no-qt' - - qtconsole ; extra == 'full-no-qt' - - matplotlib>=3.6 ; extra == 'full-no-qt' - - pyopengl ; extra == 'full-no-qt' - - python-dateutil ; extra == 'full-no-qt' - - scipy ; extra == 'full-no-qt' - - pooch ; extra == 'full-no-qt' - - pillow ; extra == 'full-no-qt' - - pint ; extra == 'full-no-qt' - - hdf5plugin ; extra == 'full-no-qt' - - qtawesome ; extra == 'full-no-qt' - - silx[full-no-qt] ; extra == 'full' - - pyside6>=6.5 ; extra == 'full' - - h5pyd>=0.20.0 ; extra == 'h5pyd' - - silx[full] ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - pydata-sphinx-theme ; extra == 'doc' - - nbsphinx ; extra == 'doc' - - pandoc ; extra == 'doc' - - silx[full,h5pyd] ; extra == 'test' - - bitshuffle ; extra == 'test' - - imageio[tifffile] ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xvfb ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-httpserver ; extra == 'test' - - silx[doc,full,test] ; extra == 'dev' - - build ; extra == 'dev' - - wheel ; extra == 'dev' - - meson-python ; extra == 'dev' - - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' - - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - - ruff ; extra == 'dev' - - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.3.0 @@ -2335,6 +2224,11 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/50/07/79007d2165f649ea93e08c0962d1d62c70af9cde77965255095bf9d96f9a/librt-0.16.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: librt + version: 0.16.0 + sha256: ca8052401c55d7511dda6760719fda7618067e83535d7d0010096d216c34b667 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl name: pluggy version: 1.6.0 @@ -2346,10 +2240,15 @@ packages: - pytest-benchmark ; extra == 'testing' - coverage ; extra == 'testing' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/54/40/4f8513d4ead3c06ae00278a8abb76065da642bdf10095e6872ecd1f7a12e/silx-3.1.2-cp310-cp310-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl + name: iniconfig + version: 2.3.1 + sha256: 9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/59/1a/0c58377b29992aab5a65646950d0031bb53a7515ce5f79188dc26364e20d/silx-3.1.3-cp310-cp310-macosx_10_9_x86_64.whl name: silx - version: 3.1.2 - sha256: 072a41782d37feffc999c20fb5cca5184aa600828833aa3f5bb503e54e811d1c + version: 3.1.3 + sha256: 6469dd787add7642e3cceabf4b1a8cbb452525f05a9dbf49d49e7e3bc834ad5e requires_dist: - numpy - packaging @@ -2394,16 +2293,11 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl - name: ruff - version: 0.16.8 - sha256: 42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.3.0 @@ -2435,21 +2329,11 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5d/c7/6b4ad89ca6f7732ff97ce5e9caa6fe739600d26c5d53c20d0bf9abb79ec5/defusedxml-0.8.0rc2-py2.py3-none-any.whl - name: defusedxml - version: 0.8.0rc2 - sha256: 1c812964311154c3bf4aaf3bc1443b31ee13530b7f255eaaa062c0553c76103d - requires_python: '>=3.6' - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: rpds-py version: 0.30.0 sha256: 0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl - name: librt - version: 0.15.0 - sha256: 6c0eb900c0e91f4aebe680845242e614f1864edfd44106380d0752ac29522bf8 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl name: packaging version: '26.3' @@ -2571,18 +2455,13 @@ packages: requires_dist: - colorama>=0.4.6 ; extra == 'windows-terminal' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl - name: charset-normalizer - version: 3.5.1 - sha256: d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/71/f3/c20ea92e062444088edec728a7b8137ac40cd1b47815e8b4ee2537a7263d/pydantic_core-2.49.0-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/74/6b/8f79692844269427abb3e4dd9e68edfcbe65ae25527d99183214de716c59/pydantic_core-2.46.5-cp310-cp310-macosx_10_12_x86_64.whl name: pydantic-core - version: 2.49.0 - sha256: 46836736bca8a7ebab55d0ea76cd04e89bae0ea3d6dcfdedcd1bb1b1244a4239 + version: 2.46.5 + sha256: 657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl name: h5py version: 3.16.0 @@ -2590,24 +2469,6 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: mypy - version: 2.3.1 - sha256: 8e036f06b41630f4c8a1d48f9ac6aa26acc65f8be089973f5519da643318f03f - requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl name: mypy-extensions version: 1.1.0 @@ -2618,36 +2479,104 @@ packages: version: 6.0.3 sha256: 9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl - name: charset-normalizer - version: 3.5.1 - sha256: c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b - requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/7a/bf/74b6785beac6488fd395e78796339bc197fbad6fd6103b41b15a4009dc4b/lxml-6.1.3-cp310-cp310-win_amd64.whl + name: lxml + version: 6.1.3 + sha256: 18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl name: tomli version: 2.4.1 sha256: 0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl - name: librt - version: 0.15.0 - sha256: 3ff5893a2c23d886aa9ce786de5ac6ddc74aeeaf90743682b74d920e117d2e28 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/83/76/68cf7ca0985fa41231c17f5515df4e16204649d9916c126f08c84dd64802/lxml-7.0.0b1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl + name: charset-normalizer + version: 3.5.2 + sha256: fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl + name: networkx + version: '3.7' + sha256: e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0 + requires_dist: + - asv>=0.6.5 ; extra == 'benchmarking' + - py-rattler>=0.21,<0.22 ; extra == 'benchmarking' + - virtualenv ; extra == 'benchmarking' + - numpy>=2.2 ; extra == 'default' + - scipy>=1.15 ; extra == 'default' + - matplotlib>=3.10 ; extra == 'default' + - pandas>=2.3 ; extra == 'default' + - pre-commit>=4.1 ; extra == 'developer' + - mypy>=1.15 ; extra == 'developer' + - sphinx>=8.0 ; extra == 'doc' + - pydata-sphinx-theme>=0.16 ; extra == 'doc' + - sphinx-gallery>=0.18 ; extra == 'doc' + - numpydoc>=1.8.0 ; extra == 'doc' + - pillow>=10 ; extra == 'doc' + - texext>=0.6.7 ; extra == 'doc' + - myst-nb>=1.1 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - osmnx>=2.0.0 ; extra == 'example' + - momepy>=0.7.2 ; extra == 'example' + - contextily>=1.6 ; extra == 'example' + - seaborn>=0.13 ; extra == 'example' + - cairocffi>=1.7 ; extra == 'example' + - igraph>=0.11 ; extra == 'example' + - scikit-learn>=1.6 ; extra == 'example' + - iplotx>=0.9.0 ; extra == 'example' + - hiveplotlib>=0.28 ; extra == 'example' + - lxml>=4.6 ; extra == 'extra' + - pygraphviz>=2.0 ; extra == 'extra' + - pydot>=3.0.1 ; extra == 'extra' + - sympy>=1.10 ; extra == 'extra' + - build>=0.10 ; extra == 'release' + - twine>=4.0 ; extra == 'release' + - wheel>=0.40 ; extra == 'release' + - changelist==0.5 ; extra == 'release' + - pytest>=7.2 ; extra == 'test' + - pytest-cov>=4.0 ; extra == 'test' + - pytest-xdist>=3.0 ; extra == 'test' + - pytest-mpl ; extra == 'test-extras' + - pytest-randomly ; extra == 'test-extras' + requires_python: '>=3.12,!=3.14.1' +- pypi: https://files.pythonhosted.org/packages/80/fb/1eabd2c0673283054468b1c6cb539aeb877636d6c84b280279f2d7a177a9/ast_serialize-0.12.1-cp39-abi3-macosx_10_12_x86_64.whl + name: ast-serialize + version: 0.12.1 + sha256: 98d91cd3a6cb76a39512ee090a539d1e3206b732ad8150eb38918cffa1ddf515 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/81/12/46ae8670c98a3cd0286ca5645c2f918f8f6be65edfed81b916010619f668/mypy-2.4.0-py3-none-any.whl + name: mypy + version: 2.4.0 + sha256: d01c5d26a352acc6d5cf3128225477e1e8465e8d3029d4c345807fbf7f3cf093 + requires_dist: + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.16.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.11.2,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/84/ef/398fcf9018f881ec9aeaafae1ddd6586dfb13314a35d35e899de373dcae0/lxml-6.1.3-cp314-cp314-macosx_10_15_x86_64.whl name: lxml - version: 7.0.0b1 - sha256: 74dad5165eff9f727571d75961f73a17112d389738d542c3f15b6473eed34852 + version: 6.1.3 + sha256: 4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d requires_dist: - cssselect>=0.7 ; extra == 'cssselect' - html5lib ; extra == 'html5' - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl - name: rpds-py - version: 2026.6.3 - sha256: 0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 - requires_python: '>=3.11' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl name: pillow version: 12.3.0 @@ -2679,6 +2608,11 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/86/14/5d4fb733c18a1d69e237c067b183842f3a7ea1c999a51ddc87093a281c88/ast_serialize-0.12.1-cp39-abi3-win_amd64.whl + name: ast-serialize + version: 0.12.1 + sha256: 3d6ed63d4fc1ec867b8cb522d58c36df0e8f05e487bea0ffd102043a37636d72 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: pyyaml version: 6.0.3 @@ -2692,24 +2626,76 @@ packages: - typing-extensions>=4.6.0 ; python_full_version < '3.13' - pytest>=6 ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl - name: mypy - version: 2.3.1 - sha256: 6ed5c7e3419083268e5c9258bd1c1ef91af44a9e89374dbcaf37b775716e72eb +- pypi: https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl + name: rpds-py + version: 2026.9.1 + sha256: c9d1aca01f49170fdcf5c92761b1fafe97f554b721ca4570c5949fff778f0d4b + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/8b/66/9b4f0ece6074db992125e83670f5f9b0e23ec2ee172a2315629facf6a158/silx-3.1.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: silx + version: 3.1.3 + sha256: 0598ad519129c9b75daf526f3b87ea03d2cd35166cab33b350239956cbd157dc requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' + - numpy + - packaging + - h5py>=3 + - fabio + - pydantic>=2 + - filelock + - pyopencl ; extra == 'opencl' + - mako ; extra == 'opencl' + - silx[opencl] ; extra == 'full-no-qt' + - qtconsole ; extra == 'full-no-qt' + - matplotlib>=3.6 ; extra == 'full-no-qt' + - pyopengl ; extra == 'full-no-qt' + - python-dateutil ; extra == 'full-no-qt' + - scipy ; extra == 'full-no-qt' + - pooch ; extra == 'full-no-qt' + - pillow ; extra == 'full-no-qt' + - pint ; extra == 'full-no-qt' + - hdf5plugin ; extra == 'full-no-qt' + - qtawesome ; extra == 'full-no-qt' + - silx[full-no-qt] ; extra == 'full' + - pyside6>=6.5 ; extra == 'full' + - h5pyd>=0.20.0 ; extra == 'h5pyd' + - silx[full] ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - pandoc ; extra == 'doc' + - silx[full,h5pyd] ; extra == 'test' + - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-xvfb ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - silx[doc,full,test] ; extra == 'dev' + - build ; extra == 'dev' + - wheel ; extra == 'dev' + - meson-python ; extra == 'dev' + - ninja ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' + - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' + - ruff ; extra == 'dev' + - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl + name: pydantic-core + version: 2.46.5 + sha256: c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/8f/26/8a90d2a8f2b2e471bb486b7aec117b8ae622715ed6c39853aec48ea20073/librt-0.16.0-cp314-cp314-macosx_11_0_arm64.whl + name: librt + version: 0.16.0 + sha256: 1bc17e54e5305f8d40b7ca203671ff5a9e59c1d0f8ea0f625dcca53a3984de11 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/8f/44/aa8bc0a660581663fb957d9005851d23736757cae3e58231a8a1030c9f9e/fabio-2026.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: fabio version: 2026.6.0 @@ -2730,16 +2716,6 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/92/d8/56af48cd6a2963db92f015a89e2c0a9f75f51dbd22d605ff689ce07395dc/lxml-7.0.0b1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: lxml - version: 7.0.0b1 - sha256: 1c5fde74b25c15aeabb7a6102777fb4e598897d5ea2d39c6baf97333192cfbfe - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/94/d4/23cdb18ad1d919ac59d1155698453f66c0a3719b9dc5862f3a3672cb1d08/fabio-2025.10.0-cp310-cp310-macosx_11_0_x86_64.whl name: fabio version: 2025.10.0 @@ -2753,72 +2729,45 @@ packages: - pyside6 ; extra == 'gui' - matplotlib ; extra == 'gui' - packaging ; extra == 'gui' - - pyside6 ; extra == 'all' - - matplotlib ; extra == 'all' - - packaging ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: librt - version: 0.15.0 - sha256: d4c7bacb70930f3d0a56f4ecf1be474a1f0d941b01dd73b756f3c256d42cb879 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/95/e7/daa2cf6bc551f9434b7e3d8ba3d747baa2a9d24dd5f6572c3742924431ad/pydantic-2.14.0b2-py3-none-any.whl - name: pydantic - version: 2.14.0b2 - sha256: 4556c932fb3dbb7e9ac773bee241b2eb7058a2f9ff1d850d45d7d11cb6e54b68 - requires_dist: - - annotated-types>=0.6.0 - - pydantic-core==2.49.0 - - typing-extensions>=4.16.0 - - typing-inspection>=0.4.4 - - email-validator>=2.0.0 ; extra == 'email' - - tzdata ; sys_platform == 'win32' and extra == 'timezone' + - pyside6 ; extra == 'all' + - matplotlib ; extra == 'all' + - packaging ; extra == 'all' requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl name: rpds-py version: 0.30.0 sha256: 1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl - name: mypy - version: 2.3.1 - sha256: 4956f34d145e145562a0a0bf367f642bbc85c04ec2baf47ae015947c3169a85d +- pypi: https://files.pythonhosted.org/packages/96/dd/c25a32f9f6039a96cfd52296a4630075868aa16e71858b3076699a059201/lxml-6.1.3-cp310-cp310-macosx_10_9_x86_64.whl + name: lxml + version: 6.1.3 + sha256: 05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9 requires_dist: - - typing-extensions>=4.6.0 ; python_full_version < '3.15' - - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - - mypy-extensions>=1.0.0 - - pathspec>=1.0.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 - - psutil>=4.0 ; extra == 'dmypy' - - setuptools>=50 ; extra == 'mypyc' - - lxml ; extra == 'reports' - - pip ; extra == 'install-types' - - orjson ; extra == 'faster-cache' - requires_python: '>=3.10' + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/98/77/46e87bcfc45d25ab4db7cfc9bb544bfa3ffd302289ed31ae93f5433eb899/charset_normalizer-3.5.2-cp310-cp310-macosx_10_9_universal2.whl + name: charset-normalizer + version: 3.5.2 + sha256: 195c26fb65950f8fce54e26349852b7bdd7c5f120aeefbcc440b8a20faaed4a3 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/99/29/cfb0df9448d4d4ad48c2de029ada9ebd71baa6da983a6c77ee6c6cd0fe82/ruff-0.16.10-py3-none-win_amd64.whl + name: ruff + version: 0.16.10 + sha256: 97f2015c92aa97105b0eab19eb5d224884399281cfc5da86a92db4ab5e7fb2ca + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl name: annotated-types version: 0.8.0 sha256: f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/99/da/27fbb6465bedc6283b27773402930164b1d1014601d9267dc41ebee25dff/pydantic_core-2.49.0-cp310-cp310-macosx_10_12_x86_64.whl - name: pydantic-core - version: 2.49.0 - sha256: 68c53d957497e4001e4104c5fb64e90239461b128de0d5151bb8bc8053d70b4a - requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl name: numpy version: 2.2.6 sha256: b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9a/7e/8f2ab68bddbe58a66fbbaad87beeae3e7d7edddb17263d1fc423936cf34d/ast_serialize-0.11.2-cp39-abi3-macosx_11_0_arm64.whl - name: ast-serialize - version: 0.11.2 - sha256: 1844ed9a487fb3de7325c52ddb33f2918b66b65cd54d3f8d83d23785ffe99fa4 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl name: pyyaml version: 6.0.3 @@ -2829,66 +2778,36 @@ packages: version: 2.5.3 sha256: 012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/9f/16/1a5a4a2657effe4806110f2b907313802f1367fcdbb29e8122766e407fab/ruff-0.16.10-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.16.10 + sha256: 3031a4a2e8e7b8a46f70be45f198c35a11ece509a94b80334d8d397a33c67550 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a1/ce/dbea34cd115ae9b8ef53816daa912563615adf4daed42531878a2fb29c77/lxml-6.1.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: lxml + version: 6.1.3 + sha256: f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl name: numpy version: 2.2.6 sha256: f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl + name: rpds-py + version: 2026.9.1 + sha256: 837c6b305e26fe0f75b15c92cf3b2ba29e0ae19dc40b1c557b026cb426347d0c + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl name: numpy version: 2.5.3 sha256: 2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10 requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/a6/8d/23468da87cf46643036e599687c3c8347d403be4674771706010306d77b7/networkx-3.7rc0-py3-none-any.whl - name: networkx - version: 3.7rc0 - sha256: 74c09b973a265f446c223b21e8129637acb67a2deeed7027cdcd31678d1e5ec9 - requires_dist: - - asv>=0.6.5 ; extra == 'benchmarking' - - py-rattler>=0.21,<0.22 ; extra == 'benchmarking' - - virtualenv ; extra == 'benchmarking' - - numpy>=2 ; extra == 'default' - - scipy>=1.13 ; extra == 'default' - - matplotlib>=3.9 ; extra == 'default' - - pandas>=2.3.0 ; extra == 'default' - - pre-commit>=4.1 ; extra == 'developer' - - mypy>=1.15 ; extra == 'developer' - - sphinx>=8.0 ; extra == 'doc' - - pydata-sphinx-theme>=0.16 ; extra == 'doc' - - sphinx-gallery>=0.18 ; extra == 'doc' - - numpydoc>=1.8.0 ; extra == 'doc' - - pillow>=10 ; extra == 'doc' - - texext>=0.6.7 ; extra == 'doc' - - myst-nb>=1.1 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - osmnx>=2.0.0 ; extra == 'example' - - momepy>=0.7.2 ; extra == 'example' - - contextily>=1.6 ; extra == 'example' - - seaborn>=0.13 ; extra == 'example' - - cairocffi>=1.7 ; extra == 'example' - - igraph>=0.11 ; extra == 'example' - - scikit-learn>=1.5 ; extra == 'example' - - iplotx>=0.9.0 ; extra == 'example' - - hiveplotlib>=0.28 ; extra == 'example' - - lxml>=4.6 ; extra == 'extra' - - pygraphviz>=2.0 ; extra == 'extra' - - pydot>=3.0.1 ; extra == 'extra' - - sympy>=1.10 ; extra == 'extra' - - build>=0.10 ; extra == 'release' - - twine>=4.0 ; extra == 'release' - - wheel>=0.40 ; extra == 'release' - - changelist==0.5 ; extra == 'release' - - pytest>=7.2 ; extra == 'test' - - pytest-cov>=4.0 ; extra == 'test' - - pytest-xdist>=3.0 ; extra == 'test' - - pytest-mpl ; extra == 'test-extras' - - pytest-randomly ; extra == 'test-extras' - requires_python: '>=3.12,!=3.14.1' -- pypi: https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl - name: librt - version: 0.15.0 - sha256: f5de7feedc56337a088eb15cd9fafa9938367362221d8cc62c642b7f94821993 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/a9/3e/b3a66a07d99b52cfaf9d64ccaf7667ce7d75ec733d6c0ab6755eaa3944a1/hdf5plugin-7.1.0-py3-none-win_amd64.whl name: hdf5plugin version: 7.1.0 @@ -2907,31 +2826,23 @@ packages: - mypy ; extra == 'dev' - ruff ; extra == 'dev' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b1/54/f67120006fc73a55b6d057d4662d061fbb4eceafce3047c76ca8b382eb11/ast_serialize-0.11.2-cp39-abi3-macosx_10_12_x86_64.whl - name: ast-serialize - version: 0.11.2 - sha256: daadf1c3e0224621607ffe16f1379e4bd372271ed2e1db8a67878f0bab3ef7e4 +- pypi: https://files.pythonhosted.org/packages/ae/ab/fb8b5178fdf7bf68efa61cbe892286bc9f73846f26147d4725fb89388475/charset_normalizer-3.5.2-cp310-cp310-win_amd64.whl + name: charset-normalizer + version: 3.5.2 + sha256: 1461ac396c4fdb983a675f20aa555624f0ee18ac83d832b9244ffff3d8055275 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.46.5 + sha256: 1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: numpy version: 2.2.6 sha256: fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b6/12/dc9d37010e7141ce929f1faf0d1cbebed4c0cb3e616fbed3af3f8e4e1391/lxml-7.0.0b1-cp314-cp314-macosx_10_15_universal2.whl - name: lxml - version: 7.0.0b1 - sha256: b92ee515c1af2bdd151187d2a93e128f4d388227e0a1e3d403b7e5d575095cd5 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: 931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl name: networkx version: 3.4.2 @@ -2967,34 +2878,36 @@ packages: - pytest>=7.2 ; extra == 'test' - pytest-cov>=4.0 ; extra == 'test' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl - name: rpds-py - version: 2026.6.3 - sha256: d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - name: pyyaml - version: 6.0.3 - sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/bc/1c/26e16977e25ef2494a74f8ffc872a76ec2c3aa43c3156057cbdf88f352c5/mypy-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: mypy - version: 2.3.1 - sha256: 192abaedf75da1bc0b1cef104927e70ec49c1ef0031cc4825c7ee10a438ed24d + version: 2.4.0 + sha256: 20e9a5cd875837520c43db98dea0b6d0c2197833d95c30127d8f570fb9b1f00b requires_dist: - typing-extensions>=4.6.0 ; python_full_version < '3.15' - typing-extensions>=4.14.0 ; python_full_version >= '3.15' - mypy-extensions>=1.0.0 - pathspec>=1.0.0 - tomli>=1.1.0 ; python_full_version < '3.11' - - librt>=0.13.0 ; platform_python_implementation != 'PyPy' - - ast-serialize>=0.6.0,<1.0.0 + - librt>=0.16.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.11.2,<1.0.0 - psutil>=4.0 ; extra == 'dmypy' - setuptools>=50 ; extra == 'mypyc' - lxml ; extra == 'reports' - pip ; extra == 'install-types' - orjson ; extra == 'faster-cache' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl + name: pyyaml + version: 6.0.3 + sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/bd/d0/c787604c71c2bdcda1a5656942fc822cd0f9cd879b9484bb84fc42172703/pydantic_core-2.46.5-cp310-cp310-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.46.5 + sha256: ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/c0/32/89b00b99a78026a37daab12ecb9b52853182de7854e325cd2ff80b7a6e66/ewoksutils-2.0.0rc2-py3-none-any.whl name: ewoksutils version: 2.0.0rc2 @@ -3011,6 +2924,11 @@ packages: - pydata-sphinx-theme ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c0/60/58961e7fd129e226ce36788fe328d20034f3105f5d3380df690050517737/ast_serialize-0.12.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ast-serialize + version: 0.12.1 + sha256: 50a9eaedf1db4857dad7cc47dd757ed70bfcc40b89d44d516c4a2f0d5033bd76 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/c0/d1/5ddb92494517fa5453c46872a87fd0d0e4a497543b353ce0aad6466f406a/fabio-2025.10.0-cp310-cp310-macosx_11_0_arm64.whl name: fabio version: 2025.10.0 @@ -3028,6 +2946,16 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c2/98/769712f356a1e897df3581bb0c3100375d054a000de26099360ea65b5111/librt-0.16.0-cp314-cp314-win_amd64.whl + name: librt + version: 0.16.0 + sha256: 3f0b8114c44b2ac06ff5dacd08e07e8e807ff4f46083f2a1602685122559be41 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c4/9f/9f52d2886d52645987d603425482c63c5045a3005db1354a7097e5ed1ae9/charset_normalizer-3.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.5.2 + sha256: 8a893cc101149f80a653f82062ebc95b34525a2614382e1da5458fe7c6997249 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl name: pillow version: 12.3.0 @@ -3066,26 +2994,21 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - name: iniconfig - version: 2.3.0 - sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 - requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/cb/98/a54de85876a8b2612bfa0d84c7b9abfb39c6a3354aee7800b09c1649b9e3/ruff-0.16.10-py3-none-macosx_10_12_x86_64.whl + name: ruff + version: 0.16.10 + sha256: e748ff95c934c4e978783b8e687bc174e7bd84e8ad24e3243e1ecfcda5e0282d + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl + name: charset-normalizer + version: 3.5.2 + sha256: e4e81e09c1578b8df602e3db08b0b3ea0a6947ad612f52bf8dc5ea8d47691f0c + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl name: colorama version: 0.4.6 sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- pypi: https://files.pythonhosted.org/packages/d2/21/83fffb77864408b8bf0fe1ca603926401d6f8775a8e150b39aacc9958f8a/charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl - name: charset-normalizer - version: 3.5.1 - sha256: be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl name: backports-strenum version: 1.3.1 @@ -3111,6 +3034,11 @@ packages: - matplotlib ; extra == 'all' - packaging ; extra == 'all' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl + name: filelock + version: 4.0.12 + sha256: 5f17ee83ecee8a6f3e389c75822fb70a1c2f0506b99438a6dffa1d56793588c8 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/db/cb/dacbc268cb68d0428ea2cbd85266195a9ab3e677449589ddae59bd7542ac/reportlab-5.0.1-py3-none-any.whl name: reportlab version: 5.0.1 @@ -3124,50 +3052,104 @@ packages: - rlbidi ; extra == 'bidi' - uharfbuzz ; extra == 'shaping' requires_python: '>=3.9,<4' -- pypi: https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.5.1 - sha256: 15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/e7/50/bb5cde8460d5ac1650fac61d3b58e59546e712e5c5683cf6859a823b0534/lxml-7.0.0b1-cp314-cp314-win_amd64.whl - name: lxml - version: 7.0.0b1 - sha256: 6da412397f8e3d1dad44bedfc4ce0f034574b1db7939572f1c8704b9ffea89cb +- pypi: https://files.pythonhosted.org/packages/e0/66/924be0b653372ed31ad5c48e26044cc00840e591943a56e61621cf05b60e/mypy-2.4.0-cp314-cp314-macosx_11_0_arm64.whl + name: mypy + version: 2.4.0 + sha256: 058165f564ccf559c68c70fec2091fca5891110480210c22594635e3f6683437 requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl - name: charset-normalizer - version: 3.5.1 - sha256: c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c + - typing-extensions>=4.6.0 ; python_full_version < '3.15' + - typing-extensions>=4.14.0 ; python_full_version >= '3.15' + - mypy-extensions>=1.0.0 + - pathspec>=1.0.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - librt>=0.16.0 ; platform_python_implementation != 'PyPy' + - ast-serialize>=0.11.2,<1.0.0 + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e2/8a/7e0d810251776dfa431bc1695c095000d1978603e4b838cc3b39eb92bf80/silx-3.1.3-cp314-cp314-macosx_10_15_x86_64.whl + name: silx + version: 3.1.3 + sha256: 635dd6f60230e29728835912616d9e8f5bd386266a1386607aab8fbd9ac2988c + requires_dist: + - numpy + - packaging + - h5py>=3 + - fabio + - pydantic>=2 + - filelock + - pyopencl ; extra == 'opencl' + - mako ; extra == 'opencl' + - silx[opencl] ; extra == 'full-no-qt' + - qtconsole ; extra == 'full-no-qt' + - matplotlib>=3.6 ; extra == 'full-no-qt' + - pyopengl ; extra == 'full-no-qt' + - python-dateutil ; extra == 'full-no-qt' + - scipy ; extra == 'full-no-qt' + - pooch ; extra == 'full-no-qt' + - pillow ; extra == 'full-no-qt' + - pint ; extra == 'full-no-qt' + - hdf5plugin ; extra == 'full-no-qt' + - qtawesome ; extra == 'full-no-qt' + - silx[full-no-qt] ; extra == 'full' + - pyside6>=6.5 ; extra == 'full' + - h5pyd>=0.20.0 ; extra == 'h5pyd' + - silx[full] ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - pandoc ; extra == 'doc' + - silx[full,h5pyd] ; extra == 'test' + - bitshuffle ; extra == 'test' + - imageio[tifffile] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-xvfb ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - silx[doc,full,test] ; extra == 'dev' + - build ; extra == 'dev' + - wheel ; extra == 'dev' + - meson-python ; extra == 'dev' + - ninja ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' + - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' + - ruff ; extra == 'dev' + - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e4/03/17234145f302a645a123e8c3bb2411ecf4669fbc350de3b0d803230a1729/ruff-0.16.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.16.10 + sha256: f33f43a864a8483eebd160e713336c8bab02c934feaff0a33cf5ccb41546d09a requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ea/a6/597c0c0e949000c4e107640b015458f2896903e0b42b00aa0f27a97f479b/lxml-7.0.0b1-cp314-cp314-macosx_10_15_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e9/44/27e3cee3dcdb3b7bc09727b642bdbfcd098490ea77df04611db9060d7722/lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl name: lxml - version: 7.0.0b1 - sha256: 4534471a974cdabfbc5b0ac8d7794b0dd8c543e80b694c749cf453dfc3c9f24d + version: 6.1.3 + sha256: a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0 requires_dist: - cssselect>=0.7 ; extra == 'cssselect' - html5lib ; extra == 'html5' - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/eb/60/89b710602f263db5efcf4d9957e0fe8a2389339596e906190673a379ea56/pydantic_core-2.49.0-cp310-cp310-win_amd64.whl - name: pydantic-core - version: 2.49.0 - sha256: 592827666d336312d5fd3976b42be19501c51db69c420660e283b5d31aeb9733 - requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ed/7d/fb75c77d6bddc8a32eddcc0b8385de1202418cd5a5f4f4da69fc66ada8d1/pydantic_core-2.49.0-cp314-cp314-macosx_10_12_x86_64.whl - name: pydantic-core - version: 2.49.0 - sha256: 96a548e9243889fec7622abb7e10d362a33f755ffff5092874f3dc0e8e05cc10 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl + name: pydantic + version: 2.13.5 + sha256: 346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' + - annotated-types>=0.6.0 + - pydantic-core==2.46.5 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl name: h5py version: 3.16.0 @@ -3215,6 +3197,13 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f2/94/205ed9d7ddaf44acd489889708ea124a3f41bdb42c141c8684d528ad0e7a/pydantic_core-2.46.5-cp310-cp310-win_amd64.whl + name: pydantic-core + version: 2.46.5 + sha256: 1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/f3/af/8244d480b2096e8ce79e22c1d1472bf43ad10fb1e55a044334b0b2a69456/hdf5plugin-7.1.0-py3-none-macosx_11_0_arm64.whl name: hdf5plugin version: 7.1.0 @@ -3238,10 +3227,17 @@ packages: version: 6.0.3 sha256: 214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f6/6c/0cd8b1a0e0c74d55a6adcca6fbba5bde42ad97d6c4eb1d974c27bc33f790/silx-3.1.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl + name: pydantic-core + version: 2.46.5 + sha256: fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f8/f3/5e1bd1c3cde3a3a2c03c309016cad42ae037b3b2a1ba3fb6cb8411bc2341/silx-3.1.3-cp310-cp310-win_amd64.whl name: silx - version: 3.1.2 - sha256: 181b2bce7d87317545acc3db2e12bc16136aba505027936da9c1414a172d894c + version: 3.1.3 + sha256: f051c6c437eddb625b896326522a8e7c3292ac2528b6c558271c4a1c06d4ae26 requires_dist: - numpy - packaging @@ -3286,29 +3282,32 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f7/dc/263439af9455b0f6843f31ab5426fb5f6c52d1597fe11409b93897513c08/pydantic_core-2.49.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.49.0 - sha256: 82f8bd51e8d3baebf622b52469bdc316c6c1c6e48102d33c76611f37f5924582 - requires_dist: - - typing-extensions>=4.16.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f9/92/28311d9350451aab67eff29763638a37a64a22ad572f4df3f9654554fb60/pydantic_core-2.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.49.0 - sha256: 2005d526103ea0057f5e51d0b9c469234e890d8d8a76c4ec474696e4cab2449a +- pypi: https://files.pythonhosted.org/packages/fd/15/a70400eeea394dbcf34f926713499c3f7334b2ee0ec3639b794491ffc9c0/fabio-2025.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: fabio + version: 2025.10.0 + sha256: 5d5b324eb7eb427350cf6a639071b04858fdbedb6e5a61a8d69ef9aea780abbf requires_dist: - - typing-extensions>=4.16.0 + - numpy + - h5py + - hdf5plugin + - lxml + - pillow + - pyside6 ; extra == 'gui' + - matplotlib ; extra == 'gui' + - packaging ; extra == 'gui' + - pyside6 ; extra == 'all' + - matplotlib ; extra == 'all' + - packaging ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f9/a9/f9cf335fe5f0c70a2f7122af6dd4d2c7ac9b380484a8687f98cead4183b4/silx-3.1.2-cp310-cp310-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/fe/f6/f285f5240010944a23c91b025fb033bff5a6b0bc4ba38da7ee25efdbf1ae/silx-3.1.3-cp310-cp310-macosx_11_0_arm64.whl name: silx - version: 3.1.2 - sha256: 314dedf8ab8eb2b1554d765ed8a16da533bd4467bc78a45ff1c05ff5bd65f961 + version: 3.1.3 + sha256: d73da48ef007892ae537ac9acd1ac75d053697f291d7d8767ab22f3ad60a0366 requires_dist: - numpy - packaging @@ -3353,30 +3352,8 @@ packages: - wheel ; extra == 'dev' - meson-python ; extra == 'dev' - ninja ; extra == 'dev' - - cython>=3.1,<3.3 ; extra == 'dev' + - cython>=3.1 ; extra == 'dev' - tomli>=1.0.0 ; python_full_version < '3.11' and extra == 'dev' - ruff ; extra == 'dev' - pyinstaller>=6.0.0 ; sys_platform == 'win32' and extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fd/15/a70400eeea394dbcf34f926713499c3f7334b2ee0ec3639b794491ffc9c0/fabio-2025.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: fabio - version: 2025.10.0 - sha256: 5d5b324eb7eb427350cf6a639071b04858fdbedb6e5a61a8d69ef9aea780abbf - requires_dist: - - numpy - - h5py - - hdf5plugin - - lxml - - pillow - - pyside6 ; extra == 'gui' - - matplotlib ; extra == 'gui' - - packaging ; extra == 'gui' - - pyside6 ; extra == 'all' - - matplotlib ; extra == 'all' - - packaging ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl - name: ruff - version: 0.16.8 - sha256: 7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170 - requires_python: '>=3.7' diff --git a/pyproject.toml b/pyproject.toml index 58ae14d..a5446e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,9 +105,12 @@ platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [tool.pixi.pypi-dependencies] ewoksdraw = { path = ".", editable = true } +# Opt in to prereleases only for the required Ewoks dependencies. +ewokscore = "==5.1.0rc4" +ewoksutils = ">=2.0.0rc2" [tool.pixi.pypi-options] -prerelease-mode = "allow" +prerelease-mode = "explicit" [tool.pixi.feature.pylow.dependencies] python = "3.10.*" @@ -119,7 +122,7 @@ test-lowest = ["test", "pylow"] [tool.pixi.tasks] test = "pytest" test-lowest = "pixi run -e test-lowest test" -lint = "ruff check --fix . && ruff format ." +lint = "ruff check --fix . && ruff format . && cargo fmt --manifest-path rust/Cargo.toml" typecheck = "mypy src" full-ci = "pixi run lint && pixi run typecheck && pixi run test && pixi run test-lowest" graph-to-svg = "python examples/graph_to_svg.py" diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 2a8ef79..86658cc 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -2,7 +2,6 @@ use org_eclipse_elk_graph_json::org::eclipse::elk::graph::json::layout_api; use pyo3::exceptions::PyRuntimeError; use pyo3::prelude::*; - #[pyfunction] #[pyo3(signature = (graph_json, options_json = "{}"))] fn layout_json(graph_json: &str, options_json: &str) -> PyResult { diff --git a/src/ewoksdraw/py.typed b/src/ewoksdraw/py.typed new file mode 100644 index 0000000..e69de29 From 0045765766c174cefff8ac2dd8f2553755fad65e Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Wed, 7 Oct 2026 14:37:07 +0200 Subject: [PATCH 10/12] Issue #34 - renamed port_id --- src/ewoksdraw/layout/elk_converter.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/ewoksdraw/layout/elk_converter.py b/src/ewoksdraw/layout/elk_converter.py index 7ad4d59..088b998 100644 --- a/src/ewoksdraw/layout/elk_converter.py +++ b/src/ewoksdraw/layout/elk_converter.py @@ -131,7 +131,7 @@ def convert_ewoks_to_elk_graph( children: list[ElkChildBeforeLayout] = [] used_ids: set[str] = set() - port_ids: set[str] = set() + declared_port_ids: set[str] = set() for task_id in ewoks_graph.graph.nodes: ports = _convert_io_positions_to_elk_ports( task_id, @@ -151,7 +151,7 @@ def convert_ewoks_to_elk_graph( ) used_ids.add(task_id) used_ids.update(port["id"] for port in ports) - port_ids.update(port["id"] for port in ports) + declared_port_ids.update(port["id"] for port in ports) root_id = _available_elk_id("__ewoksdraw_root__", used_ids) used_ids.add(root_id) @@ -189,15 +189,17 @@ def convert_ewoks_to_elk_graph( { "id": edge_id, "sources": [ - _port_or_task_id( - source, f"{source}.output.{source_output}", port_ids + _resolve_edge_endpoint_id( + source, + f"{source}.output.{source_output}", + declared_port_ids, ) ], "targets": [ - _port_or_task_id( + _resolve_edge_endpoint_id( target, f"{target}.input.{mapping['target_input']}", - port_ids, + declared_port_ids, ) ], } @@ -254,13 +256,15 @@ def _convert_io_positions_to_elk_ports( return ports -def _port_or_task_id(task_id: str, port_id: str, port_ids: set[str]) -> str: - """Return the port id, or the task id when the task does not declare that port. +def _resolve_edge_endpoint_id( + task_id: str, port_id: str, declared_port_ids: set[str] +) -> str: + """Use the requested port when declared; otherwise connect to the task's box. This happens for tasks that cannot be imported: their ports are unknown, but links from or to them must still be routed (to the task box). """ - return port_id if port_id in port_ids else task_id + return port_id if port_id in declared_port_ids else task_id def _available_elk_id(preferred_id: str, used_ids: set[str]) -> str: From 4a34c58b6520e179410682fa00aabe1540d18670 Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Wed, 7 Oct 2026 14:53:01 +0200 Subject: [PATCH 11/12] Issue #34 - Handling routing option --- src/ewoksdraw/layout/elk_backend.py | 15 ++++++++++++++- src/ewoksdraw/tests/test_elk_rs_binding.py | 19 +++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/ewoksdraw/layout/elk_backend.py b/src/ewoksdraw/layout/elk_backend.py index a305e83..dc3ad5d 100644 --- a/src/ewoksdraw/layout/elk_backend.py +++ b/src/ewoksdraw/layout/elk_backend.py @@ -2,6 +2,7 @@ from typing import cast from ewoksdraw import _elk_rs +from ewoksdraw.config.constants import ELK_LAYOUT_OPTIONS from .elk_converter import ElkGraph from .elk_converter import ElkGraphBeforeLayout @@ -12,7 +13,19 @@ class ElkLayoutError(Exception): def layout(graph: ElkGraphBeforeLayout) -> ElkGraph: - """Lay out an ELK graph. Layout options are read from ``graph["layoutOptions"]``.""" + """Lay out an ELK graph for SVG rendering using orthogonal edge routing. + + Layout options are read from ``graph["layoutOptions"]``. + Unsupported edge routing raises ``ValueError`` before layout. + """ + routing = graph["layoutOptions"].get( + "org.eclipse.elk.edgeRouting", ELK_LAYOUT_OPTIONS["org.eclipse.elk.edgeRouting"] + ) + if routing != "ORTHOGONAL": + raise ValueError( + "SVG rendering currently supports only ORTHOGONAL edge routing." + ) + try: result = _elk_rs.layout_json(json.dumps(graph)) except RuntimeError as e: diff --git a/src/ewoksdraw/tests/test_elk_rs_binding.py b/src/ewoksdraw/tests/test_elk_rs_binding.py index 4ad30e7..38c9eec 100644 --- a/src/ewoksdraw/tests/test_elk_rs_binding.py +++ b/src/ewoksdraw/tests/test_elk_rs_binding.py @@ -233,15 +233,10 @@ def test_back_edges_route_around_nodes() -> None: assert len(back_sections[0]["bendPoints"]) >= 2 -def test_splines_are_not_orthogonal_polylines() -> None: - """Spline routing yields diagonal segments, which the SVG renderer cannot draw.""" - result = layout(_graph(["a", "b", "c"], [("a", "b"), ("a", "c")], "SPLINES")) - - diagonals = 0 - for edge in result["edges"]: - section = edge["sections"][0] - points = [section["startPoint"], *section["bendPoints"], section["endPoint"]] - diagonals += sum( - p["x"] != q["x"] and p["y"] != q["y"] for p, q in zip(points, points[1:]) - ) - assert diagonals > 0 +@pytest.mark.parametrize("routing", ["SPLINES", "POLYLINE"]) +def test_unsupported_edge_routing_raises(routing: str) -> None: + with pytest.raises( + ValueError, + match="SVG rendering currently supports only ORTHOGONAL edge routing", + ): + layout(_graph(["a", "b"], [("a", "b")], routing)) From d8acc0b6313ce5fc34cbc1a603b88518df20705e Mon Sep 17 00:00:00 2001 From: LudoBroche Date: Thu, 8 Oct 2026 11:17:12 +0200 Subject: [PATCH 12/12] Issue #34 - rebase --- src/ewoksdraw/layout/elk_converter.py | 51 +-------------------------- src/ewoksdraw/tests/test_utils.py | 4 +-- 2 files changed, 3 insertions(+), 52 deletions(-) diff --git a/src/ewoksdraw/layout/elk_converter.py b/src/ewoksdraw/layout/elk_converter.py index 088b998..82c0484 100644 --- a/src/ewoksdraw/layout/elk_converter.py +++ b/src/ewoksdraw/layout/elk_converter.py @@ -1,7 +1,5 @@ from typing import Any -from ..utils import get_valid_data_mappings - try: from typing import NotRequired except ImportError: @@ -21,6 +19,7 @@ from ..svg.svg_task_group import TaskSizes from ..utils import get_edge_source_id from ..utils import get_edge_target_id +from ..utils import get_valid_data_mappings class ElkPort(TypedDict): @@ -131,7 +130,6 @@ def convert_ewoks_to_elk_graph( children: list[ElkChildBeforeLayout] = [] used_ids: set[str] = set() - declared_port_ids: set[str] = set() for task_id in ewoks_graph.graph.nodes: ports = _convert_io_positions_to_elk_ports( task_id, @@ -151,7 +149,6 @@ def convert_ewoks_to_elk_graph( ) used_ids.add(task_id) used_ids.update(port["id"] for port in ports) - declared_port_ids.update(port["id"] for port in ports) root_id = _available_elk_id("__ewoksdraw_root__", used_ids) used_ids.add(root_id) @@ -170,41 +167,6 @@ def convert_ewoks_to_elk_graph( } ) used_ids.add(edge_id) - for mapping in link_attrs.get("data_mapping", []): - source_output = mapping.get("source_output") - if source_output is None: - warnings.warn( - f"Data mapping on Ewoks link {source!r} -> {target!r} has no " - "'source_output', which is not yet supported.", - UserWarning, - stacklevel=2, - ) - continue - - edge_id = _available_elk_id( - f"edge_{len(edges)}_{source}_{target}", used_ids - ) - - edges.append( - { - "id": edge_id, - "sources": [ - _resolve_edge_endpoint_id( - source, - f"{source}.output.{source_output}", - declared_port_ids, - ) - ], - "targets": [ - _resolve_edge_endpoint_id( - target, - f"{target}.input.{mapping['target_input']}", - declared_port_ids, - ) - ], - } - ) - used_ids.add(edge_id) return { "id": root_id, @@ -256,17 +218,6 @@ def _convert_io_positions_to_elk_ports( return ports -def _resolve_edge_endpoint_id( - task_id: str, port_id: str, declared_port_ids: set[str] -) -> str: - """Use the requested port when declared; otherwise connect to the task's box. - - This happens for tasks that cannot be imported: their ports are unknown, but - links from or to them must still be routed (to the task box). - """ - return port_id if port_id in declared_port_ids else task_id - - def _available_elk_id(preferred_id: str, used_ids: set[str]) -> str: element_id = preferred_id index = 1 diff --git a/src/ewoksdraw/tests/test_utils.py b/src/ewoksdraw/tests/test_utils.py index d7334b5..662a949 100644 --- a/src/ewoksdraw/tests/test_utils.py +++ b/src/ewoksdraw/tests/test_utils.py @@ -4,7 +4,7 @@ from ..utils import get_task_id_from_target_id -def test_edge_source_task_id_roundtrip(): +def test_edge_source_task_id_roundtrip() -> None: task_id = "pipeline.output.normalize" output_name = "value" @@ -12,7 +12,7 @@ def test_edge_source_task_id_roundtrip(): assert get_task_id_from_source_id(source_id) == task_id -def test_edge_target_task_id_roundtrip(): +def test_edge_target_task_id_roundtrip() -> None: task_id = "pipeline.input.normalize" output_name = "value"