


from collections.abc import Callable

import numpy as np




def 	lowerCAmelCase_					(						__UpperCAmelCase:    Callable	,     __UpperCAmelCase:    float	,     __UpperCAmelCase:    float	,     __UpperCAmelCase:    float	,     __UpperCAmelCase:    float   )   ->			np.array:
    UpperCamelCase__							:       Any      =   int(np.ceil((x_end - xa) / step_size   )   )
    UpperCamelCase__							:       Optional[int]      =   np.zeros((n + 1,)   )
    UpperCamelCase__							:       Union[str, Any]      =   ya
    UpperCamelCase__							:       List[str]      =   xa

    for k in range(__UpperCAmelCase   ):
        UpperCamelCase__							:       List[str]      =   y[k] + step_size * ode_func(__UpperCAmelCase	,     y[k]   )
        UpperCamelCase__							:       List[str]      =   y[k] + (
            (step_size / 2) * (ode_func(__UpperCAmelCase	,     y[k]   ) + ode_func(x + step_size	,     __UpperCAmelCase   ))
        )
        x += step_size

    return y


if __name__ == "__main__":
  import doctest

  doctest.testmod()








def 	lowerCAmelCase_					(						__UpperCAmelCase:    dict   )   ->			set:
    UpperCamelCase__							:       int      =   set()
    # edges = list of graph's edges
    UpperCamelCase__							:       str      =   get_edges(__UpperCAmelCase   )

    # While there are still elements in edges list, take an arbitrary edge
    # (from_node, to_node) and add his extremity to chosen_vertices and then
    # remove all arcs adjacent to the from_node and to_node
    while edges:
        UpperCamelCase__     ,UpperCamelCase__							:       List[Any]      =   edges.pop()
        chosen_vertices.add(__UpperCAmelCase   )
        chosen_vertices.add(__UpperCAmelCase   )
        for edge in edges.copy():
            if from_node in edge or to_node in edge:
                edges.discard(__UpperCAmelCase   )
    return chosen_vertices




def 	lowerCAmelCase_					(						__UpperCAmelCase:    dict   )   ->			set:
    UpperCamelCase__							:       Optional[int]      =   set()
    for from_node, to_nodes in graph.items():
        for to_node in to_nodes:
            edges.add((from_node, to_node)   )
    return edges


if __name__ == "__main__":
  import doctest

  doctest.testmod()

  # graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}
  # print(f"Matching vertex cover:\n{matching_min_vertex_cover(graph)}")

