"""G3DEntity class definition"""
from typing import Any
import os
if os.environ.get('__USE_CUDA', '0') == '1':
import cupy as np
else:
import numpy as np
from g3d.defs import G3DWorld
from g3d.defs import FunctionByPass
[docs]
class G3DEntity:
"""base class for any G3D entity/container"""
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""initialize G3DEntity placeholder"""
self._tag = ""
self._set_default()
self.set(*args, **kwargs)
@property
def tag(self) -> str:
"""tag (string) used for identification"""
return self._tag
@tag.setter
def tag(self, val: str) -> None:
self._tag = val
def _set_default(self) -> None:
self._tag = 'g3d_entity'
[docs]
def set(self, *args: Any, **kwargs: Any) -> None:
"""
sets entity parameters according to specifications
input: args, kwargs
example: set(args, kwargs)
"""
if len(args) != 0:
self._set_from_args(*args, **kwargs)
if len(kwargs) != 0:
g3d_world = G3DWorld()
for key, value in kwargs.items():
if g3d_world.display.verbose:
if type(value) is list:
print('%s == list of length %s' % (key, str(len(value))))
elif type(value) is np.ndarray:
print('%s == array of size %s' % (key, str(value.shape)))
else:
print('%s == %s' % (key, str(value)))
if not self.set_from_key_value(key, value):
print('warning! parameter %s is not defined' % key)
@staticmethod
def _get_function_evaluate_status(**kwargs: Any) -> Any:
bps = FunctionByPass.EVALUATE
if len(kwargs) != 0:
for key, value in kwargs.items():
if key == 'bps':
bps = value
return bps
def _set_from_args(self, *args: Any, **kwargs: Any) -> np.ndarray:
bps = self._get_function_evaluate_status(**kwargs)
args_stat = np.ones(len(args))
if bps is FunctionByPass.EVALUATE:
for i in range(len(args)):
arg = args[i]
if type(arg) is str:
self._tag = arg
args_stat[i] = 0
return args_stat
[docs]
def set_from_key_value(self, key: str, value: Any) -> bool:
"""
sets entity parameters from specified key => value data
input: key, value
valid keys for G3DCode base class:
'tag'
example: set_from_key_value(key, value)
"""
if key == 'tag':
self._tag = value
return True
return False
[docs]
def copy(self, e: 'G3DEntity'):
"""
copies data from specified entity
input: entity
example: copy(e)
"""
self._tag = e.tag
@staticmethod
def _list_is_populated(defs: list) -> bool:
if type(defs) is not list:
return False
if len(defs) == 0:
return False
return True
def _list_is_all_ints(self, defs: list) -> bool:
if not self._list_is_populated(defs):
return False
for n in defs:
if type(n) is not int:
return False
return True
def _list_is_all_floats(self, defs: list) -> bool:
if not self._list_is_populated(defs):
return False
for n in defs:
if type(n) is not float and type(n) is not np.float64:
return False
return True
[docs]
def print(self) -> None:
"""
prints entity data
"""
print(' tag: %s' % self._tag)