using Godot; using Nocturnis.DataStructures.DataPortGroups; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Ports; using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Providers; using Skeleton.DataStructure; namespace Enigmos.Modules.ComputationalModules.Binary; public abstract partial class AdditionModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule { private IDataInGroup? InputGroup { get; set; } private IDataOutGroup? OutputGroup { get; set; } public override double MaintenanceAlpha => 0.19572021d; public override double MaintenanceBeta => 0.20151779d; public HashSet ConfigurablePortGroups { get; set; } = new(); public override void Init() { base.Init(); this.DataOutInit("Output",4); InputGroup = GlobalProvider.DataStructureProvider!.NewDataInGroup( this, DataInPorts, "", EnigmosConstant.DataPortTypes.Real, Array.Empty() ); OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup( this, DataOutPorts, "Output Port Type", EnigmosConstant.DataPortTypes.Real, EnigmosConstant.DataPortTypes.AnyTensor ); ConfigurablePortGroups = new HashSet { OutputGroup }; PostInit(); } public void Inference() => InputGroup!.SelectedType = OutputGroup!.SelectedType; public override string GetDescription => GlobalProvider.EnigmosProvider!.ModuleDescription(); public override void Define() { (object, StringName) Proxy(CacheItem cache) => GlobalProvider.PolymorphismProvider!.Add(this.X(cache), this.Y(cache)); this.Define(Proxy); } }