Ejemplo n.º 1
0
def _samples_generator(
        sample_iterator: JavaObject, vertices_unwrapped: JavaList,
        live_plot: bool, refresh_every: int, ax: Any, all_scalar: bool,
        id_to_label: Dict[Tuple[int, ...], str]) -> sample_generator_types:
    traces = []
    x0 = 0
    while (True):
        network_sample = sample_iterator.next()

        if all_scalar:
            sample: sample_generator_dict_type = {
                id_to_label[Vertex._get_python_id(vertex_unwrapped)]:
                Tensor._to_ndarray(
                    network_sample.get(vertex_unwrapped)).item()
                for vertex_unwrapped in vertices_unwrapped
            }
        else:
            sample = __create_multi_indexed_samples_generated(
                vertices_unwrapped, network_sample, id_to_label)

        if live_plot:
            traces.append(sample)
            if len(traces) % refresh_every == 0:
                joined_trace: sample_types = {
                    k: [t[k] for t in traces]
                    for k in sample.keys()
                }
                if ax is None:
                    ax = traceplot(joined_trace, x0=x0)
                else:
                    traceplot(joined_trace, ax=ax, x0=x0)
                x0 += refresh_every
                traces = []

        yield sample
Ejemplo n.º 2
0
def _samples_generator(sample_iterator: JavaObject,
                       vertices_unwrapped: JavaList) -> sample_generator_types:
    while (True):
        network_sample = sample_iterator.next()
        sample = {
            Vertex._get_python_id(vertex_unwrapped):
            Tensor._to_ndarray(network_sample.get(vertex_unwrapped))
            for vertex_unwrapped in vertices_unwrapped
        }
        yield sample
Ejemplo n.º 3
0
def __create_single_indexed_samples(
        network_samples: JavaObject, vertices_unwrapped: JavaList,
        id_to_label: Dict[Tuple[int, ...], str]) -> sample_types:
    vertex_samples: sample_types = {}
    for vertex_unwrapped in vertices_unwrapped:
        vertex_label = id_to_label[Vertex._get_python_id(vertex_unwrapped)]
        samples_for_vertex = __get_vertex_samples(network_samples,
                                                  vertex_unwrapped)
        vertex_samples[vertex_label] = samples_for_vertex.tolist()
    return vertex_samples
Ejemplo n.º 4
0
def test_java_collections_to_generator() -> None:
    gaussian = Gaussian(0., 1.)

    java_collections = gaussian.unwrap().getConnectedGraph()
    python_list = list(Vertex._to_generator(java_collections))

    java_vertex_ids = [
        Vertex._get_python_id(java_vertex) for java_vertex in java_collections
    ]

    assert java_collections.size() == len(python_list)
    assert all(
        type(element) == Double and element.get_id() in java_vertex_ids
        for element in python_list)
Ejemplo n.º 5
0
def __create_multi_indexed_samples_generated(
        vertices_unwrapped: JavaList, network_samples: JavaObject,
        id_to_label: Dict[Tuple[int, ...], str]) -> sample_generator_dict_type:
    vertex_samples_multi: Dict = {}
    for vertex in vertices_unwrapped:
        vertex_label = id_to_label[Vertex._get_python_id(vertex)]
        vertex_samples_multi[vertex_label] = defaultdict(list)
        sample = Tensor._to_ndarray(network_samples.get(vertex))
        __add_sample_to_dict(sample, vertex_samples_multi[vertex_label])

    tuple_hierarchy: Dict = {
        (vertex_label, tensor_index): values
        for vertex_label, tensor_index in vertex_samples_multi.items()
        for tensor_index, values in tensor_index.items()
    }

    return tuple_hierarchy
Ejemplo n.º 6
0
def __create_multi_indexed_samples(
        vertices_unwrapped: JavaList, network_samples: JavaObject,
        id_to_label: Dict[Tuple[int, ...], str]) -> sample_types:
    vertex_samples_multi: Dict = {}
    for vertex in vertices_unwrapped:
        vertex_label = id_to_label[Vertex._get_python_id(vertex)]
        vertex_samples_multi[vertex_label] = defaultdict(list)
        samples_for_vertex = __get_vertex_samples(network_samples, vertex)
        for sample in samples_for_vertex:
            __add_sample_to_dict(sample, vertex_samples_multi[vertex_label])

    tuple_hierarchy: Dict = {
        (vertex_label, shape_index): values
        for vertex_label, samples in vertex_samples_multi.items()
        for shape_index, values in samples.items()
    }

    return tuple_hierarchy
Ejemplo n.º 7
0
def sample(net: BayesNet,
           sample_from: Iterable[Vertex],
           algo: str = 'metropolis',
           draws: int = 500,
           drop: int = 0,
           down_sample_interval: int = 1) -> sample_types:

    vertices_unwrapped = k.to_java_object_list(sample_from)

    network_samples = algorithms[algo].withDefaultConfig().getPosteriorSamples(
        net.unwrap(), vertices_unwrapped,
        draws).drop(drop).downSample(down_sample_interval)
    vertex_samples = {
        Vertex._get_python_id(vertex_unwrapped): list(
            map(Tensor._to_ndarray,
                network_samples.get(vertex_unwrapped).asList()))
        for vertex_unwrapped in vertices_unwrapped
    }

    return vertex_samples