From 5ca12f457ba00d36417520cf6d9df95a68b5e07d Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 11:21:48 -0400 Subject: [PATCH 01/12] Upgrade to the new analytics api. --- .../Runtime/Analytics/Events.cs | 58 +++++++++++++-- .../Runtime/Analytics/InferenceAnalytics.cs | 38 ++-------- .../Runtime/Analytics/TrainingAnalytics.cs | 70 +++++-------------- 3 files changed, 76 insertions(+), 90 deletions(-) diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs b/com.unity.ml-agents/Runtime/Analytics/Events.cs index 31e7b44a43..769019fc7a 100644 --- a/com.unity.ml-agents/Runtime/Analytics/Events.cs +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs @@ -2,10 +2,28 @@ using System.Collections.Generic; using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; +using UnityEngine.Analytics; namespace Unity.MLAgents.Analytics { - internal struct InferenceEvent + internal static class AnalyticsConstants + { + public const string k_VendorKey = "unity.ml-agents"; + + /// + /// Maximum number of events sent per hour. + /// + public const int k_MaxEventsPerHour = 1000; + + /// + /// Maximum number of items in an event. + /// + public const int k_MaxNumberOfElements = 1000; + } + + [Serializable] + [AnalyticInfo(eventName: "ml_agents_inferencemodelset", version: 1, vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] + internal class InferenceEvent : IAnalytic.IData, IAnalytic { /// /// Hash of the BehaviorName. @@ -25,6 +43,12 @@ internal struct InferenceEvent public int MemorySize; public long TotalWeightSizeBytes; public string ModelHash; + public bool TryGatherData(out IAnalytic.IData data, out Exception error) + { + data = this; + error = null; + return true; + } } /// @@ -126,7 +150,9 @@ public static EventObservationSpec FromSensor(ISensor sensor) } } - internal struct RemotePolicyInitializedEvent + [Serializable] + [AnalyticInfo(eventName: "ml_agents_remote_policy_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] + internal class RemotePolicyInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; /// @@ -143,9 +169,18 @@ internal struct RemotePolicyInitializedEvent /// public string MLAgentsEnvsVersion; public string TrainerCommunicationVersion; + public bool TryGatherData(out IAnalytic.IData data, out Exception error) + { + data = this; + error = null; + return true; + } } - internal struct TrainingEnvironmentInitializedEvent + + [Serializable] + [AnalyticInfo(eventName: "ml_agents_training_environment_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] + internal class TrainingEnvironmentInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; @@ -157,6 +192,12 @@ internal struct TrainingEnvironmentInitializedEvent public int NumEnvironments; public int NumEnvironmentParameters; public string RunOptions; + public bool TryGatherData(out IAnalytic.IData data, out Exception error) + { + data = this; + error = null; + return true; + } } [Flags] @@ -178,7 +219,9 @@ internal enum TrainingFeatures Curriculum = 1 << 4, } - internal struct TrainingBehaviorInitializedEvent +[Serializable] +[AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] +internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; @@ -190,5 +233,12 @@ internal struct TrainingBehaviorInitializedEvent public int NumNetworkLayers; public int NumNetworkHiddenUnits; public string Config; + + public bool TryGatherData(out IAnalytic.IData data, out Exception error) + { + data = this; + error = null; + return true; + } } } diff --git a/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs index 10baf7ff63..899d71f8b2 100644 --- a/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs +++ b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs @@ -24,24 +24,6 @@ namespace Unity.MLAgents.Analytics { internal class InferenceAnalytics { - const string k_VendorKey = "unity.ml-agents"; - const string k_EventName = "ml_agents_inferencemodelset"; - const int k_EventVersion = 1; - - /// - /// Whether or not we've registered this particular event yet - /// - static bool s_EventRegistered; - - /// - /// Hourly limit for this event name - /// - const int k_MaxEventsPerHour = 1000; - - /// - /// Maximum number of items in this event. - /// - const int k_MaxNumberOfElements = 1000; #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS @@ -54,25 +36,17 @@ internal class InferenceAnalytics static bool EnableAnalytics() { #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS - if (s_EventRegistered) - { - return true; - } - AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey, k_EventVersion); - if (result == AnalyticsResult.Ok) - { - s_EventRegistered = true; - } - if (s_EventRegistered && s_SentModels == null) + if (s_SentModels == null) { s_SentModels = new HashSet(); } + return true; + #else // no editor, no analytics - s_EventRegistered = false; + return false; #endif - return s_EventRegistered; } public static bool IsAnalyticsEnabled() @@ -127,7 +101,7 @@ IList actuators // Debug.Log(JsonUtility.ToJson(data, true)); if (AnalyticsUtils.s_SendEditorAnalytics) { - EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion); + EditorAnalytics.SendAnalytic(data); } #endif } @@ -156,7 +130,7 @@ IList actuators var inferenceEvent = new InferenceEvent(); // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. - inferenceEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, behaviorName); + inferenceEvent.BehaviorName = AnalyticsUtils.Hash(AnalyticsConstants.k_VendorKey, behaviorName); inferenceEvent.SentisModelVersion = sentisModelInfo.Version; inferenceEvent.SentisModelProducer = sentisModel.ProducerName; diff --git a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs index 08c205bfc6..305eb689b7 100644 --- a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs +++ b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs @@ -4,6 +4,7 @@ using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; using UnityEngine; +using Debug = UnityEngine.Debug; #if MLA_UNITY_ANALYTICS_MODULE #if ENABLE_CLOUD_SERVICES_ANALYTICS @@ -23,35 +24,9 @@ namespace Unity.MLAgents.Analytics { internal static class TrainingAnalytics { - const string k_VendorKey = "unity.ml-agents"; - const string k_TrainingEnvironmentInitializedEventName = "ml_agents_training_environment_initialized"; - const string k_TrainingBehaviorInitializedEventName = "ml_agents_training_behavior_initialized"; - const string k_RemotePolicyInitializedEventName = "ml_agents_remote_policy_initialized"; - - private static readonly string[] s_EventNames = - { - k_TrainingEnvironmentInitializedEventName, - k_TrainingBehaviorInitializedEventName, - k_RemotePolicyInitializedEventName - }; - - /// - /// Hourly limit for this event name - /// - const int k_MaxEventsPerHour = 1000; - - /// - /// Maximum number of items in this event. - /// - const int k_MaxNumberOfElements = 1000; - private static bool s_SentEnvironmentInitialized; #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS - /// - /// Whether or not we've registered this particular event yet - /// - static bool s_EventsRegistered; /// /// Behaviors that we've already sent events for. @@ -69,19 +44,6 @@ internal static class TrainingAnalytics internal static bool EnableAnalytics() { #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS - if (s_EventsRegistered) - { - return true; - } - foreach (var eventName in s_EventNames) - { - AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(eventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey); - if (result != AnalyticsResult.Ok) - { - return false; - } - } - s_EventsRegistered = true; if (s_SentRemotePolicyInitialized == null) { @@ -90,7 +52,7 @@ internal static bool EnableAnalytics() s_TrainingSessionGuid = Guid.NewGuid(); } - return s_EventsRegistered; + return true; #else return false; #endif // MLA_UNITY_ANALYTICS_MODULE @@ -136,13 +98,13 @@ public static void TrainingEnvironmentInitialized(TrainingEnvironmentInitialized tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); // Note - to debug, use JsonUtility.ToJson on the event. - // Debug.Log( - // $"Would send event {k_TrainingEnvironmentInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" - // ); + Debug.Log( + $"Would send event ml_agents_training_environment_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" + ); #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS if (AnalyticsUtils.s_SendEditorAnalytics) { - EditorAnalytics.SendEventWithLimit(k_TrainingEnvironmentInitializedEventName, tbiEvent); + EditorAnalytics.SendAnalytic(tbiEvent); } #endif } @@ -174,12 +136,12 @@ IList actuators var data = GetEventForRemotePolicy(behaviorName, sensors, actionSpec, actuators); // Note - to debug, use JsonUtility.ToJson on the event. - // Debug.Log( - // $"Would send event {k_RemotePolicyInitializedEventName} with body {JsonUtility.ToJson(data, true)}" - // ); + Debug.Log( + $"Would send event ml_agents_remote_policy_initialized with body {JsonUtility.ToJson(data, true)}" + ); if (AnalyticsUtils.s_SendEditorAnalytics) { - EditorAnalytics.SendEventWithLimit(k_RemotePolicyInitializedEventName, data); + EditorAnalytics.SendAnalytic(data); } #endif } @@ -203,7 +165,7 @@ internal static TrainingBehaviorInitializedEvent SanitizeTrainingBehaviorInitial // Context: The config field was added at the same time as trainer side hashing, so messages including it should already be hashed. if (tbiEvent.Config.Length == 0 || tbiEvent.BehaviorName.Length != 64) { - tbiEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, tbiEvent.BehaviorName); + tbiEvent.BehaviorName = AnalyticsUtils.Hash(AnalyticsConstants.k_VendorKey, tbiEvent.BehaviorName); } return tbiEvent; @@ -232,12 +194,12 @@ public static void TrainingBehaviorInitialized(TrainingBehaviorInitializedEvent tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); // Note - to debug, use JsonUtility.ToJson on the event. - // Debug.Log( - // $"Would send event {k_TrainingBehaviorInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" - // ); + Debug.Log( + $"Would send event ml_agents_training_behavior_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" + ); if (AnalyticsUtils.s_SendEditorAnalytics) { - EditorAnalytics.SendEventWithLimit(k_TrainingBehaviorInitializedEventName, tbiEvent); + EditorAnalytics.SendAnalytic(tbiEvent); } #endif } @@ -252,7 +214,7 @@ IList actuators var remotePolicyEvent = new RemotePolicyInitializedEvent(); // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. - remotePolicyEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, behaviorName); + remotePolicyEvent.BehaviorName = AnalyticsUtils.Hash(AnalyticsConstants.k_VendorKey, behaviorName); remotePolicyEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); remotePolicyEvent.ActionSpec = EventActionSpec.FromActionSpec(actionSpec); From 5e5dfa173ae84a1270ebf3fac3b369afdb6935ec Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 11:24:38 -0400 Subject: [PATCH 02/12] Comment Debug log. --- .../Runtime/Analytics/TrainingAnalytics.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs index 305eb689b7..18ad1e818b 100644 --- a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs +++ b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs @@ -4,7 +4,6 @@ using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; using UnityEngine; -using Debug = UnityEngine.Debug; #if MLA_UNITY_ANALYTICS_MODULE #if ENABLE_CLOUD_SERVICES_ANALYTICS @@ -98,9 +97,9 @@ public static void TrainingEnvironmentInitialized(TrainingEnvironmentInitialized tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); // Note - to debug, use JsonUtility.ToJson on the event. - Debug.Log( - $"Would send event ml_agents_training_environment_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" - ); + // Debug.Log( + // $"Would send event ml_agents_training_environment_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" + // ); #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS if (AnalyticsUtils.s_SendEditorAnalytics) { @@ -136,9 +135,9 @@ IList actuators var data = GetEventForRemotePolicy(behaviorName, sensors, actionSpec, actuators); // Note - to debug, use JsonUtility.ToJson on the event. - Debug.Log( - $"Would send event ml_agents_remote_policy_initialized with body {JsonUtility.ToJson(data, true)}" - ); + // Debug.Log( + // $"Would send event ml_agents_remote_policy_initialized with body {JsonUtility.ToJson(data, true)}" + // ); if (AnalyticsUtils.s_SendEditorAnalytics) { EditorAnalytics.SendAnalytic(data); @@ -194,9 +193,9 @@ public static void TrainingBehaviorInitialized(TrainingBehaviorInitializedEvent tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); // Note - to debug, use JsonUtility.ToJson on the event. - Debug.Log( - $"Would send event ml_agents_training_behavior_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" - ); + // Debug.Log( + // $"Would send event ml_agents_training_behavior_initialized with body {JsonUtility.ToJson(tbiEvent, true)}" + // ); if (AnalyticsUtils.s_SendEditorAnalytics) { EditorAnalytics.SendAnalytic(tbiEvent); From b13ca8736705872344893a34447bc6fbd4610725 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 12:26:51 -0400 Subject: [PATCH 03/12] dotnet format whitespace --- .../ArticulationBodySensorComponent.cs | 2 +- .../Input/InputActuatorComponentTests.cs | 2 +- .../Runtime/Analytics/Events.cs | 6 ++--- .../Runtime/Communicator/RpcCommunicator.cs | 26 +++++++++---------- .../Runtime/Sensor/BoxOverlapCheckerTests.cs | 2 +- .../Tests/Runtime/Sensor/GridSensorTests.cs | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs index 277f01269d..e464e21f20 100644 --- a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs @@ -18,7 +18,7 @@ public class ArticulationBodySensorComponent : SensorComponent /// Corresponding sensors. public override ISensor[] CreateSensors() { - return new ISensor[] {new PhysicsBodySensor(RootBody, Settings, sensorName)}; + return new ISensor[] { new PhysicsBodySensor(RootBody, Settings, sensorName) }; } } } diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs index a3740c304f..76c8cd95e6 100644 --- a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs @@ -69,7 +69,7 @@ public void InputActuatorComponentTestCreateActuators() Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); var actuatorComponentActionSpec = m_ActuatorComponent.ActionSpec; - Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] {2})); + Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] { 2 })); Assert.IsTrue(actuatorComponentActionSpec.NumContinuousActions == 2); } diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs b/com.unity.ml-agents/Runtime/Analytics/Events.cs index 769019fc7a..d1a58de1db 100644 --- a/com.unity.ml-agents/Runtime/Analytics/Events.cs +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs @@ -219,9 +219,9 @@ internal enum TrainingFeatures Curriculum = 1 << 4, } -[Serializable] -[AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] -internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic + [Serializable] + [AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] + internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; diff --git a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs index 41fcae7e15..0d4db27c88 100644 --- a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs +++ b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs @@ -293,23 +293,23 @@ void SendCommandEvent(CommandProto command) switch (command) { case CommandProto.Quit: - { - NotifyQuitAndShutDownChannel(); - return; - } + { + NotifyQuitAndShutDownChannel(); + return; + } case CommandProto.Reset: - { - foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) { - m_OrderedAgentsRequestingDecisions[brainName].Clear(); + foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) + { + m_OrderedAgentsRequestingDecisions[brainName].Clear(); + } + ResetCommandReceived?.Invoke(); + return; } - ResetCommandReceived?.Invoke(); - return; - } default: - { - return; - } + { + return; + } } } diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs index 902a48836d..9ec25a9729 100644 --- a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs @@ -29,7 +29,7 @@ int maxColliderBufferSize detectableTags, initialColliderBufferSize, maxColliderBufferSize) - {} + { } public Vector3[] CellLocalPositions { diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs index f568b74952..f60bfa675a 100644 --- a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs @@ -89,7 +89,7 @@ public void TestCreateSensor() gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); gridSensorComponent.CreateSensors(); - var componentSensor = (List) typeof(GridSensorComponent).GetField("m_Sensors", + var componentSensor = (List)typeof(GridSensorComponent).GetField("m_Sensors", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridSensorComponent); Assert.AreEqual(componentSensor.Count, 1); } From 876d97e9dd319a161876b892d6d35e7b5b0bca76 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 12:51:21 -0400 Subject: [PATCH 04/12] Revert "dotnet format whitespace" This reverts commit b13ca8736705872344893a34447bc6fbd4610725. --- .../ArticulationBodySensorComponent.cs | 2 +- .../Input/InputActuatorComponentTests.cs | 2 +- .../Runtime/Analytics/Events.cs | 6 ++--- .../Runtime/Communicator/RpcCommunicator.cs | 26 +++++++++---------- .../Runtime/Sensor/BoxOverlapCheckerTests.cs | 2 +- .../Tests/Runtime/Sensor/GridSensorTests.cs | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs index e464e21f20..277f01269d 100644 --- a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs @@ -18,7 +18,7 @@ public class ArticulationBodySensorComponent : SensorComponent /// Corresponding sensors. public override ISensor[] CreateSensors() { - return new ISensor[] { new PhysicsBodySensor(RootBody, Settings, sensorName) }; + return new ISensor[] {new PhysicsBodySensor(RootBody, Settings, sensorName)}; } } } diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs index 76c8cd95e6..a3740c304f 100644 --- a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs @@ -69,7 +69,7 @@ public void InputActuatorComponentTestCreateActuators() Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); var actuatorComponentActionSpec = m_ActuatorComponent.ActionSpec; - Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] { 2 })); + Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] {2})); Assert.IsTrue(actuatorComponentActionSpec.NumContinuousActions == 2); } diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs b/com.unity.ml-agents/Runtime/Analytics/Events.cs index d1a58de1db..769019fc7a 100644 --- a/com.unity.ml-agents/Runtime/Analytics/Events.cs +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs @@ -219,9 +219,9 @@ internal enum TrainingFeatures Curriculum = 1 << 4, } - [Serializable] - [AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] - internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic +[Serializable] +[AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] +internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; diff --git a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs index 0d4db27c88..41fcae7e15 100644 --- a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs +++ b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs @@ -293,23 +293,23 @@ void SendCommandEvent(CommandProto command) switch (command) { case CommandProto.Quit: - { - NotifyQuitAndShutDownChannel(); - return; - } + { + NotifyQuitAndShutDownChannel(); + return; + } case CommandProto.Reset: + { + foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) { - foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) - { - m_OrderedAgentsRequestingDecisions[brainName].Clear(); - } - ResetCommandReceived?.Invoke(); - return; + m_OrderedAgentsRequestingDecisions[brainName].Clear(); } + ResetCommandReceived?.Invoke(); + return; + } default: - { - return; - } + { + return; + } } } diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs index 9ec25a9729..902a48836d 100644 --- a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs @@ -29,7 +29,7 @@ int maxColliderBufferSize detectableTags, initialColliderBufferSize, maxColliderBufferSize) - { } + {} public Vector3[] CellLocalPositions { diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs index f60bfa675a..f568b74952 100644 --- a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs @@ -89,7 +89,7 @@ public void TestCreateSensor() gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); gridSensorComponent.CreateSensors(); - var componentSensor = (List)typeof(GridSensorComponent).GetField("m_Sensors", + var componentSensor = (List) typeof(GridSensorComponent).GetField("m_Sensors", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridSensorComponent); Assert.AreEqual(componentSensor.Count, 1); } From 568e0538af97990b0f6f2918b0c6ff8ba65b54dc Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:09:39 -0400 Subject: [PATCH 05/12] Use dotnet 9.x in pre-commits to fix dotnet-format failures --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index c1c38590b5..ac65e352fe 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.0.202' + dotnet-version: '9.0.7' - name: Install manual dependencies run: | python -m pip install pre-commit From 195cd47904b4c3cd7beaf4afb4dd75cd0351bf24 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:30:00 -0400 Subject: [PATCH 06/12] Update dotnet version --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index ac65e352fe..de346320c6 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - uses: actions/setup-dotnet@v4 with: - dotnet-version: '9.0.7' + dotnet-version: '9.0.301' - name: Install manual dependencies run: | python -m pip install pre-commit From 363d3da78bb8038002165d5bca90dcf647e7e8c6 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:49:21 -0400 Subject: [PATCH 07/12] Revert "Update dotnet version" This reverts commit 195cd47904b4c3cd7beaf4afb4dd75cd0351bf24. --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index de346320c6..ac65e352fe 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - uses: actions/setup-dotnet@v4 with: - dotnet-version: '9.0.301' + dotnet-version: '9.0.7' - name: Install manual dependencies run: | python -m pip install pre-commit From 4ea383b09ff3f461b78a9f58392b8ba286addbc9 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:49:37 -0400 Subject: [PATCH 08/12] Revert "Use dotnet 9.x in pre-commits to fix dotnet-format failures" This reverts commit 568e0538af97990b0f6f2918b0c6ff8ba65b54dc. --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index ac65e352fe..c1c38590b5 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - uses: actions/setup-dotnet@v4 with: - dotnet-version: '9.0.7' + dotnet-version: '8.0.202' - name: Install manual dependencies run: | python -m pip install pre-commit From 6bdd41c8728d33cf56bc933541129d8429195f20 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:52:19 -0400 Subject: [PATCH 09/12] Clean the shared memory directory before running dotnet --- .github/workflows/pre-commit.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index c1c38590b5..d1422573e8 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -12,6 +12,8 @@ on: jobs: pre-commit: runs-on: ubuntu-24.04 + env: + DOTNET_NOLOGO: 1 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -26,6 +28,8 @@ jobs: - uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.202' + - name: Clean dotnet shared memory + run: sudo rm -rf /tmp/.dotnet/shm - name: Install manual dependencies run: | python -m pip install pre-commit From f0193398fa8a54a6740fec7022d91fc142ac2891 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Wed, 16 Jul 2025 15:58:22 -0400 Subject: [PATCH 10/12] Apply dotnet-format check --- com.unity.ml-agents/Runtime/Analytics/Events.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs b/com.unity.ml-agents/Runtime/Analytics/Events.cs index 769019fc7a..d1a58de1db 100644 --- a/com.unity.ml-agents/Runtime/Analytics/Events.cs +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs @@ -219,9 +219,9 @@ internal enum TrainingFeatures Curriculum = 1 << 4, } -[Serializable] -[AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] -internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic + [Serializable] + [AnalyticInfo(eventName: "ml_agents_training_behavior_initialized", vendorKey: AnalyticsConstants.k_VendorKey, maxEventsPerHour: AnalyticsConstants.k_MaxEventsPerHour, maxNumberOfElements: AnalyticsConstants.k_MaxNumberOfElements)] + internal class TrainingBehaviorInitializedEvent : IAnalytic.IData, IAnalytic { public string TrainingSessionGuid; From 95c13d75d7232d807e6c81e3f450c82c8f9858ee Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Thu, 17 Jul 2025 14:43:40 -0400 Subject: [PATCH 11/12] Add cloud service analytics to the conditions in TestEnableAnalytics. --- .../Tests/Editor/Analytics/TrainingAnalyticsTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs index 58155a843a..956240c451 100644 --- a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs +++ b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs @@ -86,7 +86,7 @@ public string TestTrainingBehaviorInitialized(string stringToMaybeHash) [Test] public void TestEnableAnalytics() { -#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS Assert.IsTrue(EditorAnalytics.enabled == TrainingAnalytics.EnableAnalytics()); #else Assert.IsFalse(TrainingAnalytics.EnableAnalytics()); From 7592ecf558d77486e06ad1da123e8460cecc4596 Mon Sep 17 00:00:00 2001 From: maryam-zia Date: Thu, 17 Jul 2025 17:08:26 -0400 Subject: [PATCH 12/12] Correct TestEnableAnalytics. --- .../Tests/Editor/Analytics/TrainingAnalyticsTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs index 956240c451..99a6622ca5 100644 --- a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs +++ b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs @@ -87,7 +87,7 @@ public string TestTrainingBehaviorInitialized(string stringToMaybeHash) public void TestEnableAnalytics() { #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS - Assert.IsTrue(EditorAnalytics.enabled == TrainingAnalytics.EnableAnalytics()); + Assert.IsTrue(TrainingAnalytics.EnableAnalytics()); #else Assert.IsFalse(TrainingAnalytics.EnableAnalytics()); #endif