Source code for alts.core.data.queried_data_pool
#Version 1.1.1 conform as of 29.11.2024
"""
*alts.core.data.queried_data_pool*
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from dataclasses import dataclass
import numpy as np
from alts.core.configuration import Required, is_set, pre_init, post_init
from alts.core.query.queryable import Queryable
from alts.core.subscribable import DelayedPublisher
if TYPE_CHECKING:
from typing_extensions import Self
from typing import Tuple
from nptyping import NDArray, Number, Shape
from alts.core.data.constrains import ResultConstrainGetter, QueryConstrainedGetter, Constrained
[docs]
class QueriedDataPool(DelayedPublisher, Queryable):
"""
QueriedDataPool(_query_constrain, _result_constrain)
| **Description**
| It's a queryable :doc:`DataPools </core/data/data_pools>`.
| It contains queries, results and the last added queries and results.
:param _query_constrain: Query constrains
:type _query_constrain: :doc:`QueryConstrain </core/data/constrains>`
:param _query_result: Result constrains
:type _query_result: :doc:`ResultConstrain </core/data/constrains>`
"""
_query_constrain: QueryConstrainedGetter = post_init()
_result_constrain: ResultConstrainGetter = post_init()
def __init__(self):
"""
__init__(self)
| **Description**
| Initializes all attributes at default value.
"""
super().init(QueriedDataPool)
self.queries: 'NDArray[Shape["query_nr, ... query_dim"], Number]'
self.results: 'NDArray[Shape["query_nr, ... result_dim"], Number]'
self.last_queries: 'NDArray[Shape["query_nr, ... query_dim"], Number]'
self.last_results: 'NDArray[Shape["query_nr, ... result_dim"], Number]'
self.queries = np.empty((0,*self._query_constrain().shape))
self.results = np.empty((0,*self._result_constrain().shape))
self.last_queries = np.empty((0,*self._query_constrain().shape))
self.last_results = np.empty((0,*self._result_constrain().shape))
[docs]
def add(self, data_points: 'Tuple[NDArray[Shape["query_nr, ... query_dim"], Number], NDArray[Shape["query_nr, ... result_dim"], Number]]'):
"""
add(self, data_points) -> None
| **Description**
| Adds all data points to its data pool and updates its last added data.
:param data_points: A tuple of queries and 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
self.queries = np.concatenate((self.queries, queries))
self.results = np.concatenate((self.results, results))
self.last_queries = queries
self.last_results = results
self.request_update()
def __call__(self, query_constrain: Required[QueryConstrainedGetter] = None, result_constrain: Required[ResultConstrainGetter] = None, **kwargs) -> Self:
"""
__call__(self, query_constrain, result_constrain) -> Self
| **Description**
| Returns a configured QueriedDataPool object to the given query and result constrains.
:param query_constrain: Query constrains
:type query_constrain: :doc:`QueryConstrain </core/data/constrains>`
:param result_constrain: Result constrains
:type result_constrain: :doc:`ResultConstrain </core/data/constrains>`
:return: Configured QueriedDataPool
:rtype: QueriedDataPool
"""
obj = super().__call__( **kwargs)
obj._query_constrain = is_set(query_constrain)
obj._result_constrain = is_set(result_constrain)
return obj