| using System; |
| using System.Text.RegularExpressions; |
| using Google.Protobuf; |
| using NUnit.Framework; |
| using Unity.MLAgents.Actuators; |
| using Unity.MLAgents.Demonstrations; |
| using Unity.MLAgents.Policies; |
| using Unity.MLAgents.Sensors; |
|
|
| using Unity.MLAgents.Analytics; |
| using Unity.MLAgents.CommunicatorObjects; |
| using UnityEngine; |
| using UnityEngine.TestTools; |
|
|
| namespace Unity.MLAgents.Tests |
| { |
| [TestFixture] |
| public class GrpcExtensionsTests |
| { |
| [SetUp] |
| public void SetUp() |
| { |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); |
| } |
|
|
| [Test] |
| public void TestDefaultBrainParametersToProto() |
| { |
| |
| var brain = new BrainParameters(); |
| brain.ToProto("foo", false); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| brain.ToProto("foo", false); |
| } |
|
|
| [Test] |
| public void TestDefaultActionSpecToProto() |
| { |
| |
| var actionSpec = new ActionSpec(); |
| actionSpec.ToBrainParametersProto("foo", false); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false); |
|
|
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); |
| |
| actionSpec = ActionSpec.MakeContinuous(3); |
| actionSpec.ToBrainParametersProto("foo", false); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false); |
|
|
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); |
|
|
| |
| actionSpec = ActionSpec.MakeDiscrete(1, 2, 3); |
| actionSpec.ToBrainParametersProto("foo", false); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false); |
| } |
|
|
| [Test] |
| public void ToBrainParameters() |
| { |
| |
| var actionSpec = new ActionSpec(); |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
|
|
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); |
| |
| actionSpec = ActionSpec.MakeContinuous(3); |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
|
|
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); |
|
|
| |
| actionSpec = ActionSpec.MakeDiscrete(1, 2, 3); |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| HybridActions = false |
| }; |
| actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); |
| } |
|
|
| [Test] |
| public void TestDefaultAgentInfoToProto() |
| { |
| |
| var agentInfo = new AgentInfo(); |
| var pairProto = agentInfo.ToInfoActionPairProto(); |
| pairProto.AgentInfo.Observations.Add(new ObservationProto |
| { |
| CompressedData = ByteString.Empty, |
| CompressionType = CompressionTypeProto.None, |
| FloatData = new ObservationProto.Types.FloatData(), |
| ObservationType = ObservationTypeProto.Default, |
| Name = "Sensor" |
| }); |
| pairProto.AgentInfo.Observations[0].Shape.Add(0); |
| pairProto.GetObservationSummaries(); |
| agentInfo.ToAgentInfoProto(); |
| agentInfo.groupId = 1; |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| MultiAgentGroups = false |
| }; |
| agentInfo.ToAgentInfoProto(); |
| LogAssert.Expect(LogType.Warning, new Regex(".+")); |
| Academy.Instance.TrainerCapabilities = new UnityRLCapabilities |
| { |
| BaseRLCapabilities = true, |
| MultiAgentGroups = true |
| }; |
| agentInfo.ToAgentInfoProto(); |
| } |
|
|
| [Test] |
| public void TestDefaultDemonstrationMetaDataToProto() |
| { |
| |
| var demoMetaData = new DemonstrationMetaData(); |
| demoMetaData.ToProto(); |
| } |
|
|
| class DummySensor : ISensor |
| { |
| public ObservationSpec ObservationSpec; |
| public SensorCompressionType CompressionType; |
|
|
| public ObservationSpec GetObservationSpec() |
| { |
| return ObservationSpec; |
| } |
|
|
| public int Write(ObservationWriter writer) |
| { |
| return 0; |
| } |
|
|
| public byte[] GetCompressedObservation() |
| { |
| return new byte[] { 13, 37 }; |
| } |
|
|
| public void Update() { } |
|
|
| public void Reset() { } |
|
|
| public CompressionSpec GetCompressionSpec() |
| { |
| return new CompressionSpec(CompressionType); |
| } |
|
|
| public string GetName() |
| { |
| return "Dummy"; |
| } |
| } |
|
|
| [Test] |
| public void TestGetObservationProtoCapabilities() |
| { |
| |
| var variants = new[] |
| { |
| |
| (new[] {3}, SensorCompressionType.None, false, false), |
| |
| (new[] {3, 4, 4}, SensorCompressionType.None, false, false), |
| |
| (new[] {3, 4, 4}, SensorCompressionType.PNG, false, true), |
|
|
| |
| (new[] {4, 4, 4}, SensorCompressionType.PNG, false, false), |
| (new[] {4, 4, 4}, SensorCompressionType.PNG, true, true), |
| }; |
|
|
| foreach (var (shape, compressionType, supportsMultiPngObs, expectCompressed) in variants) |
| { |
| var inplaceShape = InplaceArray<int>.FromList(shape); |
| var dummySensor = new DummySensor(); |
| var obsWriter = new ObservationWriter(); |
|
|
| if (shape.Length == 1) |
| { |
| dummySensor.ObservationSpec = ObservationSpec.Vector(shape[0]); |
| } |
| else if (shape.Length == 3) |
| { |
| dummySensor.ObservationSpec = ObservationSpec.Visual(shape[0], shape[1], shape[2]); |
| } |
| else |
| { |
| throw new ArgumentOutOfRangeException(); |
| } |
| dummySensor.CompressionType = compressionType; |
| obsWriter.SetTarget(new float[128], inplaceShape, 0); |
|
|
| var caps = new UnityRLCapabilities |
| { |
| ConcatenatedPngObservations = supportsMultiPngObs |
| }; |
| Academy.Instance.TrainerCapabilities = caps; |
|
|
|
|
| var obsProto = dummySensor.GetObservationProto(obsWriter); |
| if (expectCompressed) |
| { |
| Assert.Greater(obsProto.CompressedData.Length, 0); |
| Assert.AreEqual(obsProto.FloatData, null); |
| } |
| else |
| { |
| Assert.Greater(obsProto.FloatData.Data.Count, 0); |
| Assert.AreEqual(obsProto.CompressedData.Length, 0); |
| } |
| } |
| } |
|
|
| [Test] |
| public void TestDefaultTrainingEvents() |
| { |
| var trainingEnvInit = new TrainingEnvironmentInitialized |
| { |
| PythonVersion = "test", |
| }; |
| var trainingEnvInitEvent = trainingEnvInit.ToTrainingEnvironmentInitializedEvent(); |
| Assert.AreEqual(trainingEnvInit.PythonVersion, trainingEnvInitEvent.TrainerPythonVersion); |
|
|
| var trainingBehavInit = new TrainingBehaviorInitialized |
| { |
| BehaviorName = "testBehavior", |
| ExtrinsicRewardEnabled = true, |
| CuriosityRewardEnabled = true, |
|
|
| RecurrentEnabled = true, |
| SelfPlayEnabled = true, |
| }; |
| var trainingBehavInitEvent = trainingBehavInit.ToTrainingBehaviorInitializedEvent(); |
| Assert.AreEqual(trainingBehavInit.BehaviorName, trainingBehavInitEvent.BehaviorName); |
|
|
| Assert.AreEqual(RewardSignals.Extrinsic | RewardSignals.Curiosity, trainingBehavInitEvent.RewardSignalFlags); |
| Assert.AreEqual(TrainingFeatures.Recurrent | TrainingFeatures.SelfPlay, trainingBehavInitEvent.TrainingFeatureFlags); |
| } |
| } |
| } |
|
|