use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-metal")]
#[cfg(not(target_os = "watchos"))]
use objc2_metal::*;
use crate::*;
extern_protocol!(
pub unsafe trait MLCustomLayer {
#[unsafe(method(initWithParameterDictionary:error:_))]
#[unsafe(method_family = init)]
unsafe fn initWithParameterDictionary_error(
this: Allocated<Self>,
parameters: &NSDictionary<NSString, AnyObject>,
) -> Result<Retained<Self>, Retained<NSError>>;
#[unsafe(method(setWeightData:error:_))]
#[unsafe(method_family = none)]
unsafe fn setWeightData_error(
&self,
weights: &NSArray<NSData>,
) -> Result<(), Retained<NSError>>;
#[unsafe(method(outputShapesForInputShapes:error:_))]
#[unsafe(method_family = none)]
unsafe fn outputShapesForInputShapes_error(
&self,
input_shapes: &NSArray<NSArray<NSNumber>>,
) -> Result<Retained<NSArray<NSArray<NSNumber>>>, Retained<NSError>>;
#[cfg(feature = "MLMultiArray")]
#[unsafe(method(evaluateOnCPUWithInputs:outputs:error:_))]
#[unsafe(method_family = none)]
unsafe fn evaluateOnCPUWithInputs_outputs_error(
&self,
inputs: &NSArray<MLMultiArray>,
outputs: &NSArray<MLMultiArray>,
) -> Result<(), Retained<NSError>>;
#[cfg(feature = "objc2-metal")]
#[cfg(not(target_os = "watchos"))]
#[optional]
#[unsafe(method(encodeToCommandBuffer:inputs:outputs:error:_))]
#[unsafe(method_family = none)]
unsafe fn encodeToCommandBuffer_inputs_outputs_error(
&self,
command_buffer: &ProtocolObject<dyn MTLCommandBuffer>,
inputs: &NSArray<ProtocolObject<dyn MTLTexture>>,
outputs: &NSArray<ProtocolObject<dyn MTLTexture>>,
) -> Result<(), Retained<NSError>>;
}
);