in Tools/WinMLDashboard/src/cpp/DebugRunner/debug_cpu.cpp [295:391]
void DebugOperatorFactory::RegisterDebugSchema(winrt::com_ptr<IMLOperatorRegistry> registry)
{
MLOperatorSetId operatorSetId;
operatorSetId.domain = "";
operatorSetId.version = TARGET_OPSET;
MLOperatorSchemaDescription debugSchema;
debugSchema.name = "Debug";
debugSchema.operatorSetVersionAtLastChange = 1;
MLOperatorSchemaEdgeDescription debugXInput;
debugXInput.options = MLOperatorParameterOptions::Single;
debugXInput.typeFormat = MLOperatorSchemaEdgeTypeFormat::Label;
debugXInput.typeLabel = "T";
std::vector<MLOperatorSchemaEdgeDescription> inputs{ debugXInput };
debugSchema.inputs = inputs.data();
debugSchema.inputCount = static_cast<uint32_t>(inputs.size());
MLOperatorSchemaEdgeDescription debugXOutput;
debugXOutput.options = MLOperatorParameterOptions::Single;
debugXOutput.typeFormat = MLOperatorSchemaEdgeTypeFormat::Label;
debugXOutput.typeLabel = "T";
std::vector<MLOperatorSchemaEdgeDescription> outputs{ debugXOutput };
debugSchema.outputs = outputs.data();
debugSchema.outputCount = static_cast<uint32_t>(outputs.size());
MLOperatorEdgeTypeConstrant typeConstraint;
typeConstraint.typeLabel = "T";
std::vector<MLOperatorEdgeDescription> allowedEdges
{
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Float),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::UInt8),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Int8),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::UInt16),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Int16),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Int32),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Int64),
//CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::String), documented as unsupported
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Bool),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Float16),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Double),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::UInt32),
CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::UInt64),
//CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Complex64), documented as unsupported
//CreateEdgeDescriptor(MLOperatorEdgeType::Tensor, MLOperatorTensorDataType::Complex128) documented as unsupported
};
typeConstraint.allowedTypes = allowedEdges.data();
typeConstraint.allowedTypeCount = static_cast<uint32_t>(allowedEdges.size());
std::vector<MLOperatorEdgeTypeConstrant> typeConstraints{ typeConstraint };
debugSchema.typeConstraints = typeConstraints.data();
debugSchema.typeConstraintCount = static_cast<uint32_t>(typeConstraints.size());
MLOperatorAttribute debugFilePathAttribute;
debugFilePathAttribute.name = "file_path";
debugFilePathAttribute.required = false;
debugFilePathAttribute.type = MLOperatorAttributeType::String;
MLOperatorAttribute debugFileTypeAttribute;
debugFileTypeAttribute.name = "file_type";
debugFileTypeAttribute.required = false;
debugFileTypeAttribute.type = MLOperatorAttributeType::String;
std::vector<MLOperatorAttribute> attributes{ debugFilePathAttribute, debugFileTypeAttribute };
debugSchema.attributes = attributes.data();
debugSchema.attributeCount = static_cast<uint32_t>(attributes.size());
MLOperatorAttributeNameValue debugFilePathAttributeValue;
debugFilePathAttributeValue.name = "file_path";
debugFilePathAttributeValue.type = MLOperatorAttributeType::String;
debugFilePathAttributeValue.valueCount = 1;
static const char* defaultPaths[] = { "" };
debugFilePathAttributeValue.strings = defaultPaths;
MLOperatorAttributeNameValue debugFileTypeAttributeValue;
debugFileTypeAttributeValue.name = "file_type";
debugFileTypeAttributeValue.type = MLOperatorAttributeType::String;
debugFileTypeAttributeValue.valueCount = 1;
static const char* defaultTypes[] = { "png" };
debugFileTypeAttributeValue.strings = defaultPaths;
std::vector<MLOperatorAttributeNameValue> attributeDefaultValues{ debugFilePathAttributeValue, debugFileTypeAttributeValue };
debugSchema.defaultAttributes = attributeDefaultValues.data();
debugSchema.defaultAttributeCount = static_cast<uint32_t>(attributeDefaultValues.size());
std::vector<const MLOperatorSchemaDescription*> schemas{ &debugSchema };
registry->RegisterOperatorSetSchema(
&operatorSetId,
TARGET_OPSET /* baseline version */,
schemas.data(),
static_cast<uint32_t>(schemas.size()),
nullptr,
nullptr
);
}