Source code for schedula.utils.utl
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# Copyright 2015-2024, Vincenzo Arcidiacono;
# Licensed under the EUPL (the 'Licence');
# You may not use this work except in compliance with the Licence.
# You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
"""
It provides some utility functions.
"""
[docs]
def dict_diff(adict: dict, excluded: set) -> dict:
if excluded:
return {k: v for k, v in adict.items() if k not in excluded}
return adict.copy()
[docs]
def select_diff(adict: dict, excluded: set, key: str) -> dict:
if excluded:
return {k: v[key] for k, v in adict.items() if k not in excluded}
return {k: v[key] for k, v in adict.items()}
[docs]
def get_unused_node_id(graph, initial_guess='unknown', _format='{}<%d>'):
"""
Finds an unused node id in `graph`.
:param graph:
A directed graph.
:type graph: schedula.utils.graph.DiGraph
:param initial_guess:
Initial node id guess.
:type initial_guess: str, optional
:param _format:
Format to generate the new node id if the given is already used.
:type _format: str, optional
:return:
An unused node id.
:rtype: str
"""
nodes = graph.nodes # Namespace shortcut for speed.
node_id = initial_guess # Initial guess.
if node_id in nodes:
n = 0 # Counter.
id_fmt = _format.format(node_id.replace('%', '%%')) # Node id format.
node_id = id_fmt % n # Guess.
while node_id in nodes: # Check if node id is used.
n += 1
node_id = id_fmt % n
return node_id # Returns an unused node id.