Source code for alts.modules.queried_data_pool
#Version 1.1.1 conform as of 15.04.2025
"""
| *alts.modules.queried_data_pool*
| :doc:`Core Module </core/data/queried_data_pool>`
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from random import choice
import numpy as np
from alts.core.data.constrains import QueryConstrain, ResultConstrain
from alts.core.data.queried_data_pool import QueriedDataPool
if TYPE_CHECKING:
from typing import Dict
[docs]
class FlatQueriedDataPool(QueriedDataPool):
"""
FlatQueriedDataPool()
| **Description**
| This queryable data pool returns a random result matching the query.
"""
def __init__(self):
"""
__init__(self) -> None
| **Description**
| Initializes empty lists and dicts.
"""
super().init(FlatQueriedDataPool)
self.query_index: Dict = {}
[docs]
def query(self, queries):
"""
query(self, queries) -> data_points
| **Description**
| Returns a list containing a random associated result for each query in queries.
:param queries: Requested queries
:type queries: `NDArray <https://numpy.org/doc/stable/reference/arrays.ndarray.html>`_
:return: The tuple of queries and their associated results
:rtype: Tuple[`NDArray <https://numpy.org/doc/stable/reference/arrays.ndarray.html>`_,`NDArray <https://numpy.org/doc/stable/reference/arrays.ndarray.html>`_]
"""
result_list = []
for query in queries:
result_candidate = self.query_index.get(tuple(query), [])
result = choice(result_candidate)
result_list.append(result)
results: np.ndarray = np.asarray(result_list)
return queries, results
[docs]
def add(self, data_points):
"""
add(self, data_points) -> None
| **Description**
| Adds the new result to the query to the already existing results to the same query.
:param data_points: A tuple of queries and their associated results.
:type data_points: Tuple[`NDArray <https://numpy.org/doc/stable/reference/arrays.ndarray.html>`_,`NDArray <https://numpy.org/doc/stable/reference/arrays.ndarray.html>`_]
"""
queries, results = data_points
for query, result in zip(queries, results):
results = self.query_index.get(tuple(query), [])
self.query_index[tuple(query)] = results + [result]
super().add(data_points)
[docs]
def query_constrain(self) -> QueryConstrain:
"""
query_constrain(self) -> QueryConstrain
| **Description**
| Returns its own query constraints.
:return: Data pool's query constraints
:rtype: QueryConstrain
"""
return QueryConstrain(count = self.queries.shape[0], shape = self._query_constrain().shape, ranges = self.queries)
[docs]
def result_constrain(self) -> ResultConstrain:
"""
result_constrain(self) -> ResultConstrain
| **Description**
| Returns its own result constraints.
:return: Data pool's result constraints
:rtype: ResultConstrain
"""
return self._result_constrain()