private HalfKpParameters ReadHalfKpParameters(BinaryReader reader, NnueArchitecture architecture)
        {
            var featureTransformerHash = reader.ReadUInt32();

            if (featureTransformerHash != ExpectedFeatureTransformerHash)
            {
                throw new NnueException($"Invalid feature transformer hash, expected {ExpectedFeatureTransformerHash}, read {featureTransformerHash}");
            }

            var parameters = new HalfKpParameters();

            parameters.FeatureTransformer = ReadFeatureTransformerParameters(reader, 41024, 256);

            var networkHash = reader.ReadUInt32();

            if (networkHash != ExpectedNetworkHash)
            {
                throw new NnueException($"Invalid network hash, expected {ExpectedNetworkHash}, read {networkHash}");
            }

            parameters.Hidden1 = ReadHiddenParameters(reader, 512, 32, architecture);
            parameters.Hidden2 = ReadHiddenParameters(reader, 32, 32, architecture);
            parameters.Output  = ReadOutputParameters(reader, 32, 1);

            return(parameters);
        }
        public NnueManagedClient(HalfKpParameters parameters)
        {
            NnueArchitecture architecture;

            if (Avx2.IsSupported)
            {
                architecture    = NnueArchitecture.Avx2;
                _implementation = new NnueImplAvx2(parameters);
            }
            else
            {
                architecture    = NnueArchitecture.Fallback;
                _implementation = new NnueImplFallback(parameters);
            }
            Architecture = architecture;
        }
 public NnueImplFallback(HalfKpParameters parameters)
 {
     _parameters = parameters;
 }
 public NnueImplAvx2(HalfKpParameters parameters)
 {
     _parameters = parameters;
 }