def __call__(self, initial_value=None, current_value=None, random_state=None): random_state = random_state or np.random axis = variation_values.evaluate( self._axis, initial_value, current_value, random_state) angle = variation_values.evaluate( self._angle, initial_value, current_value, random_state) sine, cosine = np.sin(angle / 2), np.cos(angle / 2) return np.array([cosine, axis[0] * sine, axis[1] * sine, axis[2] * sine])
def __call__(self, initial_value=None, current_value=None, random_state=None): first_value = variation_values.evaluate(self._first, initial_value, current_value, random_state) second_value = variation_values.evaluate(self._second, initial_value, current_value, random_state) return self._op(first_value, second_value)
def __call__(self, initial_value=None, current_value=None, random_state=None): base_value = current_value if self._cumulative else initial_value return base_value * (variation_values.evaluate( self._variation, initial_value, current_value, random_state))
def __call__(self, initial_value=None, current_value=None, random_state=None): value = variation_values.evaluate(self._variation, initial_value, current_value, random_state) return self._op(value)
def __call__(self, initial_value=None, current_value=None, random_state=None): value = variation_values.evaluate(self._variation, initial_value, current_value, random_state) return np.asarray(value)[self._index]
def __call__(self, initial_value=None, current_value=None, random_state=None): h, s, v, alpha = variation_values.evaluate( (self._h, self._s, self._v, self._alpha), initial_value, current_value, random_state) return np.asarray(list(colorsys.hsv_to_rgb(h, s, v)) + [alpha])
def __call__(self, initial_value=None, current_value=None, random_state=None): return np.asarray( variation_values.evaluate([self._r, self._g, self._b, self._alpha], initial_value, current_value, random_state))
def apply_variations(self, physics, random_state): for element, variations in self._variations.items(): binding = physics.bind(element) for attribute_name, variation_info in variations.items(): current_value = getattr(binding, attribute_name) if variation_info.initial_value is None: variation_info.initial_value = copy.copy(current_value) setattr(binding, attribute_name, evaluate( variation_info.variation, variation_info.initial_value, current_value, random_state))
def __call__(self, initial_value=None, current_value=None, random_state=None): random_state = random_state or np.random q1 = variation_values.evaluate(self._quat, initial_value, current_value, random_state) q2 = current_value if self._cumulative else initial_value return np.array([ q1[0]*q2[0] - q1[1]*q2[1] - q1[2]*q2[2] - q1[3]*q2[3], q1[0]*q2[1] + q1[1]*q2[0] + q1[2]*q2[3] - q1[3]*q2[2], q1[0]*q2[2] - q1[1]*q2[3] + q1[2]*q2[0] + q1[3]*q2[1], q1[0]*q2[3] + q1[1]*q2[2] - q1[2]*q2[1] + q1[3]*q2[0]])
def apply_variations(self, random_state): """Applies variations in-place to the specified MJCF element. Args: random_state: A `numpy.random.RandomState` instance. """ for element, attribute_variations in self._variations.items(): new_values = {} for attribute_name, variation_info in attribute_variations.items(): current_value = getattr(element, attribute_name) if variation_info.initial_value is None: variation_info.initial_value = copy.copy(current_value) new_values[attribute_name] = evaluate( variation_info.variation, variation_info.initial_value, current_value, random_state) element.set_attributes(**new_values)