public void TestWritesToIList() { WriteAdapter writer = new WriteAdapter(); var buffer = new[] { 0f, 0f, 0f }; var shape = new[] { 3 }; writer.SetTarget(buffer, shape, 0); // Elementwise writes writer[0] = 1f; writer[2] = 2f; Assert.AreEqual(new[] { 1f, 0f, 2f }, buffer); // Elementwise writes with offset writer.SetTarget(buffer, shape, 1); writer[0] = 3f; Assert.AreEqual(new[] { 1f, 3f, 2f }, buffer); // AddRange writer.SetTarget(buffer, shape, 0); writer.AddRange(new[] { 4f, 5f }); Assert.AreEqual(new[] { 4f, 5f, 2f }, buffer); // AddRange with offset writer.SetTarget(buffer, shape, 1); writer.AddRange(new[] { 6f, 7f }); Assert.AreEqual(new[] { 4f, 6f, 7f }, buffer); }
/// <summary> /// Default implementation of Write interface. This creates a temporary array, /// calls WriteObservation, and then writes the results to the WriteAdapter. /// </summary> /// <param name="adapter"></param> /// <returns>The number of elements written.</returns> public virtual int Write(WriteAdapter adapter) { // TODO reuse buffer for similar agents, don't call GetObservationShape() var numFloats = this.ObservationSize(); float[] buffer = new float[numFloats]; WriteObservation(buffer); adapter.AddRange(buffer); return numFloats; }
public int Write(WriteAdapter adapter) { // First, call the wrapped sensor's write method. Make sure to use our own adapater, not the passed one. m_LocalAdapter.SetTarget(m_StackedObservations[m_CurrentIndex], 0); m_WrappedSensor.Write(m_LocalAdapter); // Now write the saved observations (oldest first) var numWritten = 0; for (var i = 0; i < m_NumStackedObservations; i++) { var obsIndex = (m_CurrentIndex + 1 + i) % m_NumStackedObservations; adapter.AddRange(m_StackedObservations[obsIndex], numWritten); numWritten += m_UnstackedObservationSize; } return(numWritten); }
public void TestWritesToTensor() { WriteAdapter writer = new WriteAdapter(); var t = new TensorProxy { valueType = TensorProxy.TensorType.FloatingPoint, data = new Tensor(2, 3) }; writer.SetTarget(t, 0, 0); Assert.AreEqual(0f, t.data[0, 0]); writer[0] = 1f; Assert.AreEqual(1f, t.data[0, 0]); writer.SetTarget(t, 1, 1); writer[0] = 2f; writer[1] = 3f; // [0, 0] shouldn't change Assert.AreEqual(1f, t.data[0, 0]); Assert.AreEqual(2f, t.data[1, 1]); Assert.AreEqual(3f, t.data[1, 2]); // AddRange t = new TensorProxy { valueType = TensorProxy.TensorType.FloatingPoint, data = new Tensor(2, 3) }; writer.SetTarget(t, 1, 1); writer.AddRange(new[] { -1f, -2f }); Assert.AreEqual(0f, t.data[0, 0]); Assert.AreEqual(0f, t.data[0, 1]); Assert.AreEqual(0f, t.data[0, 2]); Assert.AreEqual(0f, t.data[1, 0]); Assert.AreEqual(-1f, t.data[1, 1]); Assert.AreEqual(-2f, t.data[1, 2]); }