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
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
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
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)
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
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
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